[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] Introduce grub_malloc0()
From: |
Vladimir 'phcoder' Serbinenko |
Subject: |
Re: [PATCH 1/2] Introduce grub_malloc0() |
Date: |
Thu, 16 Jul 2009 17:22:06 +0200 |
On Thu, Jul 16, 2009 at 1:40 AM, Pavel Roskin<address@hidden> 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
> address@hidden
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
- [PATCH 1/2] Introduce grub_malloc0(), Pavel Roskin, 2009/07/15
- [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine, Pavel Roskin, 2009/07/15
- Re: [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine, Vladimir 'phcoder' Serbinenko, 2009/07/16
- Re: [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine, Robert Millan, 2009/07/18
- Re: [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine, Pavel Roskin, 2009/07/19
- Re: [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine, Vladimir 'phcoder' Serbinenko, 2009/07/19
- Re: [PATCH 2/2] Disable lzo compression, lzma is doing its job just fine, Pavel Roskin, 2009/07/19
Re: [PATCH 1/2] Introduce grub_malloc0(),
Vladimir 'phcoder' Serbinenko <=