1*9e564957SAndroid Build Coastguard Workerdiff --git a/Android.patch b/Android.patch 2*9e564957SAndroid Build Coastguard Workernew file mode 100644 3*9e564957SAndroid Build Coastguard Workerindex 0000000..e69de29 4*9e564957SAndroid Build Coastguard Workerdiff --git a/include/fuse_kernel.h b/include/fuse_kernel.h 5*9e564957SAndroid Build Coastguard Workerindex 2971d29..8a45f42 100644 6*9e564957SAndroid Build Coastguard Worker--- a/include/fuse_kernel.h 7*9e564957SAndroid Build Coastguard Worker+++ b/include/fuse_kernel.h 8*9e564957SAndroid Build Coastguard Worker@@ -425,6 +425,9 @@ enum fuse_opcode { 9*9e564957SAndroid Build Coastguard Worker 10*9e564957SAndroid Build Coastguard Worker /* CUSE specific operations */ 11*9e564957SAndroid Build Coastguard Worker CUSE_INIT = 4096, 12*9e564957SAndroid Build Coastguard Worker+ 13*9e564957SAndroid Build Coastguard Worker+ /* Android specific operations */ 14*9e564957SAndroid Build Coastguard Worker+ FUSE_CANONICAL_PATH = 2016, 15*9e564957SAndroid Build Coastguard Worker }; 16*9e564957SAndroid Build Coastguard Worker 17*9e564957SAndroid Build Coastguard Worker enum fuse_notify_code { 18*9e564957SAndroid Build Coastguard Workerdiff --git a/include/fuse_lowlevel.h b/include/fuse_lowlevel.h 19*9e564957SAndroid Build Coastguard Workerindex 18c6363..e81c282 100644 20*9e564957SAndroid Build Coastguard Worker--- a/include/fuse_lowlevel.h 21*9e564957SAndroid Build Coastguard Worker+++ b/include/fuse_lowlevel.h 22*9e564957SAndroid Build Coastguard Worker@@ -317,6 +317,18 @@ struct fuse_lowlevel_ops { 23*9e564957SAndroid Build Coastguard Worker */ 24*9e564957SAndroid Build Coastguard Worker void (*readlink) (fuse_req_t req, fuse_ino_t ino); 25*9e564957SAndroid Build Coastguard Worker 26*9e564957SAndroid Build Coastguard Worker+ /** 27*9e564957SAndroid Build Coastguard Worker+ * Return canonical path for inotify 28*9e564957SAndroid Build Coastguard Worker+ * 29*9e564957SAndroid Build Coastguard Worker+ * Valid replies: 30*9e564957SAndroid Build Coastguard Worker+ * fuse_reply_canonical_path 31*9e564957SAndroid Build Coastguard Worker+ * fuse_reply_err 32*9e564957SAndroid Build Coastguard Worker+ * 33*9e564957SAndroid Build Coastguard Worker+ * @param req request handle 34*9e564957SAndroid Build Coastguard Worker+ * @param ino the inode number 35*9e564957SAndroid Build Coastguard Worker+ */ 36*9e564957SAndroid Build Coastguard Worker+ void (*canonical_path) (fuse_req_t req, fuse_ino_t ino); 37*9e564957SAndroid Build Coastguard Worker+ 38*9e564957SAndroid Build Coastguard Worker /** 39*9e564957SAndroid Build Coastguard Worker * Create file node 40*9e564957SAndroid Build Coastguard Worker * 41*9e564957SAndroid Build Coastguard Worker@@ -1337,6 +1349,18 @@ int fuse_reply_attr(fuse_req_t req, const struct stat *attr, 42*9e564957SAndroid Build Coastguard Worker */ 43*9e564957SAndroid Build Coastguard Worker int fuse_reply_readlink(fuse_req_t req, const char *link); 44*9e564957SAndroid Build Coastguard Worker 45*9e564957SAndroid Build Coastguard Worker+/** 46*9e564957SAndroid Build Coastguard Worker+ * Reply with the canonical path for inotify 47*9e564957SAndroid Build Coastguard Worker+ * 48*9e564957SAndroid Build Coastguard Worker+ * Possible requests: 49*9e564957SAndroid Build Coastguard Worker+ * canonical_path 50*9e564957SAndroid Build Coastguard Worker+ * 51*9e564957SAndroid Build Coastguard Worker+ * @param req request handle 52*9e564957SAndroid Build Coastguard Worker+ * @param path to canonicalize 53*9e564957SAndroid Build Coastguard Worker+ * @return zero for success, -errno for failure to send reply 54*9e564957SAndroid Build Coastguard Worker+ */ 55*9e564957SAndroid Build Coastguard Worker+int fuse_reply_canonical_path(fuse_req_t req, const char *path); 56*9e564957SAndroid Build Coastguard Worker+ 57*9e564957SAndroid Build Coastguard Worker /** 58*9e564957SAndroid Build Coastguard Worker * Reply with open parameters 59*9e564957SAndroid Build Coastguard Worker * 60*9e564957SAndroid Build Coastguard Workerdiff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c 61*9e564957SAndroid Build Coastguard Workerindex f2d7038..334b497 100644 62*9e564957SAndroid Build Coastguard Worker--- a/lib/fuse_lowlevel.c 63*9e564957SAndroid Build Coastguard Worker+++ b/lib/fuse_lowlevel.c 64*9e564957SAndroid Build Coastguard Worker@@ -450,6 +450,11 @@ int fuse_reply_readlink(fuse_req_t req, const char *linkname) 65*9e564957SAndroid Build Coastguard Worker return send_reply_ok(req, linkname, strlen(linkname)); 66*9e564957SAndroid Build Coastguard Worker } 67*9e564957SAndroid Build Coastguard Worker 68*9e564957SAndroid Build Coastguard Worker+int fuse_reply_canonical_path(fuse_req_t req, const char *path) 69*9e564957SAndroid Build Coastguard Worker+{ 70*9e564957SAndroid Build Coastguard Worker+ return send_reply_ok(req, path, strlen(path)); 71*9e564957SAndroid Build Coastguard Worker+} 72*9e564957SAndroid Build Coastguard Worker+ 73*9e564957SAndroid Build Coastguard Worker int fuse_reply_open(fuse_req_t req, const struct fuse_file_info *f) 74*9e564957SAndroid Build Coastguard Worker { 75*9e564957SAndroid Build Coastguard Worker struct fuse_open_out arg; 76*9e564957SAndroid Build Coastguard Worker@@ -1202,6 +1207,16 @@ static void do_readlink(fuse_req_t req, fuse_ino_t nodeid, const void *inarg) 77*9e564957SAndroid Build Coastguard Worker fuse_reply_err(req, ENOSYS); 78*9e564957SAndroid Build Coastguard Worker } 79*9e564957SAndroid Build Coastguard Worker 80*9e564957SAndroid Build Coastguard Worker+static void do_canonical_path(fuse_req_t req, fuse_ino_t nodeid, const void *inarg) 81*9e564957SAndroid Build Coastguard Worker+{ 82*9e564957SAndroid Build Coastguard Worker+ (void) inarg; 83*9e564957SAndroid Build Coastguard Worker+ 84*9e564957SAndroid Build Coastguard Worker+ if (req->se->op.canonical_path) 85*9e564957SAndroid Build Coastguard Worker+ req->se->op.canonical_path(req, nodeid); 86*9e564957SAndroid Build Coastguard Worker+ else 87*9e564957SAndroid Build Coastguard Worker+ fuse_reply_err(req, ENOSYS); 88*9e564957SAndroid Build Coastguard Worker+} 89*9e564957SAndroid Build Coastguard Worker+ 90*9e564957SAndroid Build Coastguard Worker static void do_mknod(fuse_req_t req, fuse_ino_t nodeid, const void *inarg) 91*9e564957SAndroid Build Coastguard Worker { 92*9e564957SAndroid Build Coastguard Worker struct fuse_mknod_in *arg = (struct fuse_mknod_in *) inarg; 93*9e564957SAndroid Build Coastguard Worker@@ -2456,6 +2471,7 @@ static struct { 94*9e564957SAndroid Build Coastguard Worker [FUSE_GETATTR] = { do_getattr, "GETATTR" }, 95*9e564957SAndroid Build Coastguard Worker [FUSE_SETATTR] = { do_setattr, "SETATTR" }, 96*9e564957SAndroid Build Coastguard Worker [FUSE_READLINK] = { do_readlink, "READLINK" }, 97*9e564957SAndroid Build Coastguard Worker+ [FUSE_CANONICAL_PATH] = { do_canonical_path, "CANONICAL_PATH" }, 98*9e564957SAndroid Build Coastguard Worker [FUSE_SYMLINK] = { do_symlink, "SYMLINK" }, 99*9e564957SAndroid Build Coastguard Worker [FUSE_MKNOD] = { do_mknod, "MKNOD" }, 100*9e564957SAndroid Build Coastguard Worker [FUSE_MKDIR] = { do_mkdir, "MKDIR" }, 101*9e564957SAndroid Build Coastguard Workerdiff --git a/lib/fuse_versionscript b/lib/fuse_versionscript 102*9e564957SAndroid Build Coastguard Workerindex d18ba29..4c075a3 100644 103*9e564957SAndroid Build Coastguard Worker--- a/lib/fuse_versionscript 104*9e564957SAndroid Build Coastguard Worker+++ b/lib/fuse_versionscript 105*9e564957SAndroid Build Coastguard Worker@@ -163,6 +163,7 @@ FUSE_3.7 { 106*9e564957SAndroid Build Coastguard Worker global: 107*9e564957SAndroid Build Coastguard Worker fuse_set_log_func; 108*9e564957SAndroid Build Coastguard Worker fuse_log; 109*9e564957SAndroid Build Coastguard Worker+ fuse_reply_canonical_path; 110*9e564957SAndroid Build Coastguard Worker } FUSE_3.3; 111*9e564957SAndroid Build Coastguard Worker 112*9e564957SAndroid Build Coastguard Worker # Local Variables: 113