]> git.sven.stormbind.net Git - sven/exfatprogs.git/blobdiff - label/label.c
debian/control: migrated packaging to salsa, updated VCS-* information.
[sven/exfatprogs.git] / label / label.c
index 8cd57488a86046e6c1cfb78f242acd46b9e02d0c..12d027be27f8b7f08bb73cf16de6dc1577f3d8a6 100644 (file)
@@ -42,6 +42,7 @@ int main(int argc, char *argv[])
        bool version_only = false;
        int serial_mode = 0;
        int flags = 0;
+       unsigned long volume_serial;
 
        init_user_input(&ui);
 
@@ -77,11 +78,10 @@ int main(int argc, char *argv[])
        if (version_only)
                exit(EXIT_FAILURE);
 
-       if (argc < 2)
+       if (argc - optind != 1)
                usage();
 
-       memset(ui.dev_name, 0, sizeof(ui.dev_name));
-       snprintf(ui.dev_name, sizeof(ui.dev_name), "%s", argv[serial_mode + 1]);
+       ui.dev_name = argv[serial_mode + 1];
 
        ret = exfat_get_blk_dev_info(&ui, &bd);
        if (ret < 0)
@@ -92,7 +92,17 @@ int main(int argc, char *argv[])
                if (flags == EXFAT_GET_VOLUME_SERIAL) {
                        ret = exfat_show_volume_serial(bd.dev_fd);
                } else if (flags == EXFAT_SET_VOLUME_SERIAL) {
-                       ui.volume_serial = strtoul(argv[3], NULL, 0);
+                       ret = exfat_parse_ulong(argv[3], &volume_serial);
+                       if (volume_serial > UINT_MAX)
+                               ret = -ERANGE;
+
+
+                       if (ret < 0) {
+                               exfat_err("invalid serial number(%s)\n", argv[3]);
+                               goto close_fd_out;
+                       }
+
+                       ui.volume_serial = volume_serial;
                        ret = exfat_set_volume_serial(&bd, &ui);
                }
        } else {
@@ -105,7 +115,6 @@ int main(int argc, char *argv[])
 
                exfat = exfat_alloc_exfat(&bd, bs);
                if (!exfat) {
-                       free(bs);
                        ret = -ENOMEM;
                        goto close_fd_out;
                }