cmd_line *parseCmdLine(char *s) /*to break up string by ';' and '\n' and pass that string to parseCmd*/ { char *saveptr=s; char *token; token = strtok_r(saveptr, ";\n", &saveptr); cmd_line *cml = make_cmdline(parseCmd(token)); cmd_line *f = cml; while(token != NULL){ token = strtok_r(NULL, ";\n", &saveptr); if(token ==NULL){ return f; } if((strcmp(token, " ") == 0) || (strcmp(token, "\t") == 0)){ continue; }else { cml->next = make_cmdline(parseCmd(token)); cml = cml->next; } } return f; }
static void run_client(const char *test) { char cmdline[MAX_PATH]; PROCESS_INFORMATION info; STARTUPINFOA startup; memset(&startup, 0, sizeof startup); startup.cb = sizeof startup; make_cmdline(cmdline, test); ok(CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); winetest_wait_child_process( info.hProcess ); ok(CloseHandle(info.hProcess), "CloseHandle\n"); ok(CloseHandle(info.hThread), "CloseHandle\n"); }
/* boot linux kernel and initrd */ static int sl_boot_linux(lua_State * L) { const char *kernel = luaL_checkstring(L, 1); const char *cmdline = luaL_optstring(L, 2, ""); char *initrd; void *kernel_data, *file_data; size_t kernel_len, file_len; struct initramfs *initramfs; char *newcmdline; uint32_t mem_limit = luaL_optint(L, 3, 0); uint16_t video_mode = luaL_optint(L, 4, 0); // int ret, i; int ret; char **argv, **argp, *arg, *p; ret = __parse_argv(&argv, cmdline); newcmdline = malloc(strlen(kernel) + 12); if (!newcmdline) printf("Mem alloc failed: cmdline\n"); strcpy(newcmdline, "BOOT_IMAGE="); strcpy(newcmdline + strlen(newcmdline), kernel); argv[0] = newcmdline; argp = argv; /* DEBUG for (i=0; i<ret; i++) printf("%d: %s\n", i, argv[i]); */ newcmdline = make_cmdline(argp); if (!newcmdline) printf("Creating command line failed!\n"); /* DEBUG printf("Command line: %s\n", newcmdline); msleep(1000); */ /* Look for specific command-line arguments we care about */ if ((arg = find_argument(argp, "mem="))) mem_limit = saturate32(suffix_number(arg)); if ((arg = find_argument(argp, "vga="))) { switch (arg[0] | 0x20) { case 'a': /* "ask" */ video_mode = 0xfffd; break; case 'e': /* "ext" */ video_mode = 0xfffe; break; case 'n': /* "normal" */ video_mode = 0xffff; break; default: video_mode = strtoul(arg, NULL, 0); break; } } printf("Loading kernel %s...\n", kernel); if (loadfile(kernel, &kernel_data, &kernel_len)) printf("failed!\n"); else printf("ok\n"); initramfs = initramfs_init(); if (!initramfs) printf("Initializing initrd failed!\n"); if ((arg = find_argument(argp, "initrd="))) { do { p = strchr(arg, ','); if (p) *p = '\0'; initrd = arg; printf("Loading initrd %s... ", initrd); if (initramfs_load_archive(initramfs, initrd)) { printf("failed!\n"); } printf("ok\n"); if (p) *p++ = ','; } while ((arg = p)); } if (!loadfile("/testfile1", &file_data, &file_len)) { if (initramfs_add_file(initramfs, file_data, file_len, file_len, "/testfile1", 0, 0755)) printf("Adding extra file failed\n"); } else printf("Loading extra file failed\n"); /* DEBUG msleep(10000); */ ret = syslinux_boot_linux(kernel_data, kernel_len, initramfs, newcmdline); printf("syslinux_boot_linux returned %d\n", ret); return 0; }