* @brief Put arguments or environment variables into LWP arguments info structure * * @param[in,out] args Pointer to the lwp_args_info structure to store the arguments * @param[in] strv_addr Pointer to the string array (argv/envp) to be processed * @param[in] atype Type of arguments being processed (LWP_ARGS_TYPE_ARG/LWP_ARGS_TYPE_ENVP) * * @return rt_err_t * - RT_EOK on success * - -E
| 499 | * - Other errors from args_append() if memory allocation fails |
| 500 | */ |
| 501 | rt_err_t lwp_args_put(struct lwp_args_info *args, const char **strv_addr, enum lwp_args_type atype) |
| 502 | { |
| 503 | rt_err_t error; |
| 504 | int iter = 0; |
| 505 | int len; |
| 506 | const char *arg_ptr; |
| 507 | |
| 508 | while (1) |
| 509 | { |
| 510 | if (atype == LWP_ARGS_TYPE_ARG || atype == LWP_ARGS_TYPE_ENVP) |
| 511 | { |
| 512 | len = lwp_get_from_user(&arg_ptr, strv_addr + iter++, sizeof(char *)); |
| 513 | if (len != sizeof(char *)) |
| 514 | { |
| 515 | return -EFAULT; |
| 516 | } |
| 517 | if (arg_ptr == NULL) |
| 518 | { |
| 519 | break; |
| 520 | } |
| 521 | len = lwp_user_strlen(arg_ptr); |
| 522 | if (len < 0) |
| 523 | { |
| 524 | return -EFAULT; |
| 525 | } |
| 526 | } |
| 527 | else |
| 528 | { |
| 529 | arg_ptr = strv_addr[iter++]; |
| 530 | if (arg_ptr == NULL) |
| 531 | { |
| 532 | break; |
| 533 | } |
| 534 | len = strlen(arg_ptr); |
| 535 | } |
| 536 | |
| 537 | error = args_append(args, arg_ptr, len, atype); |
| 538 | if (error) |
| 539 | { |
| 540 | return error; |
| 541 | } |
| 542 | } |
| 543 | return 0; |
| 544 | } |
| 545 | |
| 546 | /** |
| 547 | * @brief Put command line arguments into LWP arguments info structure |
no test coverage detected