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
