]> git.pld-linux.org Git - packages/fuse-exfat.git/commitdiff
- rel 2; tiny fixes from svn auto/th/fuse-exfat-1.0.1-2
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 5 May 2013 08:38:20 +0000 (10:38 +0200)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 5 May 2013 08:38:20 +0000 (10:38 +0200)
exfat-svn-fuse.patch [new file with mode: 0644]
exfat-svn-libexfat.patch [new file with mode: 0644]
fuse-exfat.spec

diff --git a/exfat-svn-fuse.patch b/exfat-svn-fuse.patch
new file mode 100644 (file)
index 0000000..bf0d195
--- /dev/null
@@ -0,0 +1,212 @@
+Index: main.c
+===================================================================
+--- main.c     (wersja 342)
++++ main.c     (wersja 353)
+@@ -80,7 +80,7 @@
+       if (rc != 0)
+               return rc;
+-      rc = exfat_truncate(&ef, node, size);
++      rc = exfat_truncate(&ef, node, size, true);
+       exfat_put_node(&ef, node);
+       return rc;
+ }
+@@ -242,15 +242,25 @@
+       return 0;
+ }
+-#ifdef __APPLE__
+ static int fuse_exfat_chmod(const char* path, mode_t mode)
+ {
++      const mode_t VALID_MODE_MASK = S_IFREG | S_IFDIR |
++                      S_IRWXU | S_IRWXG | S_IRWXO;
++
+       exfat_debug("[%s] %s 0%ho", __func__, path, mode);
+-      /* make OS X utilities happy */
++      if (mode & ~VALID_MODE_MASK)
++              return -EPERM;
+       return 0;
+ }
+-#endif
++static int fuse_exfat_chown(const char* path, uid_t uid, gid_t gid)
++{
++      exfat_debug("[%s] %s %u:%u", __func__, path, uid, gid);
++      if (uid != ef.uid || gid != ef.gid)
++              return -EPERM;
++      return 0;
++}
++
+ static int fuse_exfat_statfs(const char* path, struct statvfs* sfs)
+ {
+       exfat_debug("[%s]", __func__);
+@@ -292,7 +302,7 @@
+ static void usage(const char* prog)
+ {
+-      fprintf(stderr, "Usage: %s [-d] [-o options] [-v] <device> <dir>\n", prog);
++      fprintf(stderr, "Usage: %s [-d] [-o options] [-V] <device> <dir>\n", prog);
+       exit(1);
+ }
+@@ -311,9 +321,8 @@
+       .mkdir          = fuse_exfat_mkdir,
+       .rename         = fuse_exfat_rename,
+       .utimens        = fuse_exfat_utimens,
+-#ifdef __APPLE__
+       .chmod          = fuse_exfat_chmod,
+-#endif
++      .chown          = fuse_exfat_chown,
+       .statfs         = fuse_exfat_statfs,
+       .init           = fuse_exfat_init,
+       .destroy        = fuse_exfat_destroy,
+@@ -344,21 +353,6 @@
+       return options;
+ }
+-static char* add_fsname_option(char* options, const char* spec)
+-{
+-      char* spec_abs = realpath(spec, NULL);
+-
+-      if (spec_abs == NULL)
+-      {
+-              free(options);
+-              exfat_error("failed to get absolute path for `%s'", spec);
+-              return NULL;
+-      }
+-      options = add_option(options, "fsname", spec_abs);
+-      free(spec_abs);
+-      return options;
+-}
+-
+ static char* add_user_option(char* options)
+ {
+       struct passwd* pw;
+@@ -390,7 +384,7 @@
+ static char* add_fuse_options(char* options, const char* spec)
+ {
+-      options = add_fsname_option(options, spec);
++      options = add_option(options, "fsname", spec);
+       if (options == NULL)
+               return NULL;
+       options = add_user_option(options);
+@@ -413,7 +407,7 @@
+       int debug = 0;
+       struct fuse_chan* fc = NULL;
+       struct fuse* fh = NULL;
+-      char** pp;
++      int opt;
+       printf("FUSE exfat %u.%u.%u\n",
+                       EXFAT_VERSION_MAJOR, EXFAT_VERSION_MINOR, EXFAT_VERSION_PATCH);
+@@ -425,40 +419,39 @@
+               return 1;
+       }
+-      for (pp = argv + 1; *pp; pp++)
++      while ((opt = getopt(argc, argv, "dno:Vv")) != -1)
+       {
+-              if (strcmp(*pp, "-o") == 0)
++              switch (opt)
+               {
+-                      pp++;
+-                      if (*pp == NULL)
+-                              usage(argv[0]);
+-                      mount_options = add_option(mount_options, *pp, NULL);
++              case 'd':
++                      debug = 1;
++                      break;
++              case 'n':
++                      break;
++              case 'o':
++                      mount_options = add_option(mount_options, optarg, NULL);
+                       if (mount_options == NULL)
+                               return 1;
+-              }
+-              else if (strcmp(*pp, "-d") == 0)
+-                      debug = 1;
+-              else if (strcmp(*pp, "-v") == 0)
+-              {
++                      break;
++              case 'V':
+                       free(mount_options);
+                       puts("Copyright (C) 2010-2013  Andrew Nayenko");
+                       return 0;
+-              }
+-              else if (spec == NULL)
+-                      spec = *pp;
+-              else if (mount_point == NULL)
+-                      mount_point = *pp;
+-              else
+-              {
++              case 'v':
++                      break;
++              default:
+                       free(mount_options);
+                       usage(argv[0]);
++                      break;
+               }
+       }
+-      if (spec == NULL || mount_point == NULL)
++      if (argc - optind != 2)
+       {
+               free(mount_options);
+               usage(argv[0]);
+       }
++      spec = argv[optind];
++      mount_point = argv[optind + 1];
+       if (exfat_mount(&ef, spec, mount_options) != 0)
+       {
+Index: mount.exfat-fuse.8
+===================================================================
+--- mount.exfat-fuse.8 (wersja 342)
++++ mount.exfat-fuse.8 (wersja 353)
+@@ -9,10 +9,16 @@
+ .B \-d
+ ]
+ [
++.B \-n
++]
++[
+ .B \-o
+ .I options
+ ]
+ [
++.B \-V
++]
++[
+ .B \-v
+ ]
+ .I device dir
+@@ -21,7 +27,7 @@
+ .B mount.exfat-fuse
+ is a free exFAT file system implementation with write support. exFAT is a
+ simple file system created by Microsoft. It is intended to replace FAT32
+-removing some of it's limitations. exFAT is a standard FS for SDXC memory
++removing some of its limitations. exFAT is a standard FS for SDXC memory
+ cards.
+ .SH COMMAND LINE OPTIONS
+@@ -30,13 +36,19 @@
+ .BI \-d
+ Enable debug logging and do not detach from shell.
+ .TP
++.BI \-n
++Ignored.
++.TP
+ .BI \-o " options"
+ File system specific options. For more details see
+ .B FILE SYSTEM OPTIONS
+ section below.
+ .TP
++.BI \-V
++Print version and copyright.
++.TP
+ .BI \-v
+-Print version and copyright.
++Ignored.
+ .SH FILE SYSTEM OPTIONS
+ .TP
diff --git a/exfat-svn-libexfat.patch b/exfat-svn-libexfat.patch
new file mode 100644 (file)
index 0000000..4ebe69f
--- /dev/null
@@ -0,0 +1,122 @@
+Index: cluster.c
+===================================================================
+--- cluster.c  (wersja 342)
++++ cluster.c  (wersja 353)
+@@ -134,7 +134,7 @@
+       ef->cmap.dirty = false;
+ }
+-static void set_next_cluster(const struct exfat* ef, int contiguous,
++static void set_next_cluster(const struct exfat* ef, bool contiguous,
+               cluster_t current, cluster_t next)
+ {
+       off_t fat_offset;
+@@ -187,7 +187,7 @@
+       cluster_t c;
+       for (c = first; c < last; c++)
+-              set_next_cluster(ef, 0, c, c + 1);
++              set_next_cluster(ef, false, c, c + 1);
+ }
+ static int shrink_file(struct exfat* ef, struct exfat_node* node,
+@@ -344,7 +344,8 @@
+       return 0;
+ }
+-int exfat_truncate(struct exfat* ef, struct exfat_node* node, uint64_t size)
++int exfat_truncate(struct exfat* ef, struct exfat_node* node, uint64_t size,
++              bool erase)
+ {
+       uint32_t c1 = bytes2clusters(ef, node->size);
+       uint32_t c2 = bytes2clusters(ef, size);
+@@ -364,9 +365,12 @@
+       if (rc != 0)
+               return rc;
+-      rc = erase_range(ef, node, node->size, size);
+-      if (rc != 0)
+-              return rc;
++      if (erase)
++      {
++              rc = erase_range(ef, node, node->size, size);
++              if (rc != 0)
++                      return rc;
++      }
+       exfat_update_mtime(node);
+       node->size = size;
+Index: node.c
+===================================================================
+--- node.c     (wersja 342)
++++ node.c     (wersja 353)
+@@ -56,7 +56,7 @@
+               if (node->flags & EXFAT_ATTRIB_UNLINKED)
+               {
+                       /* free all clusters and node structure itself */
+-                      exfat_truncate(ef, node, 0);
++                      exfat_truncate(ef, node, 0, true);
+                       free(node);
+               }
+               if (ef->cmap.dirty)
+@@ -627,7 +627,7 @@
+               new_size = CLUSTER_SIZE(*ef->sb);
+       if (new_size == dir->size)
+               return 0;
+-      rc = exfat_truncate(ef, dir, new_size);
++      rc = exfat_truncate(ef, dir, new_size, true);
+       if (rc != 0)
+               return rc;
+       return 0;
+@@ -673,7 +673,7 @@
+ {
+       return exfat_truncate(ef, dir,
+                       DIV_ROUND_UP(asize + difference, CLUSTER_SIZE(*ef->sb))
+-                              * CLUSTER_SIZE(*ef->sb));
++                              * CLUSTER_SIZE(*ef->sb), true);
+ }
+ static int find_slot(struct exfat* ef, struct exfat_node* dir,
+@@ -826,7 +826,7 @@
+       if (rc != 0)
+               return 0;
+       /* directories always have at least one cluster */
+-      rc = exfat_truncate(ef, node, CLUSTER_SIZE(*ef->sb));
++      rc = exfat_truncate(ef, node, CLUSTER_SIZE(*ef->sb), true);
+       if (rc != 0)
+       {
+               delete(ef, node);
+Index: io.c
+===================================================================
+--- io.c       (wersja 342)
++++ io.c       (wersja 353)
+@@ -351,9 +351,12 @@
+       const char* bufp = buffer;
+       off_t lsize, loffset, remainder;
+-      if (offset + size > node->size)
+-              if (exfat_truncate(ef, node, offset + size) != 0)
+-                      return -1;
++      if (offset > node->size)
++              if (exfat_truncate(ef, node, offset, true) != 0)
++                      return -1;
++      if (offset + size > node->size)
++              if (exfat_truncate(ef, node, offset + size, false) != 0)
++                      return -1;
+       if (size == 0)
+               return 0;
+Index: exfat.h
+===================================================================
+--- exfat.h    (wersja 342)
++++ exfat.h    (wersja 353)
+@@ -164,7 +164,8 @@
+ cluster_t exfat_advance_cluster(const struct exfat* ef,
+               struct exfat_node* node, uint32_t count);
+ void exfat_flush_cmap(struct exfat* ef);
+-int exfat_truncate(struct exfat* ef, struct exfat_node* node, uint64_t size);
++int exfat_truncate(struct exfat* ef, struct exfat_node* node, uint64_t size,
++              bool erase);
+ uint32_t exfat_count_free_clusters(const struct exfat* ef);
+ int exfat_find_used_sectors(const struct exfat* ef, off_t* a, off_t* b);
index 84a5c9c92f4fef9840276df6da4a2a043683d1d4..08da885185ee2341001296345126ab5275c6689a 100644 (file)
@@ -2,12 +2,16 @@ Summary:      FUSE module to access exFAT filesystem
 Summary(pl.UTF-8):     Moduł FUSE pozwalający na dostęp do systemu plików exFAT
 Name:          fuse-exfat
 Version:       1.0.1
-Release:       1
+Release:       2
 License:       GPL v3+
 Group:         Applications/System
 #Source0Download: http://code.google.com/p/exfat/downloads/list
 Source0:       http://exfat.googlecode.com/files/%{name}-%{version}.tar.gz
 # Source0-md5: 7988a5111841593231f20af22153362d
+# svn diff -r342:HEAD http://exfat.googlecode.com/svn/trunk/fuse > exfat-svn-fuse.patch
+Patch0:                exfat-svn-fuse.patch
+# svn diff -r342:HEAD http://exfat.googlecode.com/svn/trunk/libexfat > exfat-svn-libexfat.patch
+Patch1:                exfat-svn-libexfat.patch
 URL:           http://code.google.com/p/exfat/
 BuildRequires: libfuse-devel >= 2.6
 BuildRequires: rpmbuild(macros) >= 1.385
@@ -26,6 +30,10 @@ moduł FUSE.
 
 %prep
 %setup -q
+cd fuse
+%patch0 -p0
+cd ../libexfat
+%patch1 -p0
 
 %build
 %scons
This page took 0.119724 seconds and 4 git commands to generate.