diff options
author | Marcus Brinkmann <marcus@gnu.org> | 2002-04-20 03:22:47 +0000 |
---|---|---|
committer | Marcus Brinkmann <marcus@gnu.org> | 2002-04-20 03:22:47 +0000 |
commit | c2d4102f8291fb8af9e29eceb378e4ebda87dda0 (patch) | |
tree | 62162dc85c27ffea6dd328a6b66e9678183a880b /ftpfs/ftpfs.c | |
parent | 4326834ca6c1fae1ab7f72f262ec2f4214928dd3 (diff) |
ftpfs/
2002-04-13 Moritz Schulte <moritz@chaosdorf.de>
* ftpfs.c: Include <sys/stat.h>
(main): Stat the underlying node and initialize the root node's
stat information.
* dir.c (ftpfs_refresh_node): If refreshing the root node, simply
use the old stat information.
libftpconn/
2002-04-13 Moritz Schulte <moritz@chaosdorf.de>
* unix.c: Include <libgen.h>.
(struct get_stats_state): New member: searched_name.
(ftp_conn_unix_start_get_stats): Return EINVAL if trying to list
the root node without listing it's content; set searched_name to
the dirname.
(ftp_conn_unix_cont_get_stats): If searching for the list info of
one entry, skip all other entries.
Diffstat (limited to 'ftpfs/ftpfs.c')
-rw-r--r-- | ftpfs/ftpfs.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/ftpfs/ftpfs.c b/ftpfs/ftpfs.c index 4efb5ffb..86fea34c 100644 --- a/ftpfs/ftpfs.c +++ b/ftpfs/ftpfs.c @@ -24,6 +24,7 @@ #include <error.h> #include <argz.h> #include <netdb.h> +#include <sys/stat.h> #include <version.h> @@ -365,7 +366,8 @@ int main (int argc, char **argv) { error_t err; - mach_port_t bootstrap; + mach_port_t bootstrap, underlying_node; + struct stat underlying_stat; const struct argp_child argp_children[] = { {&common_argp}, {&netfs_std_startup_argp}, {0} }; struct argp argp = @@ -395,7 +397,27 @@ main (int argc, char **argv) netfs_root_node = ftpfs->root; - netfs_startup (bootstrap, 0); + underlying_node = netfs_startup (bootstrap, 0); + err = io_stat (underlying_node, &underlying_stat); + if (err) + error (1, err, "cannot stat underling node"); + + /* Initialize stat information of the root node. */ + netfs_root_node->nn_stat = underlying_stat; + netfs_root_node->nn_stat.st_mode = + S_IFDIR | (underlying_stat.st_mode & ~S_IFMT & ~S_ITRANS); + + /* If the underlying node isn't a directory, propagate read permission to + execute permission since we need that for lookups. */ + if (! S_ISDIR (underlying_stat.st_mode)) + { + if (underlying_stat.st_mode & S_IRUSR) + netfs_root_node->nn_stat.st_mode |= S_IXUSR; + if (underlying_stat.st_mode & S_IRGRP) + netfs_root_node->nn_stat.st_mode |= S_IXGRP; + if (underlying_stat.st_mode & S_IROTH) + netfs_root_node->nn_stat.st_mode |= S_IXOTH; + } for (;;) netfs_server_loop (); |