Changeset 1290 for trunk/src/kmk/kmkbuiltin.c
- Timestamp:
- Dec 1, 2007, 1:22:28 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/kmkbuiltin.c
r1162 r1290 29 29 #include <stdio.h> 30 30 #include <ctype.h> 31 #include <assert.h> 31 32 #ifdef _MSC_VER 32 33 # include <io.h> … … 39 40 #endif 40 41 41 int kmk_builtin_command(const char *pszCmd )42 int kmk_builtin_command(const char *pszCmd, char ***ppapszArgvToSpawn, pid_t *pPidSpawned) 42 43 { 43 44 int argc; … … 151 152 */ 152 153 if (!*pszCmd) 153 rc = kmk_builtin_command_parsed(argc, argv );154 rc = kmk_builtin_command_parsed(argc, argv, ppapszArgvToSpawn, pPidSpawned); 154 155 else 155 156 rc = 1; … … 163 164 164 165 165 int kmk_builtin_command_parsed(int argc, char **argv )166 int kmk_builtin_command_parsed(int argc, char **argv, char ***ppapszArgvToSpawn, pid_t *pPidSpawned) 166 167 { 167 168 const char *pszCmd = argv[0]; … … 194 195 else if (!strcmp(pszCmd, "kDepIDB")) 195 196 rc = kmk_builtin_kDepIDB(argc, argv, environ); 196 else if (!strcmp(pszCmd, "ln"))197 rc = kmk_builtin_ln(argc, argv, environ);198 197 else if (!strcmp(pszCmd, "mkdir")) 199 198 rc = kmk_builtin_mkdir(argc, argv, environ); 200 199 else if (!strcmp(pszCmd, "mv")) 201 200 rc = kmk_builtin_mv(argc, argv, environ); 201 /*else if (!strcmp(pszCmd, "redirect")) 202 rc = kmk_builtin_redirect(argc, argv, environ, pPidSpawned);*/ 202 203 else if (!strcmp(pszCmd, "rm")) 203 204 rc = kmk_builtin_rm(argc, argv, environ); 204 205 else if (!strcmp(pszCmd, "rmdir")) 205 206 rc = kmk_builtin_rmdir(argc, argv, environ); 207 /*else if (!strcmp(pszCmd, "test")) 208 rc = kmk_builtin_test(argc, argv, environ, ppapszArgvToSpawn);*/ 206 209 /* rarely used commands: */ 207 210 else if (!strcmp(pszCmd, "cp")) 208 211 rc = kmk_builtin_cp(argc, argv, environ); 212 else if (!strcmp(pszCmd, "ln")) 213 rc = kmk_builtin_ln(argc, argv, environ); 209 214 else if (!strcmp(pszCmd, "md5sum")) 210 215 rc = kmk_builtin_md5sum(argc, argv, environ); … … 218 223 return 1; 219 224 } 225 226 /* 227 * Cleanup. 228 */ 220 229 g_progname = "kmk"; /* paranoia, make sure it's not pointing at a freed argv[0]. */ 221 230 umask(iumask); 231 232 233 /* 234 * If we've executed a conditional test or something that wishes to execute 235 * some child process, check if the child is a kmk_builtin thing. We recurse 236 * here, both because I'm lazy and because it's easier to debug a problem then 237 * (the call stack shows what's been going on). 238 */ 239 if ( !rc 240 && *ppapszArgvToSpawn 241 && !strncmp(**ppapszArgvToSpawn, "kmk_builtin_", sizeof("kmk_builtin_") - 1)) 242 { 243 char **argv_new = *ppapszArgvToSpawn; 244 int argc_new = 1; 245 while (argv_new[argc_new]) 246 argc_new++; 247 248 assert(argv_new[0] != argv[0]); 249 assert(!*pPidSpawned); 250 251 *ppapszArgvToSpawn = NULL; 252 rc = kmk_builtin_command_parsed (argc_new, argv_new, ppapszArgvToSpawn, pPidSpawned); 253 254 free (argv_new[0]); 255 free (argv_new); 256 } 257 222 258 return rc; 223 259 }
Note:
See TracChangeset
for help on using the changeset viewer.