diff options
Diffstat (limited to '')
-rw-r--r-- | win32/sys/ioctl.h | 0 | ||||
-rw-r--r-- | win32/sys/mman.h | 0 | ||||
-rw-r--r-- | win32/sys/resource.h | 0 | ||||
-rw-r--r-- | win32/sys/socket.h | 0 | ||||
-rw-r--r-- | win32/sys/statfs.h | 22 | ||||
-rw-r--r-- | win32/sys/syscall.h | 0 | ||||
-rw-r--r-- | win32/sys/sysmacros.h | 0 | ||||
-rw-r--r-- | win32/sys/times.h | 0 | ||||
-rw-r--r-- | win32/sys/un.h | 0 | ||||
-rw-r--r-- | win32/sys/utsname.h | 66 | ||||
-rw-r--r-- | win32/sys/vfs.h | 1 | ||||
-rw-r--r-- | win32/sys/wait.h | 0 | ||||
-rw-r--r-- | win32/system.c | 77 |
13 files changed, 166 insertions, 0 deletions
diff --git a/win32/sys/ioctl.h b/win32/sys/ioctl.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/ioctl.h | |||
diff --git a/win32/sys/mman.h b/win32/sys/mman.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/mman.h | |||
diff --git a/win32/sys/resource.h b/win32/sys/resource.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/resource.h | |||
diff --git a/win32/sys/socket.h b/win32/sys/socket.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/socket.h | |||
diff --git a/win32/sys/statfs.h b/win32/sys/statfs.h new file mode 100644 index 000000000..498f41e50 --- /dev/null +++ b/win32/sys/statfs.h | |||
@@ -0,0 +1,22 @@ | |||
1 | #ifndef _SYS_STATFS_H | ||
2 | #define _SYS_STATFS_H 1 | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | struct statfs { | ||
7 | int f_type; | ||
8 | uint64_t f_bsize; | ||
9 | uint64_t f_frsize; | ||
10 | uint64_t f_blocks; | ||
11 | uint64_t f_bfree; | ||
12 | uint64_t f_bavail; | ||
13 | uint64_t f_files; | ||
14 | uint64_t f_ffree; | ||
15 | uint64_t f_fsid; | ||
16 | uint64_t f_flag; | ||
17 | uint64_t f_namelen; | ||
18 | }; | ||
19 | |||
20 | extern int statfs(const char *file, struct statfs *buf); | ||
21 | |||
22 | #endif | ||
diff --git a/win32/sys/syscall.h b/win32/sys/syscall.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/syscall.h | |||
diff --git a/win32/sys/sysmacros.h b/win32/sys/sysmacros.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/sysmacros.h | |||
diff --git a/win32/sys/times.h b/win32/sys/times.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/times.h | |||
diff --git a/win32/sys/un.h b/win32/sys/un.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/un.h | |||
diff --git a/win32/sys/utsname.h b/win32/sys/utsname.h new file mode 100644 index 000000000..6f12efd58 --- /dev/null +++ b/win32/sys/utsname.h | |||
@@ -0,0 +1,66 @@ | |||
1 | /* Copyright (C) 1991,92,94,96,97,99,2002 Free Software Foundation, Inc. | ||
2 | This file is part of the GNU C Library. | ||
3 | |||
4 | The GNU C Library is free software; you can redistribute it and/or | ||
5 | modify it under the terms of the GNU Lesser General Public | ||
6 | License as published by the Free Software Foundation; either | ||
7 | version 2.1 of the License, or (at your option) any later version. | ||
8 | |||
9 | The GNU C Library is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | Lesser General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU Lesser General Public | ||
15 | License along with the GNU C Library; if not, write to the Free | ||
16 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | ||
17 | 02111-1307 USA. */ | ||
18 | |||
19 | /* | ||
20 | * POSIX Standard: 4.4 System Identification <sys/utsname.h> | ||
21 | */ | ||
22 | |||
23 | #ifndef _SYS_UTSNAME_H | ||
24 | #define _SYS_UTSNAME_H 1 | ||
25 | |||
26 | #define _UTSNAME_LENGTH 65 | ||
27 | |||
28 | #ifndef _UTSNAME_SYSNAME_LENGTH | ||
29 | # define _UTSNAME_SYSNAME_LENGTH _UTSNAME_LENGTH | ||
30 | #endif | ||
31 | #ifndef _UTSNAME_NODENAME_LENGTH | ||
32 | # define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH | ||
33 | #endif | ||
34 | #ifndef _UTSNAME_RELEASE_LENGTH | ||
35 | # define _UTSNAME_RELEASE_LENGTH _UTSNAME_LENGTH | ||
36 | #endif | ||
37 | #ifndef _UTSNAME_VERSION_LENGTH | ||
38 | # define _UTSNAME_VERSION_LENGTH _UTSNAME_LENGTH | ||
39 | #endif | ||
40 | #ifndef _UTSNAME_MACHINE_LENGTH | ||
41 | # define _UTSNAME_MACHINE_LENGTH _UTSNAME_LENGTH | ||
42 | #endif | ||
43 | |||
44 | /* Structure describing the system and machine. */ | ||
45 | struct utsname | ||
46 | { | ||
47 | /* Name of the implementation of the operating system. */ | ||
48 | char sysname[_UTSNAME_SYSNAME_LENGTH]; | ||
49 | |||
50 | /* Name of this node on the network. */ | ||
51 | char nodename[_UTSNAME_NODENAME_LENGTH]; | ||
52 | |||
53 | /* Current release level of this implementation. */ | ||
54 | char release[_UTSNAME_RELEASE_LENGTH]; | ||
55 | /* Current version level of this release. */ | ||
56 | char version[_UTSNAME_VERSION_LENGTH]; | ||
57 | |||
58 | /* Name of the hardware type the system is running on. */ | ||
59 | char machine[_UTSNAME_MACHINE_LENGTH]; | ||
60 | }; | ||
61 | |||
62 | /* Put information about the system in NAME. */ | ||
63 | extern int uname (struct utsname *__name); | ||
64 | |||
65 | |||
66 | #endif /* sys/utsname.h */ | ||
diff --git a/win32/sys/vfs.h b/win32/sys/vfs.h new file mode 100644 index 000000000..a899db276 --- /dev/null +++ b/win32/sys/vfs.h | |||
@@ -0,0 +1 @@ | |||
#include <sys/statfs.h> | |||
diff --git a/win32/sys/wait.h b/win32/sys/wait.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/win32/sys/wait.h | |||
diff --git a/win32/system.c b/win32/system.c new file mode 100644 index 000000000..c3e2c316e --- /dev/null +++ b/win32/system.c | |||
@@ -0,0 +1,77 @@ | |||
1 | #include "libbb.h" | ||
2 | |||
3 | int mingw_system(const char *cmd) | ||
4 | { | ||
5 | STARTUPINFO siStartInfo; | ||
6 | PROCESS_INFORMATION piProcInfo; | ||
7 | int success; | ||
8 | int len, count; | ||
9 | char *cmd_buff = NULL; | ||
10 | const char *s; | ||
11 | char *t; | ||
12 | DWORD ret; | ||
13 | |||
14 | if ( cmd == NULL ) { | ||
15 | return 1; | ||
16 | } | ||
17 | |||
18 | /* count double quotes */ | ||
19 | count = 0; | ||
20 | for ( s=cmd; *s; ++s ) { | ||
21 | if ( *s == '"' ) { | ||
22 | ++count; | ||
23 | } | ||
24 | } | ||
25 | |||
26 | len = strlen(cmd) + 10 + count; | ||
27 | if ( (cmd_buff=malloc(len)) == NULL ) { | ||
28 | return -1; | ||
29 | } | ||
30 | |||
31 | /* escape double quotes */ | ||
32 | strcpy(cmd_buff, "sh -c \""); | ||
33 | for ( s=cmd,t=cmd_buff+strlen(cmd_buff); *s; ++s ) { | ||
34 | if ( *s == '"' ) { | ||
35 | *t++ = '\\'; | ||
36 | } | ||
37 | *t++ = *s; | ||
38 | } | ||
39 | *t++ = '"'; | ||
40 | *t = '\0'; | ||
41 | |||
42 | /* Now create the child process */ | ||
43 | ZeroMemory(&siStartInfo, sizeof(STARTUPINFO)); | ||
44 | siStartInfo.cb = sizeof(STARTUPINFO); | ||
45 | siStartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); | ||
46 | siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); | ||
47 | siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); | ||
48 | siStartInfo.dwFlags = STARTF_USESTDHANDLES; | ||
49 | |||
50 | success = CreateProcess(NULL, | ||
51 | (LPTSTR)cmd_buff, /* command line */ | ||
52 | NULL, /* process security attributes */ | ||
53 | NULL, /* primary thread security attributes */ | ||
54 | TRUE, /* handles are inherited */ | ||
55 | 0, /* creation flags */ | ||
56 | NULL, /* use parent's environment */ | ||
57 | NULL, /* use parent's current directory */ | ||
58 | &siStartInfo, /* STARTUPINFO pointer */ | ||
59 | &piProcInfo); /* receives PROCESS_INFORMATION */ | ||
60 | |||
61 | if ( !success ) { | ||
62 | free(cmd_buff); | ||
63 | return 127; | ||
64 | } | ||
65 | |||
66 | free(cmd_buff); | ||
67 | |||
68 | WaitForSingleObject(piProcInfo.hProcess, INFINITE); | ||
69 | |||
70 | ret = 0; | ||
71 | GetExitCodeProcess(piProcInfo.hProcess, &ret); | ||
72 | |||
73 | CloseHandle(piProcInfo.hProcess); | ||
74 | CloseHandle(piProcInfo.hThread); | ||
75 | |||
76 | return ret; | ||
77 | } | ||