Changeset 2894 for trunk/src/kWorker/kWorker.c
- Timestamp:
- Sep 8, 2016, 3:27:56 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kWorker/kWorker.c
r2892 r2894 53 53 #include "quote_argv.h" 54 54 #include "md5.h" 55 56 #include "../kmk/kmkbuiltin.h" 55 57 56 58 … … 6894 6896 6895 6897 /** 6898 * Does the post command part of a job (optional). 6899 * 6900 * @returns The exit code of the job. 6901 * @param cPostCmdArgs Number of post command arguments (includes cmd). 6902 * @param papszPostCmdArgs The post command and its argument. 6903 */ 6904 static int kSubmitHandleJobPostCmd(KU32 cPostCmdArgs, const char **papszPostCmdArgs) 6905 { 6906 const char *pszCmd = papszPostCmdArgs[0]; 6907 6908 /* Allow the kmk builtin prefix. */ 6909 static const char s_szKmkBuiltinPrefix[] = "kmk_builtin_"; 6910 if (kHlpStrNComp(pszCmd, s_szKmkBuiltinPrefix, sizeof(s_szKmkBuiltinPrefix) - 1) == 0) 6911 pszCmd += sizeof(s_szKmkBuiltinPrefix) - 1; 6912 6913 /* Command switch. */ 6914 if (kHlpStrComp(pszCmd, "kDepObj") == 0) 6915 return kmk_builtin_kDepObj(cPostCmdArgs, (char **)papszPostCmdArgs, NULL); 6916 6917 return kwErrPrintfRc(42 + 5 , "Unknown post command: '%s'\n", pszCmd); 6918 } 6919 6920 6921 /** 6896 6922 * Part 2 of the "JOB" command handler. 6897 6923 * 6898 6924 * @returns The exit code of the job. 6899 * @param pszExecutable The executable to execute.6900 * @param pszCwd The current working directory of the job.6901 * @param cArgs The number of arguments.6902 * @param papszArgs The argument vector.6925 * @param pszExecutable The executable to execute. 6926 * @param pszCwd The current working directory of the job. 6927 * @param cArgs The number of arguments. 6928 * @param papszArgs The argument vector. 6903 6929 * @param fWatcomBrainDamange Whether to apply watcom rules while quoting. 6904 * @param cEnvVars The number of environment variables. 6905 * @param papszEnvVars The enviornment vector. 6930 * @param cEnvVars The number of environment variables. 6931 * @param papszEnvVars The enviornment vector. 6932 * @param cPostCmdArgs Number of post command arguments (includes cmd). 6933 * @param papszPostCmdArgs The post command and its argument. 6906 6934 */ 6907 6935 static int kSubmitHandleJobUnpacked(const char *pszExecutable, const char *pszCwd, 6908 6936 KU32 cArgs, const char **papszArgs, KBOOL fWatcomBrainDamange, 6909 KU32 cEnvVars, const char **papszEnvVars) 6937 KU32 cEnvVars, const char **papszEnvVars, 6938 KU32 cPostCmdArgs, const char **papszPostCmdArgs) 6910 6939 { 6911 6940 int rcExit; … … 6972 7001 break; 6973 7002 } 7003 7004 /* 7005 * Do the post command, if present. 7006 */ 7007 if (cPostCmdArgs && rcExit == 0) 7008 rcExit = kSubmitHandleJobPostCmd(cPostCmdArgs, papszPostCmdArgs); 6974 7009 } 6975 7010 else … … 7063 7098 if (papszEnvVars) 7064 7099 { 7065 KU32 i;7066 7100 for (i = 0; i < cEnvVars; i++) 7067 7101 { … … 7078 7112 } 7079 7113 papszEnvVars[cEnvVars] = 0; 7114 7115 /* Flags (currently just watcom argument brain damanage). */ 7080 7116 if (cbMsg >= sizeof(KU8)) 7081 7117 { 7082 7118 KBOOL fWatcomBrainDamange = *pszMsg++; 7083 7119 cbMsg--; 7084 if (cbMsg == 0) 7120 7121 /* Post command argument count (can be zero). */ 7122 if (cbMsg >= sizeof(KU32)) 7085 7123 { 7086 /* 7087 * The next step. 7088 */ 7089 rcExit = kSubmitHandleJobUnpacked(pszExecutable, pszCwd, 7090 cArgs, papszArgs, fWatcomBrainDamange, 7091 cEnvVars, papszEnvVars); 7124 KU32 cPostCmdArgs; 7125 kHlpMemCopy(&cPostCmdArgs, pszMsg, sizeof(cPostCmdArgs)); 7126 pszMsg += sizeof(cPostCmdArgs); 7127 cbMsg -= sizeof(cPostCmdArgs); 7128 7129 if (cPostCmdArgs >= 0 && cPostCmdArgs < 32) 7130 { 7131 char const *apszPostCmdArgs[32+1]; 7132 for (i = 0; i < cPostCmdArgs; i++) 7133 { 7134 apszPostCmdArgs[i] = pszMsg; 7135 cbTmp = kHlpStrLen(pszMsg) + 1; 7136 pszMsg += cbTmp; 7137 if ( cbTmp < cbMsg 7138 || (cbTmp == cbMsg && i + 1 == cPostCmdArgs)) 7139 cbMsg -= cbTmp; 7140 else 7141 { 7142 cbMsg = KSIZE_MAX; 7143 break; 7144 } 7145 } 7146 if (cbMsg == 0) 7147 { 7148 apszPostCmdArgs[cPostCmdArgs] = NULL; 7149 7150 /* 7151 * The next step. 7152 */ 7153 rcExit = kSubmitHandleJobUnpacked(pszExecutable, pszCwd, 7154 cArgs, papszArgs, fWatcomBrainDamange, 7155 cEnvVars, papszEnvVars, 7156 cPostCmdArgs, apszPostCmdArgs); 7157 } 7158 else if (cbMsg == KSIZE_MAX) 7159 kwErrPrintf("Detected bogus message unpacking post command and its arguments!\n"); 7160 else 7161 kwErrPrintf("Message has %u bytes unknown trailing bytes\n", cbMsg); 7162 } 7163 else 7164 kwErrPrintf("Bogus post command argument count: %u %#x\n", cPostCmdArgs, cPostCmdArgs); 7092 7165 } 7093 7166 else 7094 kwErrPrintf(" Message has %u bytes unknown trailing bytes\n", cbMsg);7167 kwErrPrintf("Detected bogus message looking for the post command argument count!\n"); 7095 7168 } 7096 7169 else … … 7281 7354 rcExit = kSubmitHandleJobUnpacked(argv[i], pszCwd, 7282 7355 argc - i, &argv[i], fWatcomBrainDamange, 7283 cEnvVars, environ); 7356 cEnvVars, environ, 7357 0, NULL); 7284 7358 KW_LOG(("rcExit=%d\n", rcExit)); 7285 7359 kwSandboxCleanupLate(&g_Sandbox);
Note:
See TracChangeset
for help on using the changeset viewer.