734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
|
734
735
736
737
738
739
740
741
742
743
744
745
746
747
|
-
-
|
memset(stbuf, 0, sizeof(struct stat));
stbuf->st_mtime = pathinfo.time;
stbuf->st_ctime = pathinfo.time;
stbuf->st_atime = pathinfo.time;
stbuf->st_ino = pathinfo.inode;
stbuf->st_mode = 0;
stbuf->st_uid = 0;
stbuf->st_gid = 0;
switch (pathinfo.type) {
case APPFS_PATHTYPE_DIRECTORY:
stbuf->st_mode = S_IFDIR | 0555;
stbuf->st_nlink = 2 + pathinfo.typeinfo.dir.childcount;
break;
case APPFS_PATHTYPE_FILE:
|
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
|
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
|
+
+
-
+
|
case APPFS_PATHTYPE_INVALID:
retval = -ENOENT;
break;
}
if (pathinfo.packaged) {
stbuf->st_uid = appfs_get_fsuid();
stbuf->st_gid = appfs_get_fsgid();
stbuf->st_mode |= 0222;
stbuf->st_mode |= 0200;
}
return(retval);
}
static int appfs_fuse_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) {
Tcl_Interp *interp;
|
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
|
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
|
-
+
|
}
Tcl_DeleteInterp(test_interp);
/*
* Add FUSE arguments which we always supply
*/
fuse_opt_parse(&args, NULL, NULL, appfs_fuse_opt_cb);
fuse_opt_add_arg(&args, "-odefault_permissions,fsname=appfs,subtype=appfsd,use_ino,kernel_cache,entry_timeout=60,attr_timeout=3600,intr,big_writes");
fuse_opt_add_arg(&args, "-odefault_permissions,fsname=appfs,subtype=appfsd,use_ino,kernel_cache,entry_timeout=0,attr_timeout=0,intr,big_writes,hard_remove");
if (getuid() == 0) {
fuse_opt_parse(&args, NULL, NULL, NULL);
fuse_opt_add_arg(&args, "-oallow_other");
}
/*
|