From: H.J. Lu Date: Tue, 29 Jul 2014 15:19:22 +0000 (+0000) Subject: Replace strtok with strtoken X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=20e3f942cca8ab06dda66be598b3166066679234;p=gcc.git Replace strtok with strtoken PR bootstrap/61914 * gengtype.c (strtoken): New function. (create_user_defined_type): Replace strtok with strtoken. From-SVN: r213213 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64191a7990f..891fc92e9b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-07-29 H.J. Lu + + PR bootstrap/61914 + * gengtype.c (strtoken): New function. + (create_user_defined_type): Replace strtok with strtoken. + 2014-07-29 Nathan Sidwell * gcov-io.c (gcov_var): Make hidden. diff --git a/gcc/gengtype.c b/gcc/gengtype.c index ffe3f94a6ae..e66941b9602 100644 --- a/gcc/gengtype.c +++ b/gcc/gengtype.c @@ -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. */