bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH] Trivial fix on an argument in ftpfs


From: Samuel Thibault
Subject: Re: [PATCH] Trivial fix on an argument in ftpfs
Date: Sat, 30 Jul 2005 04:21:42 +0200
User-agent: Mutt/1.5.9i-nntp

Hi,

Well, I'm sorry, but I don't think that this is the good correction :)
inode_locp *is* a hurd_ihash_locp_t, and hurd_ihash_remove() wants
that. There is just a mis-casting in add_one():

2005-07-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>

        * ihash.c (add_one): Correct cast.

Index: libihash/ihash.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libihash/ihash.c,v
retrieving revision 1.9
diff -u -u -p -r1.9 ihash.c
--- libihash/ihash.c    2 Apr 2004 17:01:03 -0000       1.9
+++ libihash/ihash.c    30 Jul 2005 01:38:27 -0000
@@ -329,7 +329,7 @@ add_one (hurd_ihash_t ht, hurd_ihash_key
       ht->items[first_free].key = key;
 
       if (ht->locp_offset != HURD_IHASH_NO_LOCP)
-       *((hurd_ihash_locp_t) (((char *) value) + ht->locp_offset))
+       *((hurd_ihash_locp_t *) (((char *) value) + ht->locp_offset))
          = &ht->items[first_free].value;
 
       return 1;

But now, where does the bug come from? Well, ftpfs_create_node() is
suspicious: the result of hurd_ihash_add() is not checked, and the item
that is given is the node*, not the struct ftpfs_dir_entry*!

2005-07-30  Samuel Thibault  <samuel.thibault@ens-lyon.org>

        * node.c (ftpfs_create_node): Add check for result of
        hurd_ihash_add(), correct addition of dir entry.

Index: ftpfs/node.c
===================================================================
RCS file: /cvsroot/hurd/hurd/ftpfs/node.c,v
retrieving revision 1.2
diff -u -p -r1.2 node.c
--- ftpfs/node.c        1 Mar 2004 09:58:44 -0000       1.2
+++ ftpfs/node.c        30 Jul 2005 01:38:07 -0000
@@ -39,6 +39,7 @@ ftpfs_create_node (struct ftpfs_dir_entr
 {
   struct node *new;
   struct netnode *nn = malloc (sizeof (struct netnode));
+  error_t err;
 
   if (! nn)
     return ENOMEM;
@@ -61,9 +62,16 @@ ftpfs_create_node (struct ftpfs_dir_entr
                ftpfs_maptime);
 
   spin_lock (&nn->fs->inode_mappings_lock);
-  hurd_ihash_add (&nn->fs->inode_mappings, e->stat.st_ino, new);
+  err = hurd_ihash_add (&nn->fs->inode_mappings, e->stat.st_ino, e);
   spin_unlock (&nn->fs->inode_mappings_lock);
 
+  if (err)
+    {
+      free(nn);
+      free(new);
+      return err;
+    }
+
   e->node = new;
   *node = new;
 

Regards,
Samuel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]