author | viric@llimona |
Sat, 09 Jun 2007 18:01:03 +0200 | |
changeset 0 | f7f7567e7bef |
permissions | -rw-r--r-- |
0
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
1 |
/* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
2 |
* Copyright (c) 1980 Regents of the University of California. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
3 |
* All rights reserved. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
4 |
* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
5 |
* Redistribution and use in source and binary forms, with or without |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
6 |
* modification, are permitted provided that the following conditions |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
7 |
* are met: |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
8 |
* 1. Redistributions of source code must retain the above copyright |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
9 |
* notice, this list of conditions and the following disclaimer. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
10 |
* 2. Redistributions in binary form must reproduce the above copyright |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
11 |
* notice, this list of conditions and the following disclaimer in the |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
12 |
* documentation and/or other materials provided with the distribution. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
13 |
* 3. All advertising materials mentioning features or use of this software |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
14 |
* must display the following acknowledgement: |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
15 |
* This product includes software developed by the University of |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
16 |
* California, Berkeley and its contributors. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
17 |
* 4. Neither the name of the University nor the names of its contributors |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
18 |
* may be used to endorse or promote products derived from this software |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
19 |
* without specific prior written permission. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
20 |
* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
21 |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
22 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
23 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
24 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
25 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
26 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
27 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
28 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
29 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
30 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
31 |
* SUCH DAMAGE. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
32 |
*/ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
33 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
34 |
/* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
35 |
* 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
36 |
* - added Native Language Support |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
37 |
* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
38 |
* 2000-07-30 Per Andreas Buer <per@linpro.no> - added "q"-option |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
39 |
*/ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
40 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
41 |
/* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
42 |
* script |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
43 |
*/ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
44 |
#include <stdio.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
45 |
#include <stdlib.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
46 |
#include <paths.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
47 |
#include <time.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
48 |
#include <sys/types.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
49 |
#include <sys/stat.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
50 |
#include <termios.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
51 |
#include <sys/ioctl.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
52 |
#include <sys/time.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
53 |
#include <sys/file.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
54 |
#include <sys/signal.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
55 |
#include "nls.h" |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
56 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
57 |
#ifdef __linux__ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
58 |
#include <unistd.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
59 |
#include <string.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
60 |
#endif |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
61 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
62 |
#include "../defines.h" |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
63 |
#ifdef HAVE_openpty |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
64 |
#include <pty.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
65 |
#endif |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
66 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
67 |
void finish(int); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
68 |
void done(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
69 |
void fail(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
70 |
void resize(int); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
71 |
void fixtty(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
72 |
void getmaster(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
73 |
void getslave(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
74 |
void doinput(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
75 |
void dooutput(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
76 |
void doshell(void); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
77 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
78 |
char *shell; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
79 |
FILE *fscript; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
80 |
int master; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
81 |
int slave; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
82 |
int child; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
83 |
int subchild; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
84 |
char *fname; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
85 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
86 |
struct termios tt; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
87 |
struct winsize win; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
88 |
int lb; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
89 |
int l; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
90 |
#ifndef HAVE_openpty |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
91 |
char line[] = "/dev/ptyXX"; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
92 |
#endif |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
93 |
int aflg = 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
94 |
char *cflg = NULL; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
95 |
int fflg = 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
96 |
int qflg = 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
97 |
int tflg = 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
98 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
99 |
static char *progname; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
100 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
101 |
static void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
102 |
die_if_link(char *fn) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
103 |
struct stat s; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
104 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
105 |
if (lstat(fn, &s) == 0 && (S_ISLNK(s.st_mode) || s.st_nlink > 1)) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
106 |
fprintf(stderr, |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
107 |
_("Warning: `%s' is a link.\n" |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
108 |
"Use `%s [options] %s' if you really " |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
109 |
"want to use it.\n" |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
110 |
"Script not started.\n"), |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
111 |
fn, progname, fn); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
112 |
exit(1); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
113 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
114 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
115 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
116 |
/* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
117 |
* script -t prints time delays as floating point numbers |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
118 |
* The example program (scriptreplay) that we provide to handle this |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
119 |
* timing output is a perl script, and does not handle numbers in |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
120 |
* locale format (not even when "use locale;" is added). |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
121 |
* So, since these numbers are not for human consumption, it seems |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
122 |
* easiest to set LC_NUMERIC here. |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
123 |
*/ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
124 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
125 |
int |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
126 |
main(int argc, char **argv) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
127 |
extern int optind; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
128 |
char *p; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
129 |
int ch; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
130 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
131 |
progname = argv[0]; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
132 |
if ((p = strrchr(progname, '/')) != NULL) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
133 |
progname = p+1; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
134 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
135 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
136 |
setlocale(LC_ALL, ""); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
137 |
setlocale(LC_NUMERIC, "C"); /* see comment above */ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
138 |
bindtextdomain(PACKAGE, LOCALEDIR); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
139 |
textdomain(PACKAGE); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
140 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
141 |
if (argc == 2) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
142 |
if (!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version")) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
143 |
printf(_("%s from %s\n"), |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
144 |
progname, util_linux_version); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
145 |
return 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
146 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
147 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
148 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
149 |
while ((ch = getopt(argc, argv, "ac:fqt")) != -1) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
150 |
switch((char)ch) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
151 |
case 'a': |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
152 |
aflg++; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
153 |
break; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
154 |
case 'c': |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
155 |
cflg = optarg; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
156 |
break; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
157 |
case 'f': |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
158 |
fflg++; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
159 |
break; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
160 |
case 'q': |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
161 |
qflg++; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
162 |
break; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
163 |
case 't': |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
164 |
tflg++; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
165 |
break; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
166 |
case '?': |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
167 |
default: |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
168 |
fprintf(stderr, |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
169 |
_("usage: script [-a] [-f] [-q] [-t] [file]\n")); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
170 |
exit(1); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
171 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
172 |
argc -= optind; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
173 |
argv += optind; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
174 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
175 |
if (argc > 0) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
176 |
fname = argv[0]; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
177 |
else { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
178 |
fname = "typescript"; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
179 |
die_if_link(fname); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
180 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
181 |
if ((fscript = fopen(fname, aflg ? "a" : "w")) == NULL) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
182 |
perror(fname); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
183 |
fail(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
184 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
185 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
186 |
shell = getenv("SHELL"); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
187 |
if (shell == NULL) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
188 |
shell = _PATH_BSHELL; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
189 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
190 |
getmaster(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
191 |
if (!qflg) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
192 |
printf(_("Script started, file is %s\n"), fname); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
193 |
fixtty(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
194 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
195 |
(void) signal(SIGCHLD, finish); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
196 |
child = fork(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
197 |
if (child < 0) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
198 |
perror("fork"); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
199 |
fail(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
200 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
201 |
if (child == 0) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
202 |
subchild = child = fork(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
203 |
if (child < 0) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
204 |
perror("fork"); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
205 |
fail(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
206 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
207 |
if (child) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
208 |
dooutput(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
209 |
else |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
210 |
doshell(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
211 |
} else |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
212 |
(void) signal(SIGWINCH, resize); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
213 |
doinput(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
214 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
215 |
return 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
216 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
217 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
218 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
219 |
doinput() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
220 |
register int cc; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
221 |
char ibuf[BUFSIZ]; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
222 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
223 |
(void) fclose(fscript); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
224 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
225 |
while ((cc = read(0, ibuf, BUFSIZ)) > 0) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
226 |
(void) write(master, ibuf, cc); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
227 |
done(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
228 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
229 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
230 |
#include <sys/wait.h> |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
231 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
232 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
233 |
finish(int dummy) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
234 |
int status; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
235 |
register int pid; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
236 |
register int die = 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
237 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
238 |
while ((pid = wait3(&status, WNOHANG, 0)) > 0) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
239 |
if (pid == child) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
240 |
die = 1; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
241 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
242 |
if (die) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
243 |
done(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
244 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
245 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
246 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
247 |
resize(int dummy) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
248 |
/* transmit window change information to the child */ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
249 |
(void) ioctl(0, TIOCGWINSZ, (char *)&win); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
250 |
(void) ioctl(slave, TIOCSWINSZ, (char *)&win); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
251 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
252 |
kill(child, SIGWINCH); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
253 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
254 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
255 |
/* |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
256 |
* Stop extremely silly gcc complaint on %c: |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
257 |
* warning: `%c' yields only last 2 digits of year in some locales |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
258 |
*/ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
259 |
static void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
260 |
my_strftime(char *buf, size_t len, const char *fmt, const struct tm *tm) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
261 |
strftime(buf, len, fmt, tm); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
262 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
263 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
264 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
265 |
dooutput() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
266 |
register int cc; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
267 |
time_t tvec; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
268 |
char obuf[BUFSIZ]; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
269 |
struct timeval tv; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
270 |
double oldtime=time(NULL), newtime; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
271 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
272 |
(void) close(0); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
273 |
#ifdef HAVE_openpty |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
274 |
(void) close(slave); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
275 |
#endif |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
276 |
tvec = time((time_t *)NULL); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
277 |
my_strftime(obuf, sizeof obuf, "%c\n", localtime(&tvec)); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
278 |
fprintf(fscript, _("Script started on %s"), obuf); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
279 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
280 |
for (;;) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
281 |
if (tflg) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
282 |
gettimeofday(&tv, NULL); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
283 |
cc = read(master, obuf, sizeof (obuf)); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
284 |
if (cc <= 0) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
285 |
break; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
286 |
if (tflg) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
287 |
newtime = tv.tv_sec + (double) tv.tv_usec / 1000000; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
288 |
fprintf(stderr, "%f %i\n", newtime - oldtime, cc); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
289 |
oldtime = newtime; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
290 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
291 |
(void) write(1, obuf, cc); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
292 |
(void) fwrite(obuf, 1, cc, fscript); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
293 |
if (fflg) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
294 |
(void) fflush(fscript); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
295 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
296 |
done(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
297 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
298 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
299 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
300 |
doshell() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
301 |
char *shname; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
302 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
303 |
#if 0 |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
304 |
int t; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
305 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
306 |
t = open(_PATH_TTY, O_RDWR); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
307 |
if (t >= 0) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
308 |
(void) ioctl(t, TIOCNOTTY, (char *)0); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
309 |
(void) close(t); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
310 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
311 |
#endif |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
312 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
313 |
getslave(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
314 |
(void) close(master); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
315 |
(void) fclose(fscript); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
316 |
(void) dup2(slave, 0); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
317 |
(void) dup2(slave, 1); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
318 |
(void) dup2(slave, 2); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
319 |
(void) close(slave); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
320 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
321 |
shname = strrchr(shell, '/'); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
322 |
if (shname) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
323 |
shname++; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
324 |
else |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
325 |
shname = shell; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
326 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
327 |
if (cflg) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
328 |
execl(shell, shname, "-c", cflg, 0); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
329 |
else |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
330 |
execl(shell, shname, "-i", 0); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
331 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
332 |
perror(shell); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
333 |
fail(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
334 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
335 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
336 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
337 |
fixtty() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
338 |
struct termios rtt; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
339 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
340 |
rtt = tt; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
341 |
cfmakeraw(&rtt); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
342 |
rtt.c_lflag &= ~ECHO; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
343 |
(void) tcsetattr(0, TCSAFLUSH, &rtt); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
344 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
345 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
346 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
347 |
fail() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
348 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
349 |
(void) kill(0, SIGTERM); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
350 |
done(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
351 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
352 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
353 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
354 |
done() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
355 |
time_t tvec; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
356 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
357 |
if (subchild) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
358 |
if (!qflg) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
359 |
char buf[BUFSIZ]; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
360 |
tvec = time((time_t *)NULL); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
361 |
my_strftime(buf, sizeof buf, "%c\n", localtime(&tvec)); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
362 |
fprintf(fscript, _("\nScript done on %s"), buf); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
363 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
364 |
(void) fclose(fscript); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
365 |
(void) close(master); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
366 |
} else { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
367 |
(void) tcsetattr(0, TCSAFLUSH, &tt); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
368 |
if (!qflg) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
369 |
printf(_("Script done, file is %s\n"), fname); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
370 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
371 |
exit(0); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
372 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
373 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
374 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
375 |
getmaster() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
376 |
#ifdef HAVE_openpty |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
377 |
(void) tcgetattr(0, &tt); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
378 |
(void) ioctl(0, TIOCGWINSZ, (char *)&win); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
379 |
if (openpty(&master, &slave, NULL, &tt, &win) < 0) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
380 |
fprintf(stderr, _("openpty failed\n")); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
381 |
fail(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
382 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
383 |
#else |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
384 |
char *pty, *bank, *cp; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
385 |
struct stat stb; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
386 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
387 |
pty = &line[strlen("/dev/ptyp")]; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
388 |
for (bank = "pqrs"; *bank; bank++) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
389 |
line[strlen("/dev/pty")] = *bank; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
390 |
*pty = '0'; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
391 |
if (stat(line, &stb) < 0) |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
392 |
break; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
393 |
for (cp = "0123456789abcdef"; *cp; cp++) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
394 |
*pty = *cp; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
395 |
master = open(line, O_RDWR); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
396 |
if (master >= 0) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
397 |
char *tp = &line[strlen("/dev/")]; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
398 |
int ok; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
399 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
400 |
/* verify slave side is usable */ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
401 |
*tp = 't'; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
402 |
ok = access(line, R_OK|W_OK) == 0; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
403 |
*tp = 'p'; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
404 |
if (ok) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
405 |
(void) tcgetattr(0, &tt); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
406 |
(void) ioctl(0, TIOCGWINSZ, |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
407 |
(char *)&win); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
408 |
return; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
409 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
410 |
(void) close(master); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
411 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
412 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
413 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
414 |
fprintf(stderr, _("Out of pty's\n")); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
415 |
fail(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
416 |
#endif /* not HAVE_openpty */ |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
417 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
418 |
|
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
419 |
void |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
420 |
getslave() { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
421 |
#ifndef HAVE_openpty |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
422 |
line[strlen("/dev/")] = 't'; |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
423 |
slave = open(line, O_RDWR); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
424 |
if (slave < 0) { |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
425 |
perror(line); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
426 |
fail(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
427 |
} |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
428 |
(void) tcsetattr(slave, TCSAFLUSH, &tt); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
429 |
(void) ioctl(slave, TIOCSWINSZ, (char *)&win); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
430 |
#endif |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
431 |
(void) setsid(); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
432 |
(void) ioctl(slave, TIOCSCTTY, 0); |
f7f7567e7bef
Initial import of script.c from util-linux-2.12r (gentoo)
viric@llimona
parents:
diff
changeset
|
433 |
} |