diff options
Diffstat (limited to 'fish')
-rw-r--r-- | fish/fish.c | 8 | ||||
-rw-r--r-- | fish/options.c | 3 | ||||
-rw-r--r-- | fish/options.h | 10 |
3 files changed, 11 insertions, 10 deletions
diff --git a/fish/fish.c b/fish/fish.c index b782b7cb..3cf15b20 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -341,13 +341,12 @@ main (int argc, char *argv[]) list_prepared_drives (); exit (EXIT_SUCCESS); } - drv = malloc (sizeof (struct drv)); + drv = calloc (1, sizeof (struct drv)); if (!drv) { perror ("malloc"); exit (EXIT_FAILURE); } drv->type = drv_N; - drv->device = NULL; drv->nr_drives = -1; if (asprintf (&drv->N.filename, "test%d.img", next_prepared_drive++) == -1) { @@ -415,18 +414,17 @@ main (int argc, char *argv[]) while (optind < argc) { if (strchr (argv[optind], '/') || access (argv[optind], F_OK) == 0) { /* simulate -a option */ - drv = malloc (sizeof (struct drv)); + drv = calloc (1, sizeof (struct drv)); if (!drv) { perror ("malloc"); exit (EXIT_FAILURE); } drv->type = drv_a; drv->a.filename = argv[optind]; - drv->a.format = NULL; drv->next = drvs; drvs = drv; } else { /* simulate -d option */ - drv = malloc (sizeof (struct drv)); + drv = calloc (1, sizeof (struct drv)); if (!drv) { perror ("malloc"); exit (EXIT_FAILURE); diff --git a/fish/options.c b/fish/options.c index 48c8e1c2..f6523898 100644 --- a/fish/options.c +++ b/fish/options.c @@ -43,6 +43,9 @@ add_drives (struct drv *drv, char next_drive) if (drv) { next_drive = add_drives (drv->next, next_drive); + free (drv->device); + drv->device = NULL; + if (asprintf (&drv->device, "/dev/sd%c", next_drive) == -1) { perror ("asprintf"); exit (EXIT_FAILURE); diff --git a/fish/options.h b/fish/options.h index 9b9aee5e..7411a2ab 100644 --- a/fish/options.h +++ b/fish/options.h @@ -75,7 +75,9 @@ extern int echo_keys; extern const char *libvirt_uri; extern const char *program_name; -/* List of drives added via -a, -d or -N options. */ +/* List of drives added via -a, -d or -N options. NB: Unused fields + * in this struct MUST be zeroed, ie. use calloc, not malloc. + */ struct drv { struct drv *next; @@ -139,13 +141,12 @@ extern int add_libvirt_drives (const char *guest); perror (optarg); \ exit (EXIT_FAILURE); \ } \ - drv = malloc (sizeof (struct drv)); \ + drv = calloc (1, sizeof (struct drv)); \ if (!drv) { \ perror ("malloc"); \ exit (EXIT_FAILURE); \ } \ drv->type = drv_a; \ - drv->device = NULL; \ drv->nr_drives = -1; \ drv->a.filename = optarg; \ drv->a.format = format; \ @@ -156,13 +157,12 @@ extern int add_libvirt_drives (const char *guest); libvirt_uri = optarg #define OPTION_d \ - drv = malloc (sizeof (struct drv)); \ + drv = calloc (1, sizeof (struct drv)); \ if (!drv) { \ perror ("malloc"); \ exit (EXIT_FAILURE); \ } \ drv->type = drv_d; \ - drv->device = NULL; \ drv->nr_drives = -1; \ drv->d.guest = optarg; \ drv->next = drvs; \ |