- Timestamp:
- Apr 14, 2014, 4:19:42 AM (11 years ago)
- Location:
- branches/libc-0.6/src/emx
- Files:
-
- 6 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/libc-0.6/src/emx/include/InnoTekLIBC/backend.h
- Property svn:mergeinfo changed
/trunk/libc/include/klibc/backend.h merged: 3857
r3817 r3859 1042 1042 /** When this flag is set, the exec / spawn backend will handle PC batch scripts. */ 1043 1043 extern int __libc_Back_gfProcessHandlePCBatchScripts; 1044 1045 /** 1046 * Gets the default shell for functions like system() and popen(). 1047 * 1048 * @returns 0 on success, negative error number on failure. 1049 * @param pszShell Where to put the path to the shell. 1050 * @param cbShell The size of the buffer @a pszShell points to. 1051 * @param poffShellArg Where to return the offset into @a pszShell of the 1052 * first argument. The system() and popen() calls has 1053 * traditionally not included the path to /bin/sh. 1054 * @param pszCmdLineOpt Where to put the shell option for specifying a 1055 * command line it should execute. 1056 * @param cbCmdLineOpt The size of the buffer @a pszCmdLineOpt points to. 1057 */ 1058 int __libc_Back_processGetDefaultShell(char *pszShell, size_t cbShell, size_t *poffShellArg, 1059 char *pszCmdLineOpt, size_t cbCmdLineOpt); 1044 1060 1045 1061 /** @} */ - Property svn:mergeinfo changed
-
branches/libc-0.6/src/emx/src/lib/io
- Property svn:mergeinfo changed
/trunk/libc/src/libc/io merged: 3857
- Property svn:mergeinfo changed
-
branches/libc-0.6/src/emx/src/lib/io/popen.c
r871 r3859 10 10 #include <fcntl.h> 11 11 #include <errno.h> 12 #include <InnotekLIBC/backend.h> 12 13 13 14 static void restore (int org_handle, int org_private, int handle) … … 27 28 int i, org_handle, org_private; 28 29 FILE *f; 29 const char *sh, *base, *opt; 30 char szShell[260]; 31 size_t offShellArg; 32 char szCmdLineOpt[8]; 33 int rc; 30 34 31 35 fcntl (pipe_local, F_SETFD, FD_CLOEXEC); … … 56 60 return NULL; 57 61 } 58 sh = getenv ("EMXSHELL"); 59 if (sh == NULL) 60 sh = getenv ("COMSPEC"); 61 if (sh == NULL) 62 rc = __libc_Back_processGetDefaultShell (&szShell[0], sizeof(szShell), &offShellArg, &szCmdLineOpt[0], sizeof(szCmdLineOpt)); 63 if (rc != 0) 62 64 { 63 65 fclose (f); 64 66 restore (org_handle, org_private, handle); 65 errno = ENOENT;67 errno = -rc; 66 68 return NULL; 67 69 } 68 base = _getname (sh); 69 if (stricmp (base, "cmd.exe") == 0 || stricmp (base, "4os2.exe") == 0) 70 opt = "/c"; 71 else 72 opt = "-c"; 73 i = spawnlp (P_NOWAIT, sh, sh, opt, command, (char *)0); 70 i = spawnlp (P_NOWAIT, szShell, &szShell[offShellArg], szCmdLineOpt, command, (char *)0); 74 71 if (i == -1) 75 72 { -
branches/libc-0.6/src/emx/src/lib/libc.def
r3818 r3859 1966 1966 "___libc_Back_fsFileOwnerSetFH" @1962 1967 1967 "___libc_Back_fsSymlinkOwnerSet" @1963 1968 1968 "___libc_Back_processGetDefaultShell" @1964 1969 -
branches/libc-0.6/src/emx/src/lib/process
-
Property svn:mergeinfo
set to
/trunk/libc/src/libc/process merged eligible
-
Property svn:mergeinfo
set to
-
branches/libc-0.6/src/emx/src/lib/process/system.c
r2254 r3859 1 /* system.c (emx+gcc) -- Copyright (c) 1990-1995 by Eberhard Mattes */ 1 /* $Id: b_processSetResourceLimit.c 3770 2012-03-15 20:02:46Z bird $ */ 2 /** @file 3 * kNIX - get default shell for system() and popen(). 4 * 5 * @copyright Copyright (C) 2014 knut st. osmundsen <bird-klibc-spam-xiv@anduin.net> 6 * @licenses MIT, BSD2, BSD3, BSD4, LGPLv2.1, LGPLv3. 7 */ 2 8 9 10 /******************************************************************************* 11 * Header Files * 12 *******************************************************************************/ 13 #define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS 3 14 #include "libc-alias.h" 4 15 #include <stdlib.h> 5 #include <string.h> 6 #include <process.h> 16 7 17 #include <io.h> 8 18 #include <errno.h> 9 #define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS 10 #include <InnoTekLIBC/logstrict.h> 19 #include <process.h> 20 #include <unistd.h> 21 #include <InnotekLIBC/backend.h> 22 #include <InnotekLIBC/logstrict.h> 11 23 12 int _STD(system)(const char *name) 24 25 int _STD(system)(const char *pszCmdLine) 13 26 { 14 LIBCLOG_ENTER("name=%s\n", name); 15 int rc; 16 const char *sh, *base, *opt; 17 18 sh = getenv("EMXSHELL"); 19 if (sh == NULL) 20 sh = getenv("COMSPEC"); 21 if (sh == NULL) 22 sh = getenv("OS2_SHELL"); 23 if (sh == NULL) 24 sh = getenv("SHELL"); 25 if (sh == NULL) 27 LIBCLOG_ENTER("pszCmdLine=%s\n", pszCmdLine); 28 char szCmdLineOpt[8]; 29 char szShell[260]; 30 size_t offShellArg; 31 int rc = __libc_Back_processGetDefaultShell(szShell, sizeof(szShell), &offShellArg, szCmdLineOpt, sizeof(szCmdLineOpt)); 32 if (rc == 0) 26 33 { 27 errno = ENOENT; 28 LIBCLOG_ERROR_RETURN(-1, "ret -1 - no shell\n"); 34 LIBCLOG_MSG("using shell: %s\n", pszCmdLine); 35 if (pszCmdLine == 0) 36 rc = access(szShell, F_OK) == 0; 37 else if (*pszCmdLine) 38 rc = spawnlp(P_WAIT, szShell, &szShell[offShellArg], (void *)NULL); 39 else 40 rc = spawnlp(P_WAIT, szShell, &szShell[offShellArg], szCmdLineOpt, pszCmdLine, (void *)NULL); 29 41 } 30 LIBCLOG_MSG("using shell: %s\n", sh);31 if (name == NULL) /* Check for command interpreter */32 {33 LIBCLOG_MSG("check shell access\n");34 rc = access(sh, 0) == 0;35 LIBCLOG_RETURN_INT(rc);36 }37 if (*name == 0)38 rc = spawnlp(P_WAIT, sh, sh, (char *)0);39 42 else 40 43 { 41 base = _getname(sh); 42 if ( stricmp(base, "cmd.exe") == 0 43 || stricmp(base, "4os2.exe") == 0 44 || stricmp(base, "command.com") == 0 45 || stricmp(base, "4dos.com") == 0) 46 opt = "/c"; 47 else 48 opt = "-c"; 49 rc = spawnlp(P_WAIT, sh, sh, opt, name, (char *)0); 44 errno = -rc; 45 rc = -1; 50 46 } 51 47 LIBCLOG_RETURN_INT(rc); 52 48 } 49 -
branches/libc-0.6/src/emx/src/lib/sys/b_processGetDefaultShell.c
r3858 r3859 11 11 * Header Files * 12 12 *******************************************************************************/ 13 #include "kNIX.h" 13 #include "libc-alias.h" 14 #include "syscalls.h" 15 #include <errno.h> 16 #include <string.h> 17 #include <stdlib.h> 18 #include <sys/stat.h> 14 19 #define __LIBC_LOG_GROUP __LIBC_LOG_GRP_BACK_PROCESS 15 #include <klibc/logstrict.h> 16 #include <klibc/initterm.h> 20 #include <InnotekLIBC/logstrict.h> 21 #include <InnotekLIBC/libc.h> 22 #include <InnotekLIBC/backend.h> 17 23 18 24
Note:
See TracChangeset
for help on using the changeset viewer.