1ea7d43d0SAvi Kivity #include "libcflat.h" 26b97d595SAndrew Jones #include "auxinfo.h" 3ea7d43d0SAvi Kivity 4ea7d43d0SAvi Kivity int __argc; 5ea7d43d0SAvi Kivity char *__argv[100]; 6ea7d43d0SAvi Kivity char *__args; 76b97d595SAndrew Jones 86b97d595SAndrew Jones static char args_copy[1000]; 96b97d595SAndrew Jones static char *copy_ptr = args_copy; 10ea7d43d0SAvi Kivity 11*4bc666caSAndrew Jones #define isblank(c) ((c) == ' ' || (c) == '\t') 12ea7d43d0SAvi Kivity 13ea7d43d0SAvi Kivity static char *skip_blanks(char *p) 14ea7d43d0SAvi Kivity { 15ea7d43d0SAvi Kivity while (isblank(*p)) 16ea7d43d0SAvi Kivity ++p; 17ea7d43d0SAvi Kivity return p; 18ea7d43d0SAvi Kivity } 19ea7d43d0SAvi Kivity 20ea7d43d0SAvi Kivity void __setup_args(void) 21ea7d43d0SAvi Kivity { 22ea7d43d0SAvi Kivity char *args = __args; 236b97d595SAndrew Jones char **argv = __argv + __argc; 24ea7d43d0SAvi Kivity 25ea7d43d0SAvi Kivity while (*(args = skip_blanks(args)) != '\0') { 266b97d595SAndrew Jones *argv++ = copy_ptr; 27ea7d43d0SAvi Kivity while (*args != '\0' && !isblank(*args)) 286b97d595SAndrew Jones *copy_ptr++ = *args++; 296b97d595SAndrew Jones *copy_ptr++ = '\0'; 30ea7d43d0SAvi Kivity } 31ea7d43d0SAvi Kivity __argc = argv - __argv; 32ea7d43d0SAvi Kivity } 335e61cba0SAndrew Jones 345e61cba0SAndrew Jones void setup_args(char *args) 355e61cba0SAndrew Jones { 365e61cba0SAndrew Jones if (!args) 375e61cba0SAndrew Jones return; 385e61cba0SAndrew Jones 395e61cba0SAndrew Jones __args = args; 405e61cba0SAndrew Jones __setup_args(); 415e61cba0SAndrew Jones } 426ffea954SAndrew Jones 43809ebcb3SAndrew Jones void setup_args_progname(char *args) 446ffea954SAndrew Jones { 456b97d595SAndrew Jones __argv[0] = copy_ptr; 46809ebcb3SAndrew Jones strcpy(__argv[0], auxinfo.progname); 47809ebcb3SAndrew Jones copy_ptr += strlen(auxinfo.progname) + 1; 486b97d595SAndrew Jones ++__argc; 496ffea954SAndrew Jones if (args) { 506ffea954SAndrew Jones __args = args; 516ffea954SAndrew Jones __setup_args(); 526ffea954SAndrew Jones } 536ffea954SAndrew Jones } 54