diff --git a/ChangeLog b/ChangeLog index e61783106..3b85d3ad1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,50 @@ +2009-07-16 Pavel Roskin + + * kern/mm.c (grub_zalloc): New function. + (grub_debug_zalloc): Likewise. + * include/grub/mm.h: Declare grub_zalloc() and + grub_debug_zalloc(). + * util/misc.c (grub_zalloc): New function. + * bus/usb/uhci.c (grub_uhci_pci_iter): Use grub_zalloc() + instead of grub_malloc(), remove unneeded initializations. + * bus/usb/usbhub.c (grub_usb_hub_add_dev): Likewise. + * commands/extcmd.c (grub_extcmd_dispatcher): Likewise. + * commands/parttool.c (grub_cmd_parttool): Likewise. + * disk/i386/pc/biosdisk.c (grub_biosdisk_open): Likewise. + * disk/raid5_recover.c (grub_raid5_recover): Likewise. + * disk/raid6_recover.c (grub_raid6_recover): Likewise. + * disk/usbms.c (grub_usbms_finddevs): Likewise. + * efiemu/mm.c (grub_efiemu_request_memalign): Likewise. + * efiemu/pnvram.c (grub_efiemu_pnvram): Likewise. + (grub_cmd_efiemu_pnvram): Likewise. + * fs/i386/pc/pxe.c (grub_pxefs_open): Likewise. + * fs/iso9660.c (grub_iso9660_mount): Likewise. + (grub_iso9660_iterate_dir): Likewise. + * fs/jfs.c (grub_jfs_opendir): Likewise. + * fs/ntfs.c (list_file): Likewise. + (grub_ntfs_mount): Likewise. + * kern/disk.c (grub_disk_open): Likewise. + * kern/dl.c (grub_dl_load_core): Likewise. + * kern/elf.c (grub_elf_file): Likewise. + * kern/env.c (grub_env_context_open): Likewise. + (grub_env_set): Likewise. + (grub_env_set_data_slot): Likewise. + * kern/file.c (grub_file_open): Likewise. + * kern/fs.c (grub_fs_blocklist_open): Likewise. + * loader/i386/multiboot.c (grub_module): Likewise. + * loader/xnu.c (grub_xnu_create_key): Likewise. + (grub_xnu_create_value): Likewise. + * normal/main.c (grub_normal_add_menu_entry): Likewise. + (read_config_file): Likewise. + * normal/menu_entry.c (make_screen): Likewise. + * partmap/sun.c (sun_partition_map_iterate): Likewise. + * script/sh/lexer.c (grub_script_lexer_init): Likewise. + * script/sh/script.c (grub_script_parse): Likewise. + * video/bitmap.c (grub_video_bitmap_create): Likewise. + * video/readers/jpeg.c (grub_video_reader_jpeg): Likewise. + * video/readers/png.c (grub_png_output_byte): Likewise. + (grub_video_reader_png): Likewise. + 2009-07-16 Vladimir Serbinenko Enable all targets that can be built by default diff --git a/bus/usb/uhci.c b/bus/usb/uhci.c index 84cd48daf..88ff5b3d8 100644 --- a/bus/usb/uhci.c +++ b/bus/usb/uhci.c @@ -170,14 +170,11 @@ grub_uhci_pci_iter (int bus, int device, int func, return 0; /* Allocate memory for the controller and register it. */ - u = grub_malloc (sizeof (*u)); + u = grub_zalloc (sizeof (*u)); if (! u) return 1; u->iobase = base & GRUB_UHCI_IOMASK; - u->framelist = 0; - u->qh = 0; - u->td = 0; grub_dprintf ("uhci", "class=0x%02x 0x%02x interface 0x%02x base=0x%x\n", class, subclass, interf, u->iobase); diff --git a/bus/usb/usbhub.c b/bus/usb/usbhub.c index ba0925a33..6881ce000 100644 --- a/bus/usb/usbhub.c +++ b/bus/usb/usbhub.c @@ -33,13 +33,11 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller, grub_usb_speed_t speed) grub_usb_device_t dev; int i; - dev = grub_malloc (sizeof (struct grub_usb_device)); + dev = grub_zalloc (sizeof (struct grub_usb_device)); if (! dev) return NULL; dev->controller = *controller; - dev->addr = 0; - dev->initialized = 0; dev->speed = speed; grub_usb_device_initialize (dev); diff --git a/commands/extcmd.c b/commands/extcmd.c index a6053872a..16796febf 100644 --- a/commands/extcmd.c +++ b/commands/extcmd.c @@ -40,8 +40,7 @@ grub_extcmd_dispatcher (struct grub_command *cmd, maxargs++; /* Set up the option state. */ - state = grub_malloc (sizeof (struct grub_arg_list) * maxargs); - grub_memset (state, 0, sizeof (struct grub_arg_list) * maxargs); + state = grub_zalloc (sizeof (struct grub_arg_list) * maxargs); if (grub_arg_parse (ext, argc, args, state, &new_args, &new_argc)) { diff --git a/commands/parttool.c b/commands/parttool.c index c807f066b..8c985fc4b 100644 --- a/commands/parttool.c +++ b/commands/parttool.c @@ -242,8 +242,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), if (grub_strcmp (args[i], "help") == 0) return show_help (); - parsed = (int *) grub_malloc (argc * sizeof (int)); - grub_memset (parsed, 0, argc * sizeof (int)); + parsed = (int *) grub_zalloc (argc * sizeof (int)); for (i = 1; i < argc; i++) if (! parsed[i]) @@ -272,9 +271,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), args[i]); ptool = cur; pargs = (struct grub_parttool_args *) - grub_malloc (ptool->nargs * sizeof (struct grub_parttool_args)); - grub_memset (pargs, 0, - ptool->nargs * sizeof (struct grub_parttool_args)); + grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args)); for (j = i; j < argc; j++) if (! parsed[j]) { diff --git a/disk/i386/pc/biosdisk.c b/disk/i386/pc/biosdisk.c index 09f0ce739..0a6137fad 100644 --- a/disk/i386/pc/biosdisk.c +++ b/disk/i386/pc/biosdisk.c @@ -109,12 +109,11 @@ grub_biosdisk_open (const char *name, grub_disk_t disk) disk->has_partitions = ((drive & 0x80) && (drive != cd_drive)); disk->id = drive; - data = (struct grub_biosdisk_data *) grub_malloc (sizeof (*data)); + data = (struct grub_biosdisk_data *) grub_zalloc (sizeof (*data)); if (! data) return grub_errno; data->drive = drive; - data->flags = 0; if ((cd_drive) && (drive == cd_drive)) { diff --git a/disk/raid5_recover.c b/disk/raid5_recover.c index 31cef88b1..a280be1ac 100644 --- a/disk/raid5_recover.c +++ b/disk/raid5_recover.c @@ -32,12 +32,10 @@ grub_raid5_recover (struct grub_raid_array *array, int disknr, int i; size <<= GRUB_DISK_SECTOR_BITS; - buf2 = grub_malloc (size); + buf2 = grub_zalloc (size); if (!buf2) return grub_errno; - grub_memset (buf, 0, size); - for (i = 0; i < (int) array->total_devs; i++) { grub_err_t err; diff --git a/disk/raid6_recover.c b/disk/raid6_recover.c index 3a994afeb..7bbf8eaef 100644 --- a/disk/raid6_recover.c +++ b/disk/raid6_recover.c @@ -96,11 +96,11 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p, char *pbuf = 0, *qbuf = 0; size <<= GRUB_DISK_SECTOR_BITS; - pbuf = grub_malloc (size); + pbuf = grub_zalloc (size); if (!pbuf) goto quit; - qbuf = grub_malloc (size); + qbuf = grub_zalloc (size); if (!qbuf) goto quit; @@ -108,9 +108,6 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p, if (q == (int) array->total_devs) q = 0; - grub_memset (pbuf, 0, size); - grub_memset (qbuf, 0, size); - pos = q + 1; if (pos == (int) array->total_devs) pos = 0; diff --git a/disk/usbms.c b/disk/usbms.c index 403ed1913..671e145e6 100644 --- a/disk/usbms.c +++ b/disk/usbms.c @@ -107,14 +107,12 @@ grub_usbms_finddevs (void) } devcnt++; - usbms = grub_malloc (sizeof (struct grub_usbms_dev)); + usbms = grub_zalloc (sizeof (struct grub_usbms_dev)); if (! usbms) return 1; usbms->dev = usbdev; usbms->interface = i; - usbms->in = NULL; - usbms->out = NULL; /* Iterate over all endpoints of this interface, at least a IN and OUT bulk endpoint are required. */ diff --git a/efiemu/mm.c b/efiemu/mm.c index 7d6a5d466..8b0322942 100644 --- a/efiemu/mm.c +++ b/efiemu/mm.c @@ -104,14 +104,12 @@ grub_efiemu_request_memalign (grub_size_t align, grub_size_t size, requested_memory[type] += align_overhead + size; /* Remember the request */ - ret = grub_malloc (sizeof (*ret)); + ret = grub_zalloc (sizeof (*ret)); if (!ret) return -1; ret->type = type; ret->size = size; ret->align_overhead = align_overhead; - ret->val = 0; - ret->next = 0; prev = 0; /* Add request to the end of the chain. diff --git a/efiemu/pnvram.c b/efiemu/pnvram.c index d5daaabb8..04ad6e284 100644 --- a/efiemu/pnvram.c +++ b/efiemu/pnvram.c @@ -339,11 +339,10 @@ grub_efiemu_pnvram (void) accuracy = 50000000; daylight = 0; - nvram = grub_malloc (nvramsize); + nvram = grub_zalloc (nvramsize); if (!nvram) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "Couldn't allocate space for temporary pnvram storage"); - grub_memset (nvram, 0, nvramsize); return grub_efiemu_make_nvram (); } @@ -365,11 +364,10 @@ grub_cmd_efiemu_pnvram (struct grub_extcmd *cmd, accuracy = state[3].set ? grub_strtoul (state[3].arg, 0, 0) : 50000000; daylight = state[4].set ? grub_strtoul (state[4].arg, 0, 0) : 0; - nvram = grub_malloc (nvramsize); + nvram = grub_zalloc (nvramsize); if (!nvram) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "Couldn't allocate space for temporary pnvram storage"); - grub_memset (nvram, 0, nvramsize); if (argc == 1 && (err = read_pnvram (args[0]))) { diff --git a/fs/i386/pc/pxe.c b/fs/i386/pc/pxe.c index 1fc5680cf..4032e1254 100644 --- a/fs/i386/pc/pxe.c +++ b/fs/i386/pc/pxe.c @@ -146,11 +146,10 @@ grub_pxefs_open (struct grub_file *file, const char *name) if (c.c2.status) return grub_error (GRUB_ERR_BAD_FS, "open fails"); - data = grub_malloc (sizeof (struct grub_pxe_data) + grub_strlen (name) + 1); + data = grub_zalloc (sizeof (struct grub_pxe_data) + grub_strlen (name) + 1); if (! data) return grub_errno; - data->packet_number = 0; data->block_size = grub_pxe_blksize; grub_strcpy (data->filename, name); diff --git a/fs/iso9660.c b/fs/iso9660.c index c79ad4f33..63d43b047 100644 --- a/fs/iso9660.c +++ b/fs/iso9660.c @@ -263,13 +263,11 @@ grub_iso9660_mount (grub_disk_t disk) return 0; } - data = grub_malloc (sizeof (struct grub_iso9660_data)); + data = grub_zalloc (sizeof (struct grub_iso9660_data)); if (! data) return 0; data->disk = disk; - data->rockridge = 0; - data->joliet = 0; block = 16; do @@ -509,8 +507,7 @@ grub_iso9660_iterate_dir (grub_fshelp_node_t dir, else { size = entry->len - 5; - filename = grub_malloc (size + 1); - filename[0] = '\0'; + filename = grub_zalloc (size + 1); } filename_alloc = 1; grub_strncpy (filename, (char *) &entry->data[1], size); diff --git a/fs/jfs.c b/fs/jfs.c index 4f9182576..4ec03d6aa 100644 --- a/fs/jfs.c +++ b/fs/jfs.c @@ -382,11 +382,10 @@ grub_jfs_opendir (struct grub_jfs_data *data, struct grub_jfs_inode *inode) return 0; } - diro = grub_malloc (sizeof (struct grub_jfs_diropen)); + diro = grub_zalloc (sizeof (struct grub_jfs_diropen)); if (!diro) return 0; - diro->index = 0; diro->data = data; diro->inode = inode; @@ -397,7 +396,6 @@ grub_jfs_opendir (struct grub_jfs_data *data, struct grub_jfs_inode *inode) diro->next_leaf = (struct grub_jfs_leaf_next_dirent *) de; diro->sorted = (char *) (inode->dir.header.sorted); diro->count = inode->dir.header.count; - diro->dirpage = 0; return diro; } diff --git a/fs/ntfs.c b/fs/ntfs.c index c312b8b62..d03a94016 100644 --- a/fs/ntfs.c +++ b/fs/ntfs.c @@ -601,11 +601,10 @@ list_file (struct grub_ntfs_file *diro, char *pos, (u32at (pos, 0x48) & ATTR_DIRECTORY) ? GRUB_FSHELP_DIR : GRUB_FSHELP_REG; - fdiro = grub_malloc (sizeof (struct grub_ntfs_file)); + fdiro = grub_zalloc (sizeof (struct grub_ntfs_file)); if (!fdiro) return 0; - grub_memset (fdiro, 0, sizeof (*fdiro)); fdiro->data = diro->data; fdiro->ino = u32at (pos, 0); @@ -791,12 +790,10 @@ grub_ntfs_mount (grub_disk_t disk) if (!disk) goto fail; - data = (struct grub_ntfs_data *) grub_malloc (sizeof (*data)); + data = (struct grub_ntfs_data *) grub_zalloc (sizeof (*data)); if (!data) goto fail; - grub_memset (data, 0, sizeof (*data)); - data->disk = disk; /* Read the BPB. */ diff --git a/include/grub/mm.h b/include/grub/mm.h index 4dd136321..4caf80511 100644 --- a/include/grub/mm.h +++ b/include/grub/mm.h @@ -30,6 +30,7 @@ void grub_mm_init_region (void *addr, grub_size_t size); void *EXPORT_FUNC(grub_malloc) (grub_size_t size); +void *EXPORT_FUNC(grub_zalloc) (grub_size_t size); void EXPORT_FUNC(grub_free) (void *ptr); void *EXPORT_FUNC(grub_realloc) (void *ptr, grub_size_t size); void *EXPORT_FUNC(grub_memalign) (grub_size_t align, grub_size_t size); @@ -45,6 +46,9 @@ void grub_mm_dump (unsigned lineno); #define grub_malloc(size) \ grub_debug_malloc (__FILE__, __LINE__, size) +#define grub_zalloc(size) \ + grub_debug_zalloc (__FILE__, __LINE__, size) + #define grub_realloc(ptr,size) \ grub_debug_realloc (__FILE__, __LINE__, ptr, size) @@ -56,6 +60,8 @@ void grub_mm_dump (unsigned lineno); void *EXPORT_FUNC(grub_debug_malloc) (const char *file, int line, grub_size_t size); +void *EXPORT_FUNC(grub_debug_zalloc) (const char *file, int line, + grub_size_t size); void EXPORT_FUNC(grub_debug_free) (const char *file, int line, void *ptr); void *EXPORT_FUNC(grub_debug_realloc) (const char *file, int line, void *ptr, grub_size_t size); diff --git a/kern/disk.c b/kern/disk.c index e167fb630..e463626fb 100644 --- a/kern/disk.c +++ b/kern/disk.c @@ -244,14 +244,10 @@ grub_disk_open (const char *name) grub_dprintf ("disk", "Opening `%s'...\n", name); - disk = (grub_disk_t) grub_malloc (sizeof (*disk)); + disk = (grub_disk_t) grub_zalloc (sizeof (*disk)); if (! disk) return 0; - disk->dev = 0; - disk->read_hook = 0; - disk->partition = 0; - disk->data = 0; disk->name = grub_strdup (name); if (! disk->name) goto fail; diff --git a/kern/dl.c b/kern/dl.c index 122b6b90e..1fe82e789 100644 --- a/kern/dl.c +++ b/kern/dl.c @@ -535,16 +535,11 @@ grub_dl_load_core (void *addr, grub_size_t size) return 0; } - mod = (grub_dl_t) grub_malloc (sizeof (*mod)); + mod = (grub_dl_t) grub_zalloc (sizeof (*mod)); if (! mod) return 0; - mod->name = 0; mod->ref_count = 1; - mod->dep = 0; - mod->segment = 0; - mod->init = 0; - mod->fini = 0; grub_dprintf ("modules", "relocating to %p\n", mod); if (grub_dl_resolve_name (mod, e) diff --git a/kern/elf.c b/kern/elf.c index 259055238..f14161060 100644 --- a/kern/elf.c +++ b/kern/elf.c @@ -61,12 +61,11 @@ grub_elf_file (grub_file_t file) { grub_elf_t elf; - elf = grub_malloc (sizeof (*elf)); + elf = grub_zalloc (sizeof (*elf)); if (! elf) return 0; elf->file = file; - elf->phdrs = 0; if (grub_file_seek (elf->file, 0) == (grub_off_t) -1) goto fail; diff --git a/kern/env.c b/kern/env.c index e85627b0b..750902af8 100644 --- a/kern/env.c +++ b/kern/env.c @@ -80,11 +80,10 @@ grub_env_context_open (int export) struct grub_env_context *context; int i; - context = grub_malloc (sizeof (*context)); + context = grub_zalloc (sizeof (*context)); if (! context) return grub_errno; - grub_memset (context, 0, sizeof (*context)); context->prev = current_context; current_context = context; @@ -204,12 +203,10 @@ grub_env_set (const char *name, const char *val) } /* The variable does not exist, so create a new one. */ - var = grub_malloc (sizeof (*var)); + var = grub_zalloc (sizeof (*var)); if (! var) return grub_errno; - grub_memset (var, 0, sizeof (*var)); - /* This is not necessary, because GRUB_ENV_VAR_LOCAL == 0. But leave this for readability. */ var->type = GRUB_ENV_VAR_LOCAL; @@ -379,12 +376,10 @@ grub_env_set_data_slot (const char *name, const void *ptr) } /* The variable does not exist, so create a new one. */ - var = grub_malloc (sizeof (*var)); + var = grub_zalloc (sizeof (*var)); if (! var) goto fail; - grub_memset (var, 0, sizeof (*var)); - var->type = GRUB_ENV_VAR_DATA; var->name = mangled_name; var->value = (char *) ptr; diff --git a/kern/file.c b/kern/file.c index 5d5e640b1..9b56b88e4 100644 --- a/kern/file.c +++ b/kern/file.c @@ -75,14 +75,11 @@ grub_file_open (const char *name) if (! device) goto fail; - file = (grub_file_t) grub_malloc (sizeof (*file)); + file = (grub_file_t) grub_zalloc (sizeof (*file)); if (! file) goto fail; file->device = device; - file->offset = 0; - file->data = 0; - file->read_hook = 0; if (device->disk && file_name[0] != '/') /* This is a block list. */ diff --git a/kern/fs.c b/kern/fs.c index c8f4970b9..0c456377f 100644 --- a/kern/fs.c +++ b/kern/fs.c @@ -161,7 +161,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) while (p); /* Allocate a block list. */ - blocks = grub_malloc (sizeof (struct grub_fs_block) * (num + 1)); + blocks = grub_zalloc (sizeof (struct grub_fs_block) * (num + 1)); if (! blocks) return 0; @@ -179,8 +179,6 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) goto fail; } } - else - blocks[i].offset = 0; p++; blocks[i].length = grub_strtoul (p, &p, 0); @@ -203,7 +201,6 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) p++; } - blocks[i].length = 0; file->data = blocks; return GRUB_ERR_NONE; diff --git a/kern/mm.c b/kern/mm.c index 9a0ae56ed..cbcb99560 100644 --- a/kern/mm.c +++ b/kern/mm.c @@ -68,6 +68,7 @@ #ifdef MM_DEBUG # undef grub_malloc +# undef grub_zalloc # undef grub_realloc # undef grub_free # undef grub_memalign @@ -348,6 +349,19 @@ grub_malloc (grub_size_t size) return grub_memalign (0, size); } +/* Allocate SIZE bytes, clear them and return the pointer. */ +void * +grub_zalloc (grub_size_t size) +{ + void *ret; + + ret = grub_memalign (0, size); + if (ret) + grub_memset (ret, 0, size); + + return ret; +} + /* Deallocate the pointer PTR. */ void grub_free (void *ptr) @@ -522,6 +536,19 @@ grub_debug_malloc (const char *file, int line, grub_size_t size) return ptr; } +void * +grub_debug_zalloc (const char *file, int line, grub_size_t size) +{ + void *ptr; + + if (grub_mm_debug) + grub_printf ("%s:%d: zalloc (0x%zx) = ", file, line, size); + ptr = grub_zalloc (size); + if (grub_mm_debug) + grub_printf ("%p\n", ptr); + return ptr; +} + void grub_debug_free (const char *file, int line, void *ptr) { diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index 8ce315eab..87ffcae8d 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -456,13 +456,12 @@ grub_module (int argc, char *argv[]) } else { - struct grub_mod_list *modlist = grub_malloc (sizeof (struct grub_mod_list)); + struct grub_mod_list *modlist = grub_zalloc (sizeof (struct grub_mod_list)); if (! modlist) goto fail; modlist->mod_start = (grub_uint32_t) module; modlist->mod_end = (grub_uint32_t) module + size; modlist->cmdline = (grub_uint32_t) cmdline; - modlist->pad = 0; mbi->mods_count = 1; mbi->mods_addr = (grub_uint32_t) modlist; mbi->flags |= MULTIBOOT_INFO_MODS; diff --git a/loader/xnu.c b/loader/xnu.c index b2c6c059e..aac4ae372 100644 --- a/loader/xnu.c +++ b/loader/xnu.c @@ -278,7 +278,7 @@ grub_xnu_create_key (struct grub_xnu_devtree_key **parent, char *name) ret = grub_xnu_find_key (*parent, name); if (ret) return ret; - ret = (struct grub_xnu_devtree_key *) grub_malloc (sizeof (*ret)); + ret = (struct grub_xnu_devtree_key *) grub_zalloc (sizeof (*ret)); if (! ret) { grub_error (GRUB_ERR_OUT_OF_MEMORY, "can't create key %s", name); @@ -292,7 +292,6 @@ grub_xnu_create_key (struct grub_xnu_devtree_key **parent, char *name) return 0; } ret->datasize = -1; - ret->first_child = 0; ret->next = *parent; *parent = ret; return ret; @@ -313,7 +312,7 @@ grub_xnu_create_value (struct grub_xnu_devtree_key **parent, char *name) ret->data = 0; return ret; } - ret = (struct grub_xnu_devtree_key *) grub_malloc (sizeof (*ret)); + ret = (struct grub_xnu_devtree_key *) grub_zalloc (sizeof (*ret)); if (! ret) { grub_error (GRUB_ERR_OUT_OF_MEMORY, "can't create value %s", name); @@ -326,8 +325,6 @@ grub_xnu_create_value (struct grub_xnu_devtree_key **parent, char *name) grub_error (GRUB_ERR_OUT_OF_MEMORY, "can't create value %s", name); return 0; } - ret->datasize = 0; - ret->data = 0; ret->next = *parent; *parent = ret; return ret; diff --git a/normal/main.c b/normal/main.c index 7f6336eeb..66d841867 100644 --- a/normal/main.c +++ b/normal/main.c @@ -166,11 +166,9 @@ grub_normal_add_menu_entry (int argc, const char **args, struct grub_menu_entry_class *classes_tail; /* Allocate dummy head node for class list. */ - classes_head = grub_malloc (sizeof (struct grub_menu_entry_class)); + classes_head = grub_zalloc (sizeof (struct grub_menu_entry_class)); if (! classes_head) return grub_errno; - classes_head->name = 0; - classes_head->next = 0; classes_tail = classes_head; menu = grub_env_get_data_slot ("menu"); @@ -206,7 +204,7 @@ grub_normal_add_menu_entry (int argc, const char **args, } /* Create a new class and add it at the tail of the list. */ - new_class = grub_malloc (sizeof (struct grub_menu_entry_class)); + new_class = grub_zalloc (sizeof (struct grub_menu_entry_class)); if (! new_class) { grub_free (class_name); @@ -215,7 +213,6 @@ grub_normal_add_menu_entry (int argc, const char **args, } /* Fill in the new class node. */ new_class->name = class_name; - new_class->next = 0; /* Link the tail to it, and make it the new tail. */ classes_tail->next = new_class; classes_tail = new_class; @@ -267,7 +264,7 @@ grub_normal_add_menu_entry (int argc, const char **args, while (*last) last = &(*last)->next; - *last = grub_malloc (sizeof (**last)); + *last = grub_zalloc (sizeof (**last)); if (! *last) { free_menu_entry_classes (classes_head); @@ -278,7 +275,6 @@ grub_normal_add_menu_entry (int argc, const char **args, (*last)->title = menutitle; (*last)->classes = classes_head; - (*last)->next = 0; (*last)->sourcecode = menusourcecode; menu->size++; @@ -346,11 +342,9 @@ read_config_file (const char *config) newmenu = grub_env_get_data_slot ("menu"); if (! newmenu) { - newmenu = grub_malloc (sizeof (*newmenu)); + newmenu = grub_zalloc (sizeof (*newmenu)); if (! newmenu) return 0; - newmenu->size = 0; - newmenu->entry_list = 0; grub_env_set_data_slot ("menu", newmenu); } diff --git a/normal/menu_entry.c b/normal/menu_entry.c index 86e581e80..f7662ff75 100644 --- a/normal/menu_entry.c +++ b/normal/menu_entry.c @@ -416,18 +416,11 @@ make_screen (grub_menu_entry_t entry) struct screen *screen; /* Initialize the screen. */ - screen = grub_malloc (sizeof (*screen)); + screen = grub_zalloc (sizeof (*screen)); if (! screen) return 0; screen->num_lines = 1; - screen->column = 0; - screen->real_column = 0; - screen->line = 0; - screen->x = 0; - screen->y = 0; - screen->killed_text = 0; - screen->completion_shown = 0; screen->lines = grub_malloc (sizeof (struct line)); if (! screen->lines) goto fail; diff --git a/partmap/sun.c b/partmap/sun.c index 60947774f..ce6d58899 100644 --- a/partmap/sun.c +++ b/partmap/sun.c @@ -95,12 +95,10 @@ sun_partition_map_iterate (grub_disk_t disk, raw = *disk; raw.partition = 0; - p = (grub_partition_t) grub_malloc (sizeof (struct grub_partition)); + p = (grub_partition_t) grub_zalloc (sizeof (struct grub_partition)); if (! p) return grub_errno; - p->offset = 0; - p->data = 0; p->partmap = &grub_sun_partition_map; if (grub_disk_read (&raw, 0, 0, sizeof (struct grub_sun_block), &block) == GRUB_ERR_NONE) diff --git a/script/sh/lexer.c b/script/sh/lexer.c index 17f18e203..2a56c30a6 100644 --- a/script/sh/lexer.c +++ b/script/sh/lexer.c @@ -49,22 +49,13 @@ grub_script_lexer_init (char *script, grub_reader_getline_t getline) { struct grub_lexer_param *param; - param = grub_malloc (sizeof (*param)); + param = grub_zalloc (sizeof (*param)); if (! param) return 0; param->state = GRUB_PARSER_STATE_TEXT; param->getline = getline; - param->refs = 0; - param->done = 0; - param->newscript = 0; param->script = script; - param->record = 0; - param->recording = 0; - param->recordpos = 0; - param->recordlen = 0; - param->tokenonhold = 0; - param->was_newline = 0; return param; } diff --git a/script/sh/script.c b/script/sh/script.c index 89fa9474d..cefafe605 100644 --- a/script/sh/script.c +++ b/script/sh/script.c @@ -304,15 +304,10 @@ grub_script_parse (char *script, grub_reader_getline_t getline) if (! parsed) return 0; - parsestate = grub_malloc (sizeof (*parsestate)); + parsestate = grub_zalloc (sizeof (*parsestate)); if (! parsestate) return 0; - parsestate->err = 0; - parsestate->func_mem = 0; - parsestate->memused = 0; - parsestate->parsed = 0; - /* Initialize the lexer. */ lexstate = grub_script_lexer_init (script, getline); if (! lexstate) diff --git a/util/misc.c b/util/misc.c index f615a42c7..37e75311e 100644 --- a/util/misc.c +++ b/util/misc.c @@ -257,6 +257,16 @@ grub_malloc (grub_size_t size) return xmalloc (size); } +void * +grub_zalloc (grub_size_t size) +{ + void *ret; + + ret = xmalloc (size); + memset (ret, 0, size); + return ret; +} + void grub_free (void *ptr) { diff --git a/video/bitmap.c b/video/bitmap.c index d399fd72b..7b135a5dc 100644 --- a/video/bitmap.c +++ b/video/bitmap.c @@ -137,7 +137,7 @@ grub_video_bitmap_create (struct grub_video_bitmap **bitmap, /* Calculate size needed for the data. */ size = (width * mode_info->bytes_per_pixel) * height; - (*bitmap)->data = grub_malloc (size); + (*bitmap)->data = grub_zalloc (size); if (! (*bitmap)->data) { grub_free (*bitmap); @@ -146,9 +146,6 @@ grub_video_bitmap_create (struct grub_video_bitmap **bitmap, return grub_errno; } - /* Clear bitmap. */ - grub_memset ((*bitmap)->data, 0, size); - return GRUB_ERR_NONE; } diff --git a/video/readers/jpeg.c b/video/readers/jpeg.c index b64bf3f87..460a52872 100644 --- a/video/readers/jpeg.c +++ b/video/readers/jpeg.c @@ -667,12 +667,11 @@ grub_video_reader_jpeg (struct grub_video_bitmap **bitmap, if (!file) return grub_errno; - data = grub_malloc (sizeof (*data)); + data = grub_zalloc (sizeof (*data)); if (data != NULL) { int i; - grub_memset (data, 0, sizeof (*data)); data->file = file; data->bitmap = bitmap; grub_jpeg_decode_jpeg (data); diff --git a/video/readers/png.c b/video/readers/png.c index 733fa7305..c2008aeb2 100644 --- a/video/readers/png.c +++ b/video/readers/png.c @@ -543,11 +543,10 @@ grub_png_output_byte (struct grub_png_data *data, grub_uint8_t n) if (data->first_line) { - blank_line = grub_malloc (row_bytes); + blank_line = grub_zalloc (row_bytes); if (blank_line == NULL) return grub_errno; - grub_memset (blank_line, 0, row_bytes); up = blank_line; } else @@ -843,10 +842,9 @@ grub_video_reader_png (struct grub_video_bitmap **bitmap, if (!file) return grub_errno; - data = grub_malloc (sizeof (*data)); + data = grub_zalloc (sizeof (*data)); if (data != NULL) { - grub_memset (data, 0, sizeof (*data)); data->file = file; data->bitmap = bitmap;