I think so. The man page for strtok_r only states _POSIX_C_SOURC >= 1. On 12 January 2015 at 13:45, Mike Holmes <[email protected]> wrote: > I have added _POSIX_C_SOURCE 200809L to one file already - patch on the > list, will that version also cover this ? > > On 12 January 2015 at 07:22, Ola Liljedahl <[email protected]> wrote: >> >> On 12 January 2015 at 11:50, Ciprian Barbu <[email protected]> >> wrote: >> > Signed-off-by: Ciprian Barbu <[email protected]> >> > --- >> > Fix for https://bugs.linaro.org/show_bug.cgi?id=1049 >> > >> > example/packet/odp_pktio.c | 29 +++++++++++++++-------------- >> > 1 file changed, 15 insertions(+), 14 deletions(-) >> > >> > diff --git a/example/packet/odp_pktio.c b/example/packet/odp_pktio.c >> > index b162fac..0d5918a 100644 >> > --- a/example/packet/odp_pktio.c >> > +++ b/example/packet/odp_pktio.c >> > @@ -69,6 +69,7 @@ typedef struct { >> > int if_count; /**< Number of interfaces to be used */ >> > char **if_names; /**< Array of pointers to interface >> > names */ >> > int mode; /**< Packet IO mode */ >> > + char *if_str; /**< Storage for interface names */ >> > } appl_args_t; >> > >> > /** >> > @@ -376,6 +377,8 @@ int main(int argc, char *argv[]) >> > /* Master thread waits for other threads to exit */ >> > odph_linux_pthread_join(thread_tbl, num_workers); >> > >> > + free(args->appl.if_names); >> > + free(args->appl.if_str); >> > free(args); >> > printf("Exit\n\n"); >> > >> > @@ -462,7 +465,7 @@ static void parse_args(int argc, char *argv[], >> > appl_args_t *appl_args) >> > { >> > int opt; >> > int long_index; >> > - char *names, *str, *token, *save; >> > + char *token; >> > size_t len; >> > int i; >> > static struct option longopts[] = { >> > @@ -495,19 +498,19 @@ static void parse_args(int argc, char *argv[], >> > appl_args_t *appl_args) >> > } >> > len += 1; /* add room for '\0' */ >> > >> > - names = malloc(len); >> > - if (names == NULL) { >> > + appl_args->if_str = malloc(len); >> > + if (appl_args->if_str == NULL) { >> > usage(argv[0]); >> > exit(EXIT_FAILURE); >> > } >> > >> > /* count the number of tokens separated by ',' >> > */ >> > - strcpy(names, optarg); >> > - for (str = names, i = 0;; str = NULL, i++) { >> > - token = strtok_r(str, ",", &save); >> > - if (token == NULL) >> > - break; >> > - } >> > + strcpy(appl_args->if_str, optarg); >> > + for (token = strtok(appl_args->if_str, ","), i = >> > 0; >> strtok() is not thread-safe and thus doesn't seem like a great idea to >> use it in a multithreaded application based on ODP. I don't know about >> this exact usage here, perhaps this argument parsing is always only >> going to happen in a single thread? >> >> But why not just define _POSIX_C_SOURCE to get access to strtok_r()? >> This is how we do it in other places in ODP with the same problem. >> E.g. the timer cunit test uses rand_r and not rand() (which likewise >> is not thread-safe). >> >> >> > + token != NULL; >> > + token = strtok(NULL, ","), i++) >> > + ; >> > + >> > appl_args->if_count = i; >> > >> > if (appl_args->if_count == 0) { >> > @@ -520,11 +523,9 @@ static void parse_args(int argc, char *argv[], >> > appl_args_t *appl_args) >> > calloc(appl_args->if_count, sizeof(char *)); >> > >> > /* store the if names (reset names string) */ >> > - strcpy(names, optarg); >> > - for (str = names, i = 0;; str = NULL, i++) { >> > - token = strtok_r(str, ",", &save); >> > - if (token == NULL) >> > - break; >> > + strcpy(appl_args->if_str, optarg); >> > + for (token = strtok(appl_args->if_str, ","), i = >> > 0; >> > + token != NULL; token = strtok(NULL, ","), >> > i++) { >> > appl_args->if_names[i] = token; >> > } >> > break; >> > -- >> > 1.8.3.2 >> > >> > >> > _______________________________________________ >> > lng-odp mailing list >> > [email protected] >> > http://lists.linaro.org/mailman/listinfo/lng-odp >> >> _______________________________________________ >> lng-odp mailing list >> [email protected] >> http://lists.linaro.org/mailman/listinfo/lng-odp > > > > > -- > Mike Holmes > Linaro Sr Technical Manager > LNG - ODP
_______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
