Overview
| Comment: | Updated to indicate only that packaged files are writable | 
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive | 
| Timelines: | family | ancestors | descendants | both | trunk | 
| Files: | files | file ages | folders | 
| SHA1: | 97e72202db38a1a483bb34a06b96de16 | 
| User & Date: | rkeene on 2014-11-06 02:49:28 | 
| Other Links: | manifest | tags | 
Context
| 2014-11-06 | ||
| 03:05 | Updated to use package name instead of hash for looking up extra files check-in: 98449bcf3e user: rkeene tags: trunk | |
| 02:49 | Updated to indicate only that packaged files are writable check-in: 97e72202db user: rkeene tags: trunk | |
| 2014-11-05 | ||
| 21:41 | Fixed cleanup issue which was causing excessive lookups check-in: cc5a68a6de user: rkeene tags: trunk | |
Changes
Modified appfsd.c from [72840611b5] to [430cff4a7a].
| ︙ | ︙ | |||
| 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 
	char name[256];
};
struct appfs_pathinfo {
	appfs_pathtype_t type;
	time_t time;
	char hostname[256];
	unsigned long long inode;
	union {
		struct {
			int childcount;
		} dir;
		struct {
			int executable;
 | > | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 
	char name[256];
};
struct appfs_pathinfo {
	appfs_pathtype_t type;
	time_t time;
	char hostname[256];
	int packaged;
	unsigned long long inode;
	union {
		struct {
			int childcount;
		} dir;
		struct {
			int executable;
 | 
| ︙ | ︙ | |||
| 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 | 
	char *hostname, *packagename, *os_cpuArch, *os, *cpuArch, *version;
	char *path, *path_s;
	char *package_hash;
	char *sql;
	int files_count;
	int fileinfo_ret, retval;
	if (children) {
		*children = NULL;
	}
	if (_path == NULL) {
		return(-ENOENT);
	}
	if (_path[0] != '/') {
		return(-ENOENT);
	}
	if (_path[1] == '\0') {
		/* Request for the root directory */
		pathinfo->hostname[0] = '\0';
		pathinfo->inode = 1;
		sql = sqlite3_mprintf("SELECT DISTINCT hostname FROM packages;");
 | > > > > > | 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 | 
	char *hostname, *packagename, *os_cpuArch, *os, *cpuArch, *version;
	char *path, *path_s;
	char *package_hash;
	char *sql;
	int files_count;
	int fileinfo_ret, retval;
	/* Initialize return */
	if (children) {
		*children = NULL;
	}
	/* Verify that this is a valid request */
	if (_path == NULL) {
		return(-ENOENT);
	}
	if (_path[0] != '/') {
		return(-ENOENT);
	}
	/* Note that this is not a "real" directory from a package */
	pathinfo->packaged = 0;
	if (_path[1] == '\0') {
		/* Request for the root directory */
		pathinfo->hostname[0] = '\0';
		pathinfo->inode = 1;
		sql = sqlite3_mprintf("SELECT DISTINCT hostname FROM packages;");
 | 
| ︙ | ︙ | |||
| 874 875 876 877 878 879 880 881 882 883 884 885 886 887 | 
		path = "";
	} else {
		*path = '\0';
		path++;
	}
	/* Request for a file in a specific package */
	APPFS_DEBUG("Requesting information for hostname = %s, package = %s, os = %s, cpuArch = %s, version = %s, path = %s", 
		hostname, packagename, os, cpuArch, version, path
	);
	package_hash = appfs_lookup_package_hash(hostname, packagename, os, cpuArch, version);
	if (package_hash == NULL) {
		free(path_s);
 | > | 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 | 
		path = "";
	} else {
		*path = '\0';
		path++;
	}
	/* Request for a file in a specific package */
	pathinfo->packaged = 1;
	APPFS_DEBUG("Requesting information for hostname = %s, package = %s, os = %s, cpuArch = %s, version = %s, path = %s", 
		hostname, packagename, os, cpuArch, version, path
	);
	package_hash = appfs_lookup_package_hash(hostname, packagename, os, cpuArch, version);
	if (package_hash == NULL) {
		free(path_s);
 | 
| ︙ | ︙ | |||
| 993 994 995 996 997 998 999 | break; case APPFS_PATHTYPE_INVALID: res = -EIO; break; } | > | | > | 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 | 
			break;
		case APPFS_PATHTYPE_INVALID:
			res = -EIO;
			break;
	}
	if (pathinfo.packaged) {
		if (globalThread.options.writable) {
			stbuf->st_mode |= 0222;
		}
	}
	return res;
}
static int appfs_fuse_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) {
	struct appfs_pathinfo pathinfo;
 | 
| ︙ | ︙ |