[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