From 7f68a98c5cad19350f53b00203465c72641b8f58 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Tue, 9 Dec 2014 01:36:34 +0100 Subject: Fix mode of nodes created with mkfile Their faked field was not initialized. Thanks a lot to Svante Signell for the investigation * trans/fakeroot.c (new_node): Initialize faked field of nn to 0. (netfs_attempt_mkfile): Call set_default_attributes on newly-allocated node, and if the real mode is not the same as the requested mode, fake the mode. --- trans/fakeroot.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/trans/fakeroot.c b/trans/fakeroot.c index 12173bdb..22759815 100644 --- a/trans/fakeroot.c +++ b/trans/fakeroot.c @@ -103,6 +103,7 @@ new_node (file_t file, mach_port_t idport, int locked, int openmodes, return err; } } + nn->faked = 0; if (!locked) pthread_mutex_lock (&idport_ihash_lock); @@ -679,13 +680,22 @@ netfs_attempt_mkfile (struct iouser *user, struct node *dir, mode_t mode, struct node **np) { file_t newfile; + mode_t real_mode = real_from_fake_mode (mode); error_t err = dir_mkfile (netfs_node_netnode (dir)->file, O_RDWR|O_EXEC, - real_from_fake_mode (mode), &newfile); + real_mode, &newfile); pthread_mutex_unlock (&dir->lock); if (err == 0) err = new_node (newfile, MACH_PORT_NULL, 0, O_RDWR|O_EXEC, np); if (err == 0) - pthread_mutex_unlock (&(*np)->lock); + { + pthread_mutex_unlock (&(*np)->lock); + set_default_attributes (*np); + if (real_mode != mode) + { + set_faked_attribute (*np, FAKE_MODE); + (*np)->nn_stat.st_mode = mode; + } + } return err; } -- cgit v1.2.3