pkarashchenko commented on a change in pull request #5779: URL: https://github.com/apache/incubator-nuttx/pull/5779#discussion_r829775015
########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; Review comment: ```suggestion FAR char * const *argv = NULL; ``` ########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; - FAR char *arg; + FAR char *arg = (FAR char *)arg0; size_t nargs; va_list ap; int argc; int ret; /* Count the number of arguments */ - va_start(ap, path); + va_start(ap, arg0); nargs = 0; - do + + while (arg != NULL) { - /* Check if the next argument is present */ + /* Yes.. increment the number of arguments. Here is a sanity + * check to prevent running away with an unterminated argv[] list. + * MAX_EXECL_ARGS should be sufficiently large that this never + * happens in normal usage. + */ - arg = va_arg(ap, FAR char *); - if (arg) + if (++nargs > MAX_EXECL_ARGS) { - /* Yes.. increment the number of arguments. Here is a sanity - * check to prevent running away with an unterminated argv[] list. - * MAX_EXECL_ARGS should be sufficiently large that this never - * happens in normal usage. - */ - - if (++nargs > MAX_EXECL_ARGS) - { - set_errno(E2BIG); - va_end(ap); - return ERROR; - } + set_errno(E2BIG); + va_end(ap); + return ERROR; } + + arg = va_arg(ap, FAR char *); } - while (arg); va_end(ap); /* Allocate a temporary argv[] array */ - if (nargs > 0) + argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); Review comment: ```suggestion argv = (FAR char * const *)lib_malloc((nargs + 1) * sizeof(FAR char *)); ``` ########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; - FAR char *arg; + FAR char *arg = (FAR char *)arg0; size_t nargs; va_list ap; int argc; int ret; /* Count the number of arguments */ - va_start(ap, path); + va_start(ap, arg0); nargs = 0; - do + + while (arg != NULL) { - /* Check if the next argument is present */ + /* Yes.. increment the number of arguments. Here is a sanity + * check to prevent running away with an unterminated argv[] list. + * MAX_EXECL_ARGS should be sufficiently large that this never + * happens in normal usage. + */ - arg = va_arg(ap, FAR char *); - if (arg) + if (++nargs > MAX_EXECL_ARGS) { - /* Yes.. increment the number of arguments. Here is a sanity - * check to prevent running away with an unterminated argv[] list. - * MAX_EXECL_ARGS should be sufficiently large that this never - * happens in normal usage. - */ - - if (++nargs > MAX_EXECL_ARGS) - { - set_errno(E2BIG); - va_end(ap); - return ERROR; - } + set_errno(E2BIG); + va_end(ap); + return ERROR; } + + arg = va_arg(ap, FAR char *); } - while (arg); va_end(ap); /* Allocate a temporary argv[] array */ - if (nargs > 0) + argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); + if (argv == (FAR char **)NULL) Review comment: ```suggestion if (argv == NULL) ``` ########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; - FAR char *arg; + FAR char *arg = (FAR char *)arg0; size_t nargs; va_list ap; int argc; int ret; /* Count the number of arguments */ - va_start(ap, path); + va_start(ap, arg0); nargs = 0; - do + + while (arg != NULL) { - /* Check if the next argument is present */ + /* Yes.. increment the number of arguments. Here is a sanity + * check to prevent running away with an unterminated argv[] list. + * MAX_EXECL_ARGS should be sufficiently large that this never + * happens in normal usage. + */ - arg = va_arg(ap, FAR char *); - if (arg) + if (++nargs > MAX_EXECL_ARGS) { - /* Yes.. increment the number of arguments. Here is a sanity - * check to prevent running away with an unterminated argv[] list. - * MAX_EXECL_ARGS should be sufficiently large that this never - * happens in normal usage. - */ - - if (++nargs > MAX_EXECL_ARGS) - { - set_errno(E2BIG); - va_end(ap); - return ERROR; - } + set_errno(E2BIG); + va_end(ap); + return ERROR; } + + arg = va_arg(ap, FAR char *); } - while (arg); va_end(ap); /* Allocate a temporary argv[] array */ - if (nargs > 0) + argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); + if (argv == (FAR char **)NULL) { - argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); - if (argv == (FAR char **)NULL) - { - set_errno(ENOMEM); - return ERROR; - } + set_errno(ENOMEM); + return ERROR; + } - /* Collect the arguments into the argv[] array */ + argv[0] = (FAR char *)arg0; Review comment: ```suggestion argv[0] = arg0; ``` ########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; - FAR char *arg; + FAR char *arg = (FAR char *)arg0; size_t nargs; va_list ap; int argc; int ret; /* Count the number of arguments */ - va_start(ap, path); + va_start(ap, arg0); nargs = 0; - do + + while (arg != NULL) { - /* Check if the next argument is present */ + /* Yes.. increment the number of arguments. Here is a sanity + * check to prevent running away with an unterminated argv[] list. + * MAX_EXECL_ARGS should be sufficiently large that this never + * happens in normal usage. + */ - arg = va_arg(ap, FAR char *); - if (arg) + if (++nargs > MAX_EXECL_ARGS) { - /* Yes.. increment the number of arguments. Here is a sanity - * check to prevent running away with an unterminated argv[] list. - * MAX_EXECL_ARGS should be sufficiently large that this never - * happens in normal usage. - */ - - if (++nargs > MAX_EXECL_ARGS) - { - set_errno(E2BIG); - va_end(ap); - return ERROR; - } + set_errno(E2BIG); + va_end(ap); + return ERROR; } + + arg = va_arg(ap, FAR char *); } - while (arg); va_end(ap); /* Allocate a temporary argv[] array */ - if (nargs > 0) + argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); + if (argv == (FAR char **)NULL) { - argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); - if (argv == (FAR char **)NULL) - { - set_errno(ENOMEM); - return ERROR; - } + set_errno(ENOMEM); + return ERROR; + } - /* Collect the arguments into the argv[] array */ + argv[0] = (FAR char *)arg0; - va_start(ap, path); - for (argc = 0; argc < nargs; argc++) - { - argv[argc] = va_arg(ap, FAR char *); - } + /* Collect the arguments into the argv[] array */ - argv[nargs] = NULL; - va_end(ap); + va_start(ap, arg0); + for (argc = 1; argc <= nargs; argc++) + { + argv[argc] = va_arg(ap, FAR char *); } + va_end(ap); + /* Then let execv() do the real work */ ret = execv(path, (FAR char * const *)argv); Review comment: ```suggestion ret = execv(path, argv); ``` ########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; - FAR char *arg; + FAR char *arg = (FAR char *)arg0; Review comment: ```suggestion FAR const char *arg = arg0; ``` ########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; - FAR char *arg; + FAR char *arg = (FAR char *)arg0; size_t nargs; va_list ap; int argc; int ret; /* Count the number of arguments */ - va_start(ap, path); + va_start(ap, arg0); nargs = 0; - do + + while (arg != NULL) { - /* Check if the next argument is present */ + /* Yes.. increment the number of arguments. Here is a sanity + * check to prevent running away with an unterminated argv[] list. + * MAX_EXECL_ARGS should be sufficiently large that this never + * happens in normal usage. + */ - arg = va_arg(ap, FAR char *); - if (arg) + if (++nargs > MAX_EXECL_ARGS) { - /* Yes.. increment the number of arguments. Here is a sanity - * check to prevent running away with an unterminated argv[] list. - * MAX_EXECL_ARGS should be sufficiently large that this never - * happens in normal usage. - */ - - if (++nargs > MAX_EXECL_ARGS) - { - set_errno(E2BIG); - va_end(ap); - return ERROR; - } + set_errno(E2BIG); + va_end(ap); + return ERROR; } + + arg = va_arg(ap, FAR char *); } - while (arg); va_end(ap); /* Allocate a temporary argv[] array */ - if (nargs > 0) + argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); + if (argv == (FAR char **)NULL) { - argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); - if (argv == (FAR char **)NULL) - { - set_errno(ENOMEM); - return ERROR; - } + set_errno(ENOMEM); + return ERROR; + } - /* Collect the arguments into the argv[] array */ + argv[0] = (FAR char *)arg0; - va_start(ap, path); - for (argc = 0; argc < nargs; argc++) - { - argv[argc] = va_arg(ap, FAR char *); - } + /* Collect the arguments into the argv[] array */ - argv[nargs] = NULL; - va_end(ap); + va_start(ap, arg0); + for (argc = 1; argc <= nargs; argc++) + { + argv[argc] = va_arg(ap, FAR char *); Review comment: ```suggestion argv[argc] = va_arg(ap, FAR const char *); ``` ########## File path: libs/libc/unistd/lib_execl.c ########## @@ -113,67 +113,61 @@ * ****************************************************************************/ -int execl(FAR const char *path, ...) +int execl(FAR const char *path, FAR const char *arg0, ...) { FAR char **argv = (FAR char **)NULL; - FAR char *arg; + FAR char *arg = (FAR char *)arg0; size_t nargs; va_list ap; int argc; int ret; /* Count the number of arguments */ - va_start(ap, path); + va_start(ap, arg0); nargs = 0; - do + + while (arg != NULL) { - /* Check if the next argument is present */ + /* Yes.. increment the number of arguments. Here is a sanity + * check to prevent running away with an unterminated argv[] list. + * MAX_EXECL_ARGS should be sufficiently large that this never + * happens in normal usage. + */ - arg = va_arg(ap, FAR char *); - if (arg) + if (++nargs > MAX_EXECL_ARGS) { - /* Yes.. increment the number of arguments. Here is a sanity - * check to prevent running away with an unterminated argv[] list. - * MAX_EXECL_ARGS should be sufficiently large that this never - * happens in normal usage. - */ - - if (++nargs > MAX_EXECL_ARGS) - { - set_errno(E2BIG); - va_end(ap); - return ERROR; - } + set_errno(E2BIG); + va_end(ap); + return ERROR; } + + arg = va_arg(ap, FAR char *); Review comment: ```suggestion arg = va_arg(ap, FAR const char *); ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org