From 69bf47e45df055d3b8a818b2b8b7657767c9a171 Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Wed, 05 Jul 2023 13:39:15 -0400 Subject: mknod: Factor getenv()/execve()/etc. out of main() --- diff --git a/helpers/mknod.c b/helpers/mknod.c index e6bfea8..23683d8 100644 --- a/helpers/mknod.c +++ b/helpers/mknod.c @@ -71,6 +71,43 @@ _err(const char *fmt, ...) } static int +_get_work_area(int argc, char *argv[], char **work_area) +{ + char **exec_argv; + int arg; + + *work_area = getenv("OPK_WORK_AREA"); + if (*work_area == NULL || *work_area[0] == '\0') { + _err(_("OPK_WORK_AREA environment variable not set")); + _err(_("Possibly building package dependent on opkg-opk with " + "opkbuild too old to use it")); + _err(_("Executing system mknod instead")); + exec_argv = calloc(argc + 1, sizeof(*exec_argv)); + if (exec_argv == NULL) { + _err(_("Failed to allocate memory")); + return OPKG_OPK_ERROR; + } + exec_argv[0] = malloc(strlen(MKNOD) + 1); + if (exec_argv[0] == NULL) { + _err(_("Failed to allocate memory")); + free(exec_argv); + return OPKG_OPK_ERROR; + } + strcpy(exec_argv[0], MKNOD); + for (arg = 1; arg < argc; ++arg) { + exec_argv[arg] = argv[arg]; + } + exec_argv[argc] = NULL; + execve(MKNOD, exec_argv, NULL); /* Shouldn't return */ + _err(_("Failed to execute system mknod")); + free(exec_argv[0]); + free(exec_argv); + return OPKG_OPK_ERROR; + } + return OPKG_OPK_OK; +} + +static int _strtol_or_err(const char *str, long int *l) { char *end; @@ -87,8 +124,6 @@ int main(int argc, char *argv[]) { char *work_area; - char **exec_argv; - int arg; mode_t mode; int opt; char *name; @@ -115,32 +150,7 @@ main(int argc, char *argv[]) _program_name = argv[0]; - work_area = getenv("OPK_WORK_AREA"); - if (work_area == NULL || work_area[0] == '\0') { - _err(_("OPK_WORK_AREA environment variable not set")); - _err(_("Possibly building package dependent on opkg-opk with " - "opkbuild too old to use it")); - _err(_("Executing system mknod instead")); - exec_argv = calloc(argc + 1, sizeof(*exec_argv)); - if (exec_argv == NULL) { - _err(_("Failed to allocate memory")); - return EXIT_FAILURE; - } - exec_argv[0] = malloc(strlen(MKNOD) + 1); - if (exec_argv[0] == NULL) { - _err(_("Failed to allocate memory")); - free(exec_argv); - return EXIT_FAILURE; - } - strcpy(exec_argv[0], MKNOD); - for (arg = 1; arg < argc; ++arg) { - exec_argv[arg] = argv[arg]; - } - exec_argv[argc] = NULL; - execve(MKNOD, exec_argv, NULL); /* Shouldn't return */ - _err(_("Failed to execute system mknod")); - free(exec_argv[0]); - free(exec_argv); + if (_get_work_area(argc, argv, &work_area) != OPKG_OPK_OK) { return EXIT_FAILURE; } -- cgit v0.9.1