xref: /kvm-unit-tests/lib/argv.c (revision 5e61cba06248d9f2926804b7fb900fe9d721e86c)
1ea7d43d0SAvi Kivity #include "libcflat.h"
2ea7d43d0SAvi Kivity 
3ea7d43d0SAvi Kivity int __argc;
4ea7d43d0SAvi Kivity char *__argv[100];
5ea7d43d0SAvi Kivity char *__args;
6ea7d43d0SAvi Kivity char __args_copy[1000];
7ea7d43d0SAvi Kivity 
8ea7d43d0SAvi Kivity static bool isblank(char p)
9ea7d43d0SAvi Kivity {
10ea7d43d0SAvi Kivity     return p == ' ' || p == '\t';
11ea7d43d0SAvi Kivity }
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;
23ea7d43d0SAvi Kivity     char **argv = __argv;
24ea7d43d0SAvi Kivity     char *p = __args_copy;
25ea7d43d0SAvi Kivity 
26ea7d43d0SAvi Kivity     while (*(args = skip_blanks(args)) != '\0') {
27ea7d43d0SAvi Kivity         *argv++ = p;
28ea7d43d0SAvi Kivity         while (*args != '\0' && !isblank(*args))
29ea7d43d0SAvi Kivity             *p++ = *args++;
30ea7d43d0SAvi Kivity         *p++ = '\0';
31ea7d43d0SAvi Kivity     }
32ea7d43d0SAvi Kivity     __argc = argv - __argv;
33ea7d43d0SAvi Kivity }
34*5e61cba0SAndrew Jones 
35*5e61cba0SAndrew Jones void setup_args(char *args)
36*5e61cba0SAndrew Jones {
37*5e61cba0SAndrew Jones     if (!args)
38*5e61cba0SAndrew Jones         return;
39*5e61cba0SAndrew Jones 
40*5e61cba0SAndrew Jones     __args = args;
41*5e61cba0SAndrew Jones     __setup_args();
42*5e61cba0SAndrew Jones }
43