1 /** 2 * \file l4util/lib/src/getopt2.c 3 * \brief initialize argc/argv from multiboot structure 4 * 5 * \author Frank Mehnert <fm3@os.inf.tu-dresden.de> */ 6 7 /* 8 * (c) 2003-2009 Author(s) 9 * economic rights: Technische Universität Dresden (Germany) 10 * This file is part of TUD:OS and distributed under the terms of the 11 * GNU Lesser General Public License 2.1. 12 * Please see the COPYING-LGPL-2.1 file for details. 13 */ 14 15 #include <string.h> 16 #include <stdio.h> 17 18 //#include <l4/util/mbi_argv.h> 19 //#include <l4/crtn/crt0.h> 20 21 #define MAXARGC 50 22 #define MAXENVC 50 23 24 char *l4util_argv[MAXARGC]; 25 int l4util_argc = 0; 26 27 #define isspace(c) ((c)==' '||(c)=='\t'||(c)=='\r'||(c)=='\n') 28 29 void __l4util_parse_args(char *argbuf); __l4util_parse_args(char * argbuf)30void __l4util_parse_args(char *argbuf) 31 { 32 char *cp; 33 char quote = 0; 34 35 /* make l4util_argc, l4util_argv */ 36 l4util_argc = 0; 37 cp = argbuf; 38 39 /* Note, there's no support for escaping quotes! */ 40 41 while (*cp && l4util_argc < MAXARGC-1) 42 { 43 /* Skip whitespace */ 44 while (*cp && isspace(*cp)) 45 cp++; 46 47 /* New elem? */ 48 if (*cp) 49 { 50 /* Start of a quote? */ 51 if (*cp == '"' || *cp == '\'') 52 { 53 quote = *cp; 54 cp++; 55 } 56 57 l4util_argv[l4util_argc++] = cp; 58 59 /* Forward to next whitespace / quote character */ 60 while (*cp && ((!quote && !isspace(*cp)) || (quote && *cp != quote))) 61 cp++; 62 63 /* Terminate array elem */ 64 if (*cp) 65 *cp++ = '\0'; 66 67 quote = 0; 68 } 69 } 70 71 if(*cp && l4util_argc == MAXARGC-1) 72 printf("WARNING: parse_args() truncated at %dth argument!\n", MAXARGC); 73 74 l4util_argv[l4util_argc] = (void*) 0; 75 } 76 77 #if 0 78 static void 79 arg_init(char* cmdline) 80 { 81 if (cmdline) 82 { 83 l4util_parse_args(cmdline); 84 } 85 } 86 87 void 88 l4util_mbi_to_argv(l4_mword_t flag, l4util_mb_info_t *mbi) 89 { 90 if (flag == L4UTIL_MB_VALID 91 && mbi && (mbi->flags & L4UTIL_MB_CMDLINE)) 92 arg_init((char*)(l4_addr_t)mbi->cmdline); 93 } 94 #endif 95