vfs: remove unused wrapper block_page_mkwrite()
[linux/fpc-iii.git] / arch / x86 / lib / cmdline.c
blob422db000d72767adf718dc75db682e5df576e877
1 /*
2 * This file is part of the Linux kernel, and is made available under
3 * the terms of the GNU General Public License version 2.
5 * Misc librarized functions for cmdline poking.
6 */
7 #include <linux/kernel.h>
8 #include <linux/string.h>
9 #include <linux/ctype.h>
10 #include <asm/setup.h>
12 static inline int myisspace(u8 c)
14 return c <= ' '; /* Close enough approximation */
17 /**
18 * Find a boolean option (like quiet,noapic,nosmp....)
20 * @cmdline: the cmdline string
21 * @option: option string to look for
23 * Returns the position of that @option (starts counting with 1)
24 * or 0 on not found.
26 int cmdline_find_option_bool(const char *cmdline, const char *option)
28 char c;
29 int len, pos = 0, wstart = 0;
30 const char *opptr = NULL;
31 enum {
32 st_wordstart = 0, /* Start of word/after whitespace */
33 st_wordcmp, /* Comparing this word */
34 st_wordskip, /* Miscompare, skip */
35 } state = st_wordstart;
37 if (!cmdline)
38 return -1; /* No command line */
40 len = min_t(int, strlen(cmdline), COMMAND_LINE_SIZE);
41 if (!len)
42 return 0;
44 while (len--) {
45 c = *(char *)cmdline++;
46 pos++;
48 switch (state) {
49 case st_wordstart:
50 if (!c)
51 return 0;
52 else if (myisspace(c))
53 break;
55 state = st_wordcmp;
56 opptr = option;
57 wstart = pos;
58 /* fall through */
60 case st_wordcmp:
61 if (!*opptr)
62 if (!c || myisspace(c))
63 return wstart;
64 else
65 state = st_wordskip;
66 else if (!c)
67 return 0;
68 else if (c != *opptr++)
69 state = st_wordskip;
70 else if (!len) /* last word and is matching */
71 return wstart;
72 break;
74 case st_wordskip:
75 if (!c)
76 return 0;
77 else if (myisspace(c))
78 state = st_wordstart;
79 break;
83 return 0; /* Buffer overrun */