Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to mount the Windows-formatted NTFS U disk #77

Open
zhjun822 opened this issue Apr 10, 2023 · 0 comments
Open

Failed to mount the Windows-formatted NTFS U disk #77

zhjun822 opened this issue Apr 10, 2023 · 0 comments

Comments

@zhjun822
Copy link

I tried to mount a Windows formatted NTFS U disk using NTFS-3G in android environment. However, the mounting fails,and the error information is "ntfs-3g-mount: mount failed: No such file or directory".

When i tried to modify the source code as follows(In the fusermount.c file, I replace '$' in source with ','. And In the ntfs-3g_common.c file, I replace ',' in popts->device with '$'.), it can mount the Windows-formatted NTFS U disk successfully. I wonder if this problem is a bug or some mount parameters need to be set?

diff --git a/third_party/fs/ntfs-3g-2022.10.3/libfuse-lite/fusermount.c b/third_party/fs/ntfs-3g-2022.10.3/libfuse-lite/fusermount.c
index 680fee1c..2502ea0d 100644
--- a/third_party/fs/ntfs-3g-2022.10.3/libfuse-lite/fusermount.c
+++ b/third_party/fs/ntfs-3g-2022.10.3/libfuse-lite/fusermount.c
@@ -418,9 +418,13 @@ static int do_mount(const char *mnt, char **typep, mode_t rootmode,

 strcpy(type, blkdev ? "fuseblk" : "fuse");
  • if (fsname)
  • if (fsname) {
    strcpy(source, fsname);
  • else
  •    int len;
    
  •    for (len = 0; source[len] && source[len] != '$'; len++);
    
  •    if (source[len] == '$')
    
  •        source[len] = ',';
    
  • } else
    strcpy(source, dev);

    if (restore_privs())
    diff --git a/third_party/fs/ntfs-3g-2022.10.3/src/ntfs-3g_common.c b/third_party/fs/ntfs-3g-2022.10.3/src/ntfs-3g_common.c
    index 29021dfc..083aea72 100644
    --- a/third_party/fs/ntfs-3g-2022.10.3/src/ntfs-3g_common.c
    +++ b/third_party/fs/ntfs-3g-2022.10.3/src/ntfs-3g_common.c
    @@ -239,7 +239,7 @@ static int missing_option_value(char *val, const char *s)
    char *parse_mount_options(ntfs_fuse_context_t *ctx,
    const struct ntfs_options *popts, BOOL low_fuse)
    {

  •   char *options, *s, *opt, *val, *ret = NULL;
    
  •   char *options, *s, *opt, *val, *ret = NULL, *fsbuf;
      const char *orig_opts = popts->options;
      BOOL no_def_opts = FALSE;
      int default_permissions = 0;
    

@@ -247,6 +247,7 @@ char *parse_mount_options(ntfs_fuse_context_t *ctx,
int acl = 0;
int want_permissions = 0;
int intarg;

  •   int len;
      const struct DEFOPTION *poptl;
    
      ctx->secure_flags = 0;
    

@@ -564,8 +565,16 @@ char *parse_mount_options(ntfs_fuse_context_t *ctx,

    if (ntfs_strappend(&ret, "fsname="))
            goto err_exit;
  •   if (ntfs_strappend(&ret, popts->device))
    
  •   fsbuf = (char *) malloc(strlen(popts->device)+1);
    
  •   strcpy(fsbuf, popts->device);
    
  •   for (len = 0; fsbuf[len] && fsbuf[len] != ','; len++);
    
  • if (fsbuf[len] == ',')
  •    fsbuf[len] = '$';
    
  •   ntfs_log_error("fsname=[%s][%s].\n", popts->device, fsbuf);
    
  •   if (ntfs_strappend(&ret, fsbuf))
              goto err_exit;
    
  •   free(fsbuf);
    
  •   fsbuf = NULL;
      if (permissions && !acl)
              ctx->secure_flags |= (1 << SECURITY_DEFAULT);
      if (acl)
    

@@ -581,6 +590,8 @@ exit:
free(options);
return ret;
err_exit:

  •   free(fsbuf);
    
  •   fsbuf = NULL;
      free(ret);
      ret = NULL;
      goto exit;
    

Anyone with similar issue?

Best regards

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant