Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #include "cache.h"
  2 
  3 static const char *alias_key;
  4 static char *alias_val;
  5 
  6 static int alias_lookup_cb(const char *k, const char *v, void *cb __used)
  7 {
  8         if (!prefixcmp(k, "alias.") && !strcmp(k+6, alias_key)) {
  9                 if (!v)
 10                         return config_error_nonbool(k);
 11                 alias_val = strdup(v);
 12                 return 0;
 13         }
 14         return 0;
 15 }
 16 
 17 char *alias_lookup(const char *alias)
 18 {
 19         alias_key = alias;
 20         alias_val = NULL;
 21         perf_config(alias_lookup_cb, NULL);
 22         return alias_val;
 23 }
 24 
 25 int split_cmdline(char *cmdline, const char ***argv)
 26 {
 27         int src, dst, count = 0, size = 16;
 28         char quoted = 0;
 29 
 30         *argv = malloc(sizeof(char*) * size);
 31 
 32         /* split alias_string */
 33         (*argv)[count++] = cmdline;
 34         for (src = dst = 0; cmdline[src];) {
 35                 char c = cmdline[src];
 36                 if (!quoted && isspace(c)) {
 37                         cmdline[dst++] = 0;
 38                         while (cmdline[++src]
 39                                         && isspace(cmdline[src]))
 40                                 ; /* skip */
 41                         if (count >= size) {
 42                                 size += 16;
 43                                 *argv = realloc(*argv, sizeof(char*) * size);
 44                         }
 45                         (*argv)[count++] = cmdline + dst;
 46                 } else if (!quoted && (c == '\'' || c == '"')) {
 47                         quoted = c;
 48                         src++;
 49                 } else if (c == quoted) {
 50                         quoted = 0;
 51                         src++;
 52                 } else {
 53                         if (c == '\\' && quoted != '\'') {
 54                                 src++;
 55                                 c = cmdline[src];
 56                                 if (!c) {
 57                                         free(*argv);
 58                                         *argv = NULL;
 59                                         return error("cmdline ends with \\");
 60                                 }
 61                         }
 62                         cmdline[dst++] = c;
 63                         src++;
 64                 }
 65         }
 66 
 67         cmdline[dst] = 0;
 68 
 69         if (quoted) {
 70                 free(*argv);
 71                 *argv = NULL;
 72                 return error("unclosed quote");
 73         }
 74 
 75         return count;
 76 }
 77 
 78 
  This page was automatically generated by the LXR engine.