Replace strtok with strtoken
authorH.J. Lu <hongjiu.lu@intel.com>
Tue, 29 Jul 2014 15:19:22 +0000 (15:19 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Tue, 29 Jul 2014 15:19:22 +0000 (08:19 -0700)
PR bootstrap/61914
* gengtype.c (strtoken): New function.
(create_user_defined_type): Replace strtok with strtoken.

From-SVN: r213213

gcc/ChangeLog
gcc/gengtype.c

index 64191a7990f566a09c9153018e806a440d1fcb4e..891fc92e9b830a2ed3ad3de57013feabbb6879d3 100644 (file)
@@ -1,3 +1,9 @@
+2014-07-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR bootstrap/61914
+       * gengtype.c (strtoken): New function.
+       (create_user_defined_type): Replace strtok with strtoken.
+
 2014-07-29  Nathan Sidwell  <nathan@acm.org>
 
        * gcov-io.c (gcov_var): Make hidden.
index ffe3f94a6ae5c05177aeabc206a8d7b363b85e7f..e66941b9602a2bea3e13d7dd868e87dbe1681fbc 100644 (file)
@@ -569,6 +569,40 @@ do_scalar_typedef (const char *s, struct fileloc *pos)
   do_typedef (s, &scalar_nonchar, pos);
 }
 
+/* Similar to strtok_r.  */
+
+static char *
+strtoken (char *str, const char *delim, char **next)
+{
+  char *p;
+
+  if (str == NULL)
+    str = *next;
+
+  /* Skip the leading delimiters.  */
+  str += strspn (str, delim);
+  if (*str == '\0')
+    /* This is an empty token.  */
+    return NULL;
+
+  /* The current token.  */
+  p = str;
+
+  /* Find the next delimiter.  */
+  str += strcspn (str, delim);
+  if (*str == '\0')
+    /* This is the last token.  */
+    *next = str;
+  else
+    {
+      /* Terminate the current token.  */
+      *str = '\0';
+      /* Advance to the next token.  */
+      *next = str + 1;
+    }
+
+  return p;
+}
 
 /* Define TYPE_NAME to be a user defined type at location POS.  */
 
@@ -599,7 +633,8 @@ create_user_defined_type (const char *type_name, struct fileloc *pos)
         comma-separated list of strings, implicitly assumed to
         be type names, potentially with "*" characters.  */
       char *arg = open_bracket + 1;
-      char *type_id = strtok (arg, ",>");
+      char *next;
+      char *type_id = strtoken (arg, ",>", &next);
       pair_p fields = 0;
       while (type_id)
        {
@@ -628,7 +663,7 @@ create_user_defined_type (const char *type_name, struct fileloc *pos)
            arg_type = resolve_typedef (field_name, pos);
 
          fields = create_field_at (fields, arg_type, field_name, 0, pos);
-         type_id = strtok (0, ",>");
+         type_id = strtoken (0, ",>", &next);
        }
 
       /* Associate the field list to TY.  */