~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/lib/cmdline.c

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * linux/lib/cmdline.c
  3  * Helper functions generally used for parsing kernel command line
  4  * and module options.
  5  *
  6  * Code and copyrights come from init/main.c and arch/i386/kernel/setup.c.
  7  *
  8  * This source code is licensed under the GNU General Public License,
  9  * Version 2.  See the file COPYING for more details.
 10  *
 11  * GNU Indent formatting options for this file: -kr -i8 -npsl -pcs
 12  *
 13  */
 14 
 15 #include <linux/module.h>
 16 #include <linux/kernel.h>
 17 #include <linux/string.h>
 18 
 19 
 20 /**
 21  *      get_option - Parse integer from an option string
 22  *      @str: option string
 23  *      @pint: (output) integer value parsed from @str
 24  *
 25  *      Read an int from an option string; if available accept a subsequent
 26  *      comma as well.
 27  *
 28  *      Return values:
 29  *      0 : no int in string
 30  *      1 : int found, no subsequent comma
 31  *      2 : int found including a subsequent comma
 32  */
 33 
 34 int get_option (char **str, int *pint)
 35 {
 36         char *cur = *str;
 37 
 38         if (!cur || !(*cur))
 39                 return 0;
 40         *pint = simple_strtol (cur, str, 0);
 41         if (cur == *str)
 42                 return 0;
 43         if (**str == ',') {
 44                 (*str)++;
 45                 return 2;
 46         }
 47 
 48         return 1;
 49 }
 50 
 51 /**
 52  *      get_options - Parse a string into a list of integers
 53  *      @str: String to be parsed
 54  *      @nints: size of integer array
 55  *      @ints: integer array
 56  *
 57  *      This function parses a string containing a comma-separated
 58  *      list of integers.  The parse halts when the array is
 59  *      full, or when no more numbers can be retrieved from the
 60  *      string.
 61  *
 62  *      Return value is the character in the string which caused
 63  *      the parse to end (typically a null terminator, if @str is
 64  *      completely parseable).
 65  */
 66  
 67 char *get_options (char *str, int nints, int *ints)
 68 {
 69         int res, i = 1;
 70 
 71         while (i < nints) {
 72                 res = get_option (&str, ints + i);
 73                 if (res == 0)
 74                         break;
 75                 i++;
 76                 if (res == 1)
 77                         break;
 78         }
 79         ints[0] = i - 1;
 80         return (str);
 81 }
 82 
 83 /**
 84  *      memparse - parse a string with mem suffixes into a number
 85  *      @ptr: Where parse begins
 86  *      @retptr: (output) Pointer to next char after parse completes
 87  *
 88  *      Parses a string into a number.  The number stored at @ptr is
 89  *      potentially suffixed with %K (for kilobytes, or 1024 bytes),
 90  *      %M (for megabytes, or 1048576 bytes), or %G (for gigabytes, or
 91  *      1073741824).  If the number is suffixed with K, M, or G, then
 92  *      the return value is the number multiplied by one kilobyte, one
 93  *      megabyte, or one gigabyte, respectively.
 94  */
 95 
 96 unsigned long memparse (char *ptr, char **retptr)
 97 {
 98         unsigned long ret = simple_strtoul (ptr, retptr, 0);
 99 
100         switch (**retptr) {
101         case 'G':
102         case 'g':
103                 ret <<= 10;
104         case 'M':
105         case 'm':
106                 ret <<= 10;
107         case 'K':
108         case 'k':
109                 ret <<= 10;
110                 (*retptr)++;
111         default:
112                 break;
113         }
114         return ret;
115 }
116 
117 
118 EXPORT_SYMBOL(memparse);
119 EXPORT_SYMBOL(get_option);
120 EXPORT_SYMBOL(get_options);
121 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.