[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/3] 9pfs: Use g_new() & friends where that makes obvious sense



On Mon, 14 Mar 2022 17:01:07 +0100
Markus Armbruster <armbru@xxxxxxxxxx> wrote:

> g_new(T, n) is neater than g_malloc(sizeof(T) * n).  It's also safer,
> for two reasons.  One, it catches multiplication overflowing size_t.
> Two, it returns T * rather than void *, which lets the compiler catch
> more type errors.
> 
> This commit only touches allocations with size arguments of the form
> sizeof(T).
> 
> Patch created mechanically with:
> 
>     $ spatch --in-place --sp-file scripts/coccinelle/use-g_new-etc.cocci \
>            --macro-file scripts/cocci-macro-file.h FILES...
> 
> Except this uncovers a typing error:
> 
>     ../hw/9pfs/9p.c:855:13: warning: incompatible pointer types assigning to 
> 'QpfEntry *' from 'QppEntry *' [-Wincompatible-pointer-types]
>           val = g_new0(QppEntry, 1);
>               ^ ~~~~~~~~~~~~~~~~~~~
>     1 warning generated.
> 
> Harmless, because QppEntry is larger than QpfEntry.  Fix to allocate a
> QpfEntry instead.
> 
> Cc: Greg Kurz <groug@xxxxxxxx>
> Cc: Christian Schoenebeck <qemu_oss@xxxxxxxxxxxxx>
> Signed-off-by: Markus Armbruster <armbru@xxxxxxxxxx>
> ---

Reviewed-by: Greg Kurz <groug@xxxxxxxx>

>  hw/9pfs/9p-proxy.c           | 2 +-
>  hw/9pfs/9p-synth.c           | 4 ++--
>  hw/9pfs/9p.c                 | 8 ++++----
>  hw/9pfs/codir.c              | 6 +++---
>  tests/qtest/virtio-9p-test.c | 4 ++--
>  5 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/hw/9pfs/9p-proxy.c b/hw/9pfs/9p-proxy.c
> index 8b4b5cf7dc..4c5e0fc217 100644
> --- a/hw/9pfs/9p-proxy.c
> +++ b/hw/9pfs/9p-proxy.c
> @@ -1187,7 +1187,7 @@ static int proxy_parse_opts(QemuOpts *opts, 
> FsDriverEntry *fs, Error **errp)
>  
>  static int proxy_init(FsContext *ctx, Error **errp)
>  {
> -    V9fsProxy *proxy = g_malloc(sizeof(V9fsProxy));
> +    V9fsProxy *proxy = g_new(V9fsProxy, 1);
>      int sock_id;
>  
>      if (ctx->export_flags & V9FS_PROXY_SOCK_NAME) {
> diff --git a/hw/9pfs/9p-synth.c b/hw/9pfs/9p-synth.c
> index b3080e415b..d99d263985 100644
> --- a/hw/9pfs/9p-synth.c
> +++ b/hw/9pfs/9p-synth.c
> @@ -49,7 +49,7 @@ static V9fsSynthNode *v9fs_add_dir_node(V9fsSynthNode 
> *parent, int mode,
>  
>      /* Add directory type and remove write bits */
>      mode = ((mode & 0777) | S_IFDIR) & ~(S_IWUSR | S_IWGRP | S_IWOTH);
> -    node = g_malloc0(sizeof(V9fsSynthNode));
> +    node = g_new0(V9fsSynthNode, 1);
>      if (attr) {
>          /* We are adding .. or . entries */
>          node->attr = attr;
> @@ -128,7 +128,7 @@ int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int 
> mode,
>      }
>      /* Add file type and remove write bits */
>      mode = ((mode & 0777) | S_IFREG);
> -    node = g_malloc0(sizeof(V9fsSynthNode));
> +    node = g_new0(V9fsSynthNode, 1);
>      node->attr         = &node->actual_attr;
>      node->attr->inode  = synth_node_count++;
>      node->attr->nlink  = 1;
> diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
> index a6d6b3f835..8e9d4aea73 100644
> --- a/hw/9pfs/9p.c
> +++ b/hw/9pfs/9p.c
> @@ -324,7 +324,7 @@ static V9fsFidState *alloc_fid(V9fsState *s, int32_t fid)
>              return NULL;
>          }
>      }
> -    f = g_malloc0(sizeof(V9fsFidState));
> +    f = g_new0(V9fsFidState, 1);
>      f->fid = fid;
>      f->fid_type = P9_FID_NONE;
>      f->ref = 1;
> @@ -804,7 +804,7 @@ static int qid_inode_prefix_hash_bits(V9fsPDU *pdu, dev_t 
> dev)
>  
>      val = qht_lookup(&pdu->s->qpd_table, &lookup, hash);
>      if (!val) {
> -        val = g_malloc0(sizeof(QpdEntry));
> +        val = g_new0(QpdEntry, 1);
>          *val = lookup;
>          affix = affixForIndex(pdu->s->qp_affix_next);
>          val->prefix_bits = affix.bits;
> @@ -852,7 +852,7 @@ static int qid_path_fullmap(V9fsPDU *pdu, const struct 
> stat *stbuf,
>              return -ENFILE;
>          }
>  
> -        val = g_malloc0(sizeof(QppEntry));
> +        val = g_new0(QpfEntry, 1);
>          *val = lookup;
>  
>          /* new unique inode and device combo */
> @@ -928,7 +928,7 @@ static int qid_path_suffixmap(V9fsPDU *pdu, const struct 
> stat *stbuf,
>              return -ENFILE;
>          }
>  
> -        val = g_malloc0(sizeof(QppEntry));
> +        val = g_new0(QppEntry, 1);
>          *val = lookup;
>  
>          /* new unique inode affix and device combo */
> diff --git a/hw/9pfs/codir.c b/hw/9pfs/codir.c
> index 75148bc985..93ba44fb75 100644
> --- a/hw/9pfs/codir.c
> +++ b/hw/9pfs/codir.c
> @@ -141,9 +141,9 @@ static int do_readdir_many(V9fsPDU *pdu, V9fsFidState 
> *fidp,
>  
>          /* append next node to result chain */
>          if (!e) {
> -            *entries = e = g_malloc0(sizeof(V9fsDirEnt));
> +            *entries = e = g_new0(V9fsDirEnt, 1);
>          } else {
> -            e = e->next = g_malloc0(sizeof(V9fsDirEnt));
> +            e = e->next = g_new0(V9fsDirEnt, 1);
>          }
>          e->dent = qemu_dirent_dup(dent);
>  
> @@ -163,7 +163,7 @@ static int do_readdir_many(V9fsPDU *pdu, V9fsFidState 
> *fidp,
>                  break;
>              }
>  
> -            e->st = g_malloc0(sizeof(struct stat));
> +            e->st = g_new0(struct stat, 1);
>              memcpy(e->st, &stbuf, sizeof(struct stat));
>          }
>  
> diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c
> index 01ca076afe..e28c71bd8f 100644
> --- a/tests/qtest/virtio-9p-test.c
> +++ b/tests/qtest/virtio-9p-test.c
> @@ -468,12 +468,12 @@ static void v9fs_rreaddir(P9Req *req, uint32_t *count, 
> uint32_t *nentries,
>           togo -= 13 + 8 + 1 + 2 + slen, ++n)
>      {
>          if (!e) {
> -            e = g_malloc(sizeof(struct V9fsDirent));
> +            e = g_new(struct V9fsDirent, 1);
>              if (entries) {
>                  *entries = e;
>              }
>          } else {
> -            e = e->next = g_malloc(sizeof(struct V9fsDirent));
> +            e = e->next = g_new(struct V9fsDirent, 1);
>          }
>          e->next = NULL;
>          /* qid[13] offset[8] type[1] name[s] */




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.