summaryrefslogtreecommitdiff
path: root/libdiskfs/file-get-trans.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdiskfs/file-get-trans.c')
-rw-r--r--libdiskfs/file-get-trans.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/libdiskfs/file-get-trans.c b/libdiskfs/file-get-trans.c
index 0447666f..c2680426 100644
--- a/libdiskfs/file-get-trans.c
+++ b/libdiskfs/file-get-trans.c
@@ -114,7 +114,20 @@ diskfs_S_file_get_translator (struct protid *cred,
if (!np->istranslated)
error = EINVAL;
else
- error = diskfs_get_translator (np, trans, translen);
+ {
+ char *string;
+ u_int len;
+ error = diskfs_get_translator (np, &string, &len);
+ if (!error)
+ {
+ if (len > *translen)
+ vm_allocate (mach_task_self (), (vm_address_t *) trans,
+ len, 1);
+ bcopy (string, *trans, len);
+ *translen = len;
+ free (string);
+ }
+ }
}
mutex_unlock (&np->lock);