sh: convert /proc/cpu/aligmnent, /proc/cpu/kernel_alignment to seq_file
[safe/jmp/linux-2.6] / lib / parser.c
index 7ad2a48..b00d020 100644 (file)
@@ -22,7 +22,7 @@
  * match extremely simple token=arg style patterns. If the pattern is found,
  * the location(s) of the arguments will be returned in the @args array.
  */
-static int match_one(char *s, char *p, substring_t args[])
+static int match_one(char *s, const char *p, substring_t args[])
 {
        char *meta;
        int argc = 0;
@@ -43,7 +43,7 @@ static int match_one(char *s, char *p, substring_t args[])
                p = meta + 1;
 
                if (isdigit(*p))
-                       len = simple_strtoul(p, &p, 10);
+                       len = simple_strtoul(p, (char **) &p, 10);
                else if (*p == '%') {
                        if (*s++ != '%')
                                return 0;
@@ -100,9 +100,9 @@ static int match_one(char *s, char *p, substring_t args[])
  * format identifiers which will be taken into account when matching the
  * tokens, and whose locations will be returned in the @args array.
  */
-int match_token(char *s, match_table_t table, substring_t args[])
+int match_token(char *s, const match_table_t table, substring_t args[])
 {
-       struct match_token *p;
+       const struct match_token *p;
 
        for (p = table; !match_one(s, p->pattern, args) ; p++)
                ;
@@ -182,18 +182,25 @@ int match_hex(substring_t *s, int *result)
 }
 
 /**
- * match_strcpy: - copies the characters from a substring_t to a string
- * @to: string to copy characters to.
- * @s: &substring_t to copy
+ * match_strlcpy: - Copy the characters from a substring_t to a sized buffer
+ * @dest: where to copy to
+ * @src: &substring_t to copy
+ * @size: size of destination buffer
  *
- * Description: Copies the set of characters represented by the given
- * &substring_t @s to the c-style string @to. Caller guarantees that @to is
- * large enough to hold the characters of @s.
+ * Description: Copy the characters in &substring_t @src to the
+ * c-style string @dest.  Copy no more than @size - 1 characters, plus
+ * the terminating NUL.  Return length of @src.
  */
-void match_strcpy(char *to, substring_t *s)
+size_t match_strlcpy(char *dest, const substring_t *src, size_t size)
 {
-       memcpy(to, s->from, s->to - s->from);
-       to[s->to - s->from] = '\0';
+       size_t ret = src->to - src->from;
+
+       if (size) {
+               size_t len = ret >= size ? size - 1 : ret;
+               memcpy(dest, src->from, len);
+               dest[len] = '\0';
+       }
+       return ret;
 }
 
 /**
@@ -204,11 +211,12 @@ void match_strcpy(char *to, substring_t *s)
  * the &substring_t @s. The caller is responsible for freeing the returned
  * string with kfree().
  */
-char *match_strdup(substring_t *s)
+char *match_strdup(const substring_t *s)
 {
-       char *p = kmalloc(s->to - s->from + 1, GFP_KERNEL);
+       size_t sz = s->to - s->from + 1;
+       char *p = kmalloc(sz, GFP_KERNEL);
        if (p)
-               match_strcpy(p, s);
+               match_strlcpy(p, s, sz);
        return p;
 }
 
@@ -216,5 +224,5 @@ EXPORT_SYMBOL(match_token);
 EXPORT_SYMBOL(match_int);
 EXPORT_SYMBOL(match_octal);
 EXPORT_SYMBOL(match_hex);
-EXPORT_SYMBOL(match_strcpy);
+EXPORT_SYMBOL(match_strlcpy);
 EXPORT_SYMBOL(match_strdup);