Overview
| Comment: | Changed mount options to remove "direct_io", which breaks mmap and performed additional cleanups |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
1c47ca909719f71b553ec4026175767e |
| User & Date: | rkeene on 2015-10-14 17:47:24 |
| Other Links: | manifest | tags |
Context
|
2015-10-14
| ||
| 17:47 | Updated to be more careful about closing files check-in: b357796ad5 user: rkeene tags: trunk | |
| 17:47 | Changed mount options to remove "direct_io", which breaks mmap and performed additional cleanups check-in: 1c47ca9097 user: rkeene tags: trunk | |
|
2015-07-31
| ||
| 03:02 | Fixed inode lookup and determination of a file being packaged or not check-in: 1e2435553a user: rkeene tags: trunk | |
Changes
Modified appfsd.c from [647fdab61a] to [6b6df68529].
1 | /* | | | 1 2 3 4 5 6 7 8 9 | /* * Copyright (c) 2014, 2015 Roy Keene * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: |
| ︙ | ︙ | |||
530 531 532 533 534 535 536 | } return(ctx->uid); } /* * Determine the GID for the user making the current FUSE filesystem request. | < < | 530 531 532 533 534 535 536 537 538 539 540 541 542 543 |
}
return(ctx->uid);
}
/*
* Determine the GID for the user making the current FUSE filesystem request.
*/
static gid_t appfs_get_fsgid(void) {
struct fuse_context *ctx;
if (!appfs_fuse_started) {
return(getgid());
}
|
| ︙ | ︙ | |||
1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 |
APPFS_DEBUG("error: open failed");
return(errno * -1);
}
fi->fh = fh;
return(0);
}
static int appfs_fuse_close(const char *path, struct fuse_file_info *fi) {
int close_ret;
appfs_get_path_info_cache_rm(path, appfs_get_fsuid());
| > > | 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 |
APPFS_DEBUG("error: open failed");
return(errno * -1);
}
fi->fh = fh;
APPFS_DEBUG("Opened \"%s\" (for \"%s\") with file descriptor %i", real_path, path, fh);
return(0);
}
static int appfs_fuse_close(const char *path, struct fuse_file_info *fi) {
int close_ret;
appfs_get_path_info_cache_rm(path, appfs_get_fsuid());
|
| ︙ | ︙ | |||
1438 1439 1440 1441 1442 1443 1444 |
return(0);
}
static int appfs_fuse_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) {
ssize_t read_ret;
int retval;
| | | 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 |
return(0);
}
static int appfs_fuse_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) {
ssize_t read_ret;
int retval;
APPFS_DEBUG("Enter (path = %s, buf, size = %lli, offset = %lli, fd = %lli)", path, (long long) size, (long long) offset, (long long) fi->fh);
retval = 0;
while (size != 0) {
read_ret = pread(fi->fh, buf, size, offset);
if (read_ret < 0) {
|
| ︙ | ︙ | |||
2024 2025 2026 2027 2028 2029 2030 | #else appfs_threaded_tcl = 0; #endif /** ** Add FUSE arguments which we always supply **/ | | | 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 |
#else
appfs_threaded_tcl = 0;
#endif
/**
** Add FUSE arguments which we always supply
**/
fuse_opt_add_arg(args, "-odefault_permissions,fsname=appfs,subtype=appfsd,use_ino,entry_timeout=0,attr_timeout=0,big_writes,intr,hard_remove");
if (getuid() == 0) {
fuse_opt_parse(args, NULL, NULL, NULL);
fuse_opt_add_arg(args, "-oallow_other");
/*
* This should generally be avoided, but if there are security
|
| ︙ | ︙ | |||
2067 2068 2069 2070 2071 2072 2073 |
APPFS_DEBUG("Passing option to FUSE: -s");
fuse_opt_parse(args, NULL, NULL, NULL);
fuse_opt_add_arg(args, "-s");
appfs_threaded_tcl = 0;
} else if (strcmp(optstr, "allow_other") == 0) {
| | | 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 |
APPFS_DEBUG("Passing option to FUSE: -s");
fuse_opt_parse(args, NULL, NULL, NULL);
fuse_opt_add_arg(args, "-s");
appfs_threaded_tcl = 0;
} else if (strcmp(optstr, "allow_other") == 0) {
APPFS_DEBUG("Passing option to FUSE: -o allow_other");
fuse_opt_parse(args, NULL, NULL, NULL);
fuse_opt_add_arg(args, "-oallow_other");
} else if (strcmp(optstr, "rw") == 0) {
/* Ignored */
} else {
fprintf(stderr, "appfsd: invalid option: \"-o %s\"\n", optstr);
|
| ︙ | ︙ |