Hi Jiri,
rec_argv = calloc(rec_argc + 1, sizeof(char *));
if (!rec_argv)
return -1;
+ /*
+ * Save the allocated event name strings.
+ */
+ rec_tmp = calloc(rec_argc + 1, sizeof(char *));
+ if (!rec_tmp) {
+ free(rec_argv);
+ return -1;
+ }
why not do strdup on all of them and always call free instead?
that would get rid of the rec_tmp and tmp_nr
That is also one method. Let me try it.
If we do strdup on all of them, such as,
if (e->record)
rec_argv[i++] = strdup("-W");
rec_argv[i++] = strdup("-d");
if (mem->phys_addr)
rec_argv[i++] = strdup("--phys-data");
....
That looks too much strdup used here. So I choose to use a rec_tmp[] to record the allocated string and free them before exit the function.
Or we record the start index and end index in rec_argv[] for the allocated event string, use strdup on them and call free before exit the function.
What do you think?
Thanks
Jin Yao