6
6
* modification, are permitted provided that the following conditions
7
7
* are met:
8
8
* 1. Redistributions of source code must retain the above copyright
9
- * notice, this list of conditions and the following disclaimer.
9
+ * notice, this list of conditions and the following disclaimer.
10
10
* 2. Redistributions in binary form must reproduce the above copyright
11
- * notice, this list of conditions and the following disclaimer in the
12
- * documentation and/or other materials provided with the distribution.
11
+ * notice, this list of conditions and the following disclaimer in the
12
+ * documentation and/or other materials provided with the distribution.
13
13
* 3. All advertising materials mentioning features or use of this software
14
- * must display the following acknowledgement:
14
+ * must display the following acknowledgement:
15
15
*This product includes software developed by the University of
16
16
*California, Berkeley and its contributors.
17
17
* 4. Neither the name of the University nor the names of its contributors
18
- * may be used to endorse or promote products derived from this software
19
- * without specific prior written permission.
18
+ * may be used to endorse or promote products derived from this software
19
+ * without specific prior written permission.
20
20
*
21
21
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35
35
36
36
#if defined(LIBC_SCCS )&& !defined(lint )
37
37
static char sccsid []= "@(#)system.c8.1 (Berkeley) 6/4/93" ;
38
- #endif /* LIBC_SCCS and not lint */
38
+ #endif /* LIBC_SCCS and not lint */
39
39
40
40
#include <sys/types.h>
41
41
#include <sys/wait.h>
@@ -46,51 +46,57 @@ static char sccsid[] = "@(#)system.c8.1 (Berkeley) 6/4/93";
46
46
#include <paths.h>
47
47
#include <errno.h>
48
48
49
- int system (const char * command );
49
+ int system (const char * command );
50
50
51
51
int
52
52
system (const char * command )
53
53
{
54
- pid_t pid ;
55
- int pstat ;
56
- struct sigaction ign ,intact ,quitact ;
57
- sigset_t newsigblock ,oldsigblock ;
54
+ pid_t pid ;
55
+ int pstat ;
56
+ struct sigaction ign ,
57
+ intact ,
58
+ quitact ;
59
+ sigset_t newsigblock ,
60
+ oldsigblock ;
58
61
59
- if (!command )/* just checking... */
60
- return (1 );
62
+ if (!command )/* just checking... */
63
+ return (1 );
61
64
62
65
/*
63
- * Ignore SIGINT and SIGQUIT, block SIGCHLD. Remember to save
64
- *existing signal dispositions.
66
+ * Ignore SIGINT and SIGQUIT, block SIGCHLD. Remember to save existing
67
+ * signal dispositions.
65
68
*/
66
69
ign .sa_handler = SIG_IGN ;
67
- (void )sigemptyset (& ign .sa_mask );
70
+ (void )sigemptyset (& ign .sa_mask );
68
71
ign .sa_flags = 0 ;
69
- (void )sigaction (SIGINT ,& ign ,& intact );
70
- (void )sigaction (SIGQUIT ,& ign ,& quitact );
71
- (void )sigemptyset (& newsigblock );
72
- (void )sigaddset (& newsigblock ,SIGCHLD );
73
- (void )sigprocmask (SIG_BLOCK ,& newsigblock ,& oldsigblock );
74
- switch (pid = fork ()) {
75
- case -1 :/* error */
76
- break ;
77
- case 0 :/* child */
78
- /*
79
- * Restore original signal dispositions and exec the command.
80
- */
81
- (void )sigaction (SIGINT ,& intact ,NULL );
82
- (void )sigaction (SIGQUIT ,& quitact ,NULL );
83
- (void )sigprocmask (SIG_SETMASK ,& oldsigblock ,NULL );
84
- execl (_PATH_BSHELL ,"sh" ,"-c" ,command , (char * )NULL );
85
- _exit (127 );
86
- default :/* parent */
87
- do {
88
- pid = wait4 (pid ,& pstat ,0 , (struct rusage * )0 );
89
- }while (pid == -1 && errno == EINTR );
90
- break ;
72
+ (void )sigaction (SIGINT ,& ign ,& intact );
73
+ (void )sigaction (SIGQUIT ,& ign ,& quitact );
74
+ (void )sigemptyset (& newsigblock );
75
+ (void )sigaddset (& newsigblock ,SIGCHLD );
76
+ (void )sigprocmask (SIG_BLOCK ,& newsigblock ,& oldsigblock );
77
+ switch (pid = fork ())
78
+ {
79
+ case -1 :/* error */
80
+ break ;
81
+ case 0 :/* child */
82
+
83
+ /*
84
+ * Restore original signal dispositions and exec the command.
85
+ */
86
+ (void )sigaction (SIGINT ,& intact ,NULL );
87
+ (void )sigaction (SIGQUIT ,& quitact ,NULL );
88
+ (void )sigprocmask (SIG_SETMASK ,& oldsigblock ,NULL );
89
+ execl (_PATH_BSHELL ,"sh" ,"-c" ,command , (char * )NULL );
90
+ _exit (127 );
91
+ default :/* parent */
92
+ do
93
+ {
94
+ pid = wait4 (pid ,& pstat ,0 , (struct rusage * )0 );
95
+ }while (pid == -1 && errno == EINTR );
96
+ break ;
91
97
}
92
- (void )sigaction (SIGINT ,& intact ,NULL );
93
- (void )sigaction (SIGQUIT ,& quitact ,NULL );
94
- (void )sigprocmask (SIG_SETMASK ,& oldsigblock ,NULL );
95
- return (pid == -1 ?-1 :pstat );
98
+ (void )sigaction (SIGINT ,& intact ,NULL );
99
+ (void )sigaction (SIGQUIT ,& quitact ,NULL );
100
+ (void )sigprocmask (SIG_SETMASK ,& oldsigblock ,NULL );
101
+ return (pid == -1 ?-1 :pstat );
96
102
}