xref: /kvm-unit-tests/lib/argv.c (revision 4bc666cae97ebe3a9270deb8f067fa1735e04b0a)
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