summaryrefslogtreecommitdiff
path: root/ext2fs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext2fs/inode.c')
-rw-r--r--ext2fs/inode.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/ext2fs/inode.c b/ext2fs/inode.c
index a23baee7..dc309ac8 100644
--- a/ext2fs/inode.c
+++ b/ext2fs/inode.c
@@ -634,7 +634,10 @@ diskfs_set_translator (struct node *np, const char *name, mach_msg_type_number_t
char buf[block_size];
if (namelen + 2 > block_size)
- return ENAMETOOLONG;
+ {
+ diskfs_end_catch_exception ();
+ return ENAMETOOLONG;
+ }
di = dino_ref (np->cache_id);
blkno = le32toh (di->i_translator);
@@ -650,7 +653,10 @@ diskfs_set_translator (struct node *np, const char *name, mach_msg_type_number_t
newmode = (np->dn_stat.st_mode & ~S_IFMT) | S_IFREG;
err = diskfs_validate_mode_change (np, newmode);
if (err)
- return err;
+ {
+ diskfs_end_catch_exception ();
+ return err;
+ }
}
/* Allocate block for translator */
@@ -712,7 +718,10 @@ diskfs_set_translator (struct node *np, const char *name, mach_msg_type_number_t
}
}
else
- return EOPNOTSUPP;
+ {
+ diskfs_end_catch_exception ();
+ return EOPNOTSUPP;
+ }
diskfs_end_catch_exception ();
@@ -778,7 +787,10 @@ diskfs_get_translator (struct node *np, char **namep, mach_msg_type_number_t *na
{
err = ext2_get_xattr (np, "gnu.translator", NULL, &datalen);
if (err)
- return err;
+ {
+ diskfs_end_catch_exception ();
+ return err;
+ }
*namep = malloc (datalen);
if (!*namep)
@@ -790,6 +802,9 @@ diskfs_get_translator (struct node *np, char **namep, mach_msg_type_number_t *na
*namelen = datalen;
}
+ else
+ diskfs_end_catch_exception ();
+
return err;
}