setup.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2. setup.h    (c) 1997-8   Grant R. Guenther <grant@torque.net>
  3.                 Under the terms of the GNU General Public License.
  4.         This is a table driven setup function for kernel modules
  5.         using the module.variable=val,... command line notation.
  6. */
  7. /* Changes:
  8. 1.01 GRG 1998.05.05 Allow negative and defaulted values
  9. */
  10. #include <linux/ctype.h>
  11. #include <linux/string.h>
  12. struct setup_tab_t {
  13. char *tag; /* variable name */
  14. int size; /* number of elements in array */
  15. int *iv; /* pointer to variable */
  16. };
  17. typedef struct setup_tab_t STT;
  18. /*  t    is a table that describes the variables that can be set
  19.   by gen_setup
  20.     n   is the number of entries in the table
  21.     ss   is a string of the form:
  22. <tag>=[<val>,...]<val>
  23. */
  24. static void generic_setup( STT t[], int n, char *ss )
  25. { int j,k, sgn;
  26. k = 0;
  27. for (j=0;j<n;j++) {
  28. k = strlen(t[j].tag);
  29. if (strncmp(ss,t[j].tag,k) == 0) break;
  30. }
  31. if (j == n) return;
  32. if (ss[k] == 0) {
  33. t[j].iv[0] = 1;
  34. return;
  35. }
  36. if (ss[k] != '=') return;
  37. ss += (k+1);
  38. k = 0;
  39. while (ss && (k < t[j].size)) {
  40. if (!*ss) break;
  41. sgn = 1;
  42. if (*ss == '-') { ss++; sgn = -1; }
  43. if (!*ss) break;
  44. if (isdigit(*ss))
  45.   t[j].iv[k] = sgn * simple_strtoul(ss,NULL,0);
  46. k++; 
  47. if ((ss = strchr(ss,',')) != NULL) ss++;
  48. }
  49. }
  50. /* end of setup.h */