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