On Thu, Jul 16, 2009 at 1:40 AM, Pavel Roskin<pro...@gnu.org> wrote: > Even though it's a new function added to the core, its use makes > core.img smaller. And it makes modules smaller too. I like the idea even if function name is inexplicit. Do you have a better alterative? > > ChangeLog: > > * kern/mm.c (grub_malloc0): New function. > (grub_debug_malloc0): Likewise. > * include/grub/mm.h: Declare grub_malloc0() and > grub_debug_malloc0(). > * util/misc.c (grub_malloc0): New function. > * bus/usb/uhci.c (grub_uhci_pci_iter): Use grub_malloc0() > 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. > --- > bus/usb/uhci.c | 5 +---- > bus/usb/usbhub.c | 4 +--- > commands/extcmd.c | 3 +-- > commands/parttool.c | 7 ++----- > disk/i386/pc/biosdisk.c | 3 +-- > disk/raid5_recover.c | 4 +--- > disk/raid6_recover.c | 7 ++----- > disk/usbms.c | 4 +--- > efiemu/mm.c | 4 +--- > efiemu/pnvram.c | 6 ++---- > fs/i386/pc/pxe.c | 3 +-- > fs/iso9660.c | 7 ++----- > fs/jfs.c | 4 +--- > fs/ntfs.c | 7 ++----- > include/grub/mm.h | 6 ++++++ > kern/disk.c | 6 +----- > kern/dl.c | 7 +------ > kern/elf.c | 3 +-- > kern/env.c | 11 +++-------- > kern/file.c | 5 +---- > kern/fs.c | 5 +---- > kern/mm.c | 27 +++++++++++++++++++++++++++ > loader/i386/multiboot.c | 3 +-- > loader/xnu.c | 7 ++----- > normal/main.c | 14 ++++---------- > normal/menu_entry.c | 9 +-------- > partmap/sun.c | 4 +--- > script/sh/lexer.c | 11 +---------- > script/sh/script.c | 7 +------ > util/misc.c | 10 ++++++++++ > video/bitmap.c | 5 +---- > video/readers/jpeg.c | 3 +-- > video/readers/png.c | 6 ++---- > 33 files changed, 85 insertions(+), 132 deletions(-) > > diff --git a/bus/usb/uhci.c b/bus/usb/uhci.c > index 84cd48d..f902488 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_malloc0 (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 ba0925a..336d657 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_malloc0 (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 a605387..2e0d993 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_malloc0 (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 c807f06..7e72791 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_malloc0 (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_malloc0 (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 09f0ce7..a71a8f4 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_malloc0 (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 31cef88..e4f1f78 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_malloc0 (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 3a994af..0b7242c 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_malloc0 (size); > if (!pbuf) > goto quit; > > - qbuf = grub_malloc (size); > + qbuf = grub_malloc0 (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 3c7ebaf..4c5e216 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_malloc0 (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 7d6a5d4..290ca11 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_malloc0 (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 d5daaab..21f7d93 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_malloc0 (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_malloc0 (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 1fc5680..5ee5fb7 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_malloc0 (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 c79ad4f..6e5c3a9 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_malloc0 (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_malloc0 (size + 1); > } > filename_alloc = 1; > grub_strncpy (filename, (char *) &entry->data[1], size); > diff --git a/fs/jfs.c b/fs/jfs.c > index 4f91825..fae2800 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_malloc0 (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 c312b8b..bcbbdae 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_malloc0 (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_malloc0 (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 4dd1363..413e439 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_malloc0) (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_malloc0(size) \ > + grub_debug_malloc0 (__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_malloc0) (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 e167fb6..d1e3da3 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_malloc0 (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 122b6b9..ad6fc49 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_malloc0 (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 2590552..a9f4649 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_malloc0 (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 e85627b..faca4c0 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_malloc0 (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_malloc0 (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_malloc0 (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 5d5e640..2d7d967 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_malloc0 (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 c8f4970..f17347e 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_malloc0 (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 9a0ae56..a07bd42 100644 > --- a/kern/mm.c > +++ b/kern/mm.c > @@ -68,6 +68,7 @@ > > #ifdef MM_DEBUG > # undef grub_malloc > +# undef grub_malloc0 > # 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_malloc0 (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_malloc0 (const char *file, int line, grub_size_t size) > +{ > + void *ptr; > + > + if (grub_mm_debug) > + grub_printf ("%s:%d: malloc0 (0x%zx) = ", file, line, size); > + ptr = grub_malloc0 (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 8ce315e..7e9ac66 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_malloc0 (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 b2c6c05..0861b83 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_malloc0 (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_malloc0 (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 7f6336e..878b947 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_malloc0 (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_malloc0 (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_malloc0 (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_malloc0 (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 86e581e..86cad0a 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_malloc0 (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 6094777..e442ff7 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_malloc0 (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 17f18e2..cbc33d7 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_malloc0 (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 89fa947..3019cd7 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_malloc0 (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 f615a42..19a4244 100644 > --- a/util/misc.c > +++ b/util/misc.c > @@ -257,6 +257,16 @@ grub_malloc (grub_size_t size) > return xmalloc (size); > } > > +void * > +grub_malloc0 (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 d399fd7..009d3e4 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_malloc0 (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 b64bf3f..076f6fd 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_malloc0 (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 733fa73..3ae8fb2 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_malloc0 (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_malloc0 (sizeof (*data)); > if (data != NULL) > { > - grub_memset (data, 0, sizeof (*data)); > data->file = file; > data->bitmap = bitmap; > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/grub-devel >
-- Regards Vladimir 'phcoder' Serbinenko Personal git repository: http://repo.or.cz/w/grub2/phcoder.git _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel