X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util-linux%2Fipcrm.c;h=507e58fe35642bf91192af4d0e5bf84eea2dd7ea;hb=1c962f23e09a50701be3090a72d0c0693e77d2ca;hp=0e44783b3e0f2a56853e4335504ecfb6a2326cb4;hpb=f0ed376eda5d5c25d270e5100a881fb2d801bee6;p=oweals%2Fbusybox.git diff --git a/util-linux/ipcrm.c b/util-linux/ipcrm.c index 0e44783b3..507e58fe3 100644 --- a/util-linux/ipcrm.c +++ b/util-linux/ipcrm.c @@ -39,19 +39,16 @@ typedef enum type_id { static int remove_ids(type_id type, int argc, char **argv) { - int id; + unsigned long id; int ret = 0; /* silence gcc */ - char *end; int nb_errors = 0; union semun arg; arg.val = 0; while (argc) { - - id = strtoul(argv[0], &end, 10); - - if (*end != 0) { + id = bb_strtoul(argv[0], NULL, 10); + if (errno || id > INT_MAX) { bb_error_msg("invalid id: %s", argv[0]); nb_errors++; } else { @@ -71,7 +68,7 @@ static int remove_ids(type_id type, int argc, char **argv) argv++; } - return (nb_errors); + return nb_errors; } #endif /* #ifndef CONFIG_IPCRM_DROP_LEGACY */ @@ -91,11 +88,13 @@ int ipcrm_main(int argc, char **argv) type_id what = 0; /* silence gcc */ char w; - if ((((w=argv[1][0]) == 'm' && argv[1][1] == 's' && argv[1][2] == 'g') - || (argv[1][0] == 's' - && ((w=argv[1][1]) == 'h' || w == 'e') - && argv[1][2] == 'm')) - && argv[1][3] == '\0') { + w=argv[1][0]; + if ( ((w == 'm' && argv[1][1] == 's' && argv[1][2] == 'g') + || (argv[1][0] == 's' + && ((w=argv[1][1]) == 'h' || w == 'e') + && argv[1][2] == 'm') + ) && argv[1][3] == '\0' + ) { if (argc < 3) bb_show_usage(); @@ -140,7 +139,7 @@ int ipcrm_main(int argc, char **argv) if (iskey) { /* keys are in hex or decimal */ - key_t key = strtoul(optarg, NULL, 0); + key_t key = xstrtoul(optarg, 0); if (key == IPC_PRIVATE) { error++; @@ -176,7 +175,7 @@ int ipcrm_main(int argc, char **argv) } } else { /* ids are in decimal */ - id = strtoul(optarg, NULL, 10); + id = xatoul(optarg); } result = ((c == 'q') ? msgctl(id, IPC_RMID, NULL) :