Hi,
In all of your modifications you will lose the new pointer if the call is
successful. In this case you are left with the original pointer which is
invalid! I think the purpose of ped_realloc has been to wrap this so that
you wouldn't need to use a temporary variable and check the return value.
The correct use would be something like this:

void* tmp;
tmp = ped_realloc(fs->gd, new_size);
if(tmp == NULL) ....;
else fs->gd = tmp;

Regards,
Siavosh

On 10/30/07, Frodo Baggins <[EMAIL PROTECTED]> wrote:
>
> Hi all,
> This point was raised in an earlier discussion on this list. I think
> the modifications to ext2_resize.c can benefit from a review.
>
> Regards,
> Frodo B
>
> diff --git a/include/parted/parted.h b/include/parted/parted.h
> index 1302d8f..13a7bb4 100644
> --- a/include/parted/parted.h
> +++ b/include/parted/parted.h
> @@ -53,7 +53,7 @@ extern const char* ped_get_version ();
>
> extern void* ped_malloc (size_t size);
> extern void* ped_calloc (size_t size);
> -extern int ped_realloc (void** ptr, size_t size);
> +extern void* ped_realloc (void* ptr, size_t size);
> extern void ped_free (void* ptr);
>
> #ifdef __cplusplus
> diff --git a/libparted/fs/ext2/ext2_resize.c
> b/libparted/fs/ext2/ext2_resize.c
> index 580c466..b637c23 100644
> --- a/libparted/fs/ext2/ext2_resize.c
> +++ b/libparted/fs/ext2/ext2_resize.c
> @@ -35,7 +35,7 @@ static int ext2_add_group(struct ext2_fs *fs, blk_t
> groupsize)
>         if (fs->opt_verbose)
>                  fputs ("ext2_add_group\n", stderr);
>
> -       if (!ped_realloc ((void*) &fs->gd,
> +       if (NULL == ped_realloc ((void*) fs->gd,
>                           (fs->numgroups+1) * sizeof(struct
> ext2_group_desc)
>                               + fs->blocksize))
>                 return 0;



@@ -315,7 +315,7 @@ static int ext2_del_group(struct ext2_fs *fs)
>         if (fs->opt_safe)
>                 ext2_sync(fs);
>
> -       ped_realloc ((void*) &fs->gd,
> +       ped_realloc ((void*) fs->gd,
>                      fs->numgroups * sizeof(struct ext2_group_desc)
>                               + fs->blocksize);
>
> diff --git a/libparted/libparted.c b/libparted/libparted.c
> index a8c7f0a..978f219 100644
> --- a/libparted/libparted.c
> +++ b/libparted/libparted.c
> @@ -308,19 +308,18 @@ ped_malloc (size_t size)
>         return mem;
> }
>
> -int
> -ped_realloc (void** old, size_t size)
> +void*
> +ped_realloc (void* old, size_t size)
> {
>         void*           mem;
>
> -       mem = (void*) realloc (*old, size);
> +       mem = realloc (old, size);
>         if (!mem) {
>                 ped_exception_throw (PED_EXCEPTION_FATAL,
> PED_EXCEPTION_CANCEL,
>                                      _("Out of memory."));
> -               return 0;
> +               return mem;
>         }
> -       *old = mem;
> -       return 1;
> +       return mem;
> }
>
>
> diff --git a/parted/parted.c b/parted/parted.c
> index 6a606ae..65ccef4 100644
> --- a/parted/parted.c
> +++ b/parted/parted.c
> @@ -1171,7 +1171,7 @@ partition_print_flags (PedPartition* part)
>                                  first_flag = 0;
>                          else {
>                                  _res = res;
> -                                ped_realloc (&_res, strlen (res)
> +                                ped_realloc (_res, strlen (res)
>                                                             + 1 + 2);
>                                  res = _res;
>                                  strncat (res, ", ", 2);
> @@ -1179,7 +1179,7 @@ partition_print_flags (PedPartition* part)
>
>                          name = _(ped_partition_flag_get_name (flag));
>                          _res = res;
> -                        ped_realloc (&_res, strlen (res) + 1
> +                        ped_realloc (_res, strlen (res) + 1
>                                                     + strlen (name));
>                          res = _res;
>                          strncat (res, name, 21);
>
> _______________________________________________
> parted-devel mailing list
> [email protected]
> http://lists.alioth.debian.org/mailman/listinfo/parted-devel
>
_______________________________________________
parted-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/parted-devel

Reply via email to