Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e33c5ee authored by bigbiff bigbiff's avatar bigbiff bigbiff Committed by Ethan Yonker
Browse files

update exfat from current head

Change-Id: I7d93474296612fda1dde23f6e8690668d6880e27
parent 8dfa7778
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
	Prints detailed information about exFAT volume.

	Free exFAT implementation.
	Copyright (C) 2011-2013  Andrew Nayenko
	Copyright (C) 2011-2014  Andrew Nayenko

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
@@ -85,13 +85,13 @@ static int dump_sb(const char* spec)
	if (exfat_read(dev, &sb, sizeof(struct exfat_super_block)) < 0)
	{
		exfat_close(dev);
		exfat_error("failed to read from `%s'", spec);
		exfat_error("failed to read from '%s'", spec);
		return 1;
	}
	if (memcmp(sb.oem_name, "EXFAT   ", sizeof(sb.oem_name)) != 0)
	{
		exfat_close(dev);
		exfat_error("exFAT file system is not found on `%s'", spec);
		exfat_error("exFAT file system is not found on '%s'", spec);
		return 1;
	}

@@ -106,7 +106,7 @@ static int dump_sb(const char* spec)

static void dump_sectors(struct exfat* ef)
{
	off_t a = 0, b = 0;
	off64_t a = 0, b = 0;

	printf("Used sectors ");
	while (exfat_find_used_sectors(ef, &a, &b) == 0)
@@ -167,7 +167,7 @@ int main(int argc, char* argv[])
			used_sectors = true;
			break;
		case 'V':
			puts("Copyright (C) 2011-2013  Andrew Nayenko");
			puts("Copyright (C) 2011-2014  Andrew Nayenko");
			return 0;
		default:
			usage(argv[0]);
+43 −12
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
	FUSE-based exFAT implementation. Requires FUSE 2.6 or later.

	Free exFAT implementation.
	Copyright (C) 2010-2013  Andrew Nayenko
	Copyright (C) 2010-2014  Andrew Nayenko

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
@@ -83,6 +83,13 @@ static int fuse_exfat_truncate(const char* path, off64_t size)
		return rc;

	rc = exfat_truncate(&ef, node, size, true);
	if (rc != 0)
	{
		exfat_flush_node(&ef, node);	/* ignore return code */
		exfat_put_node(&ef, node);
		return rc;
	}
	rc = exfat_flush_node(&ef, node);
	exfat_put_node(&ef, node);
	return rc;
}
@@ -104,7 +111,7 @@ static int fuse_exfat_readdir(const char* path, void* buffer,
	if (!(parent->flags & EXFAT_ATTRIB_DIR))
	{
		exfat_put_node(&ef, parent);
		exfat_error("`%s' is not a directory (0x%x)", path, parent->flags);
		exfat_error("'%s' is not a directory (0x%x)", path, parent->flags);
		return -ENOTDIR;
	}

@@ -115,7 +122,7 @@ static int fuse_exfat_readdir(const char* path, void* buffer,
	if (rc != 0)
	{
		exfat_put_node(&ef, parent);
		exfat_error("failed to open directory `%s'", path);
		exfat_error("failed to open directory '%s'", path);
		return rc;
	}
	while ((node = exfat_readdir(&ef, &it)))
@@ -149,9 +156,28 @@ static int fuse_exfat_open(const char* path, struct fuse_file_info* fi)

static int fuse_exfat_release(const char* path, struct fuse_file_info* fi)
{
	/*
	   This handler is called by FUSE on close() syscall. If the FUSE
	   implementation does not call flush handler, we will flush node here.
	   But in this case we will not be able to return an error to the caller.
	   See fuse_exfat_flush() below.
	*/
	exfat_debug("[%s] %s", __func__, path);
 	exfat_flush_node(&ef, get_node(fi));
	exfat_put_node(&ef, get_node(fi));
	return 0;
	return 0; /* FUSE ignores this return value */
}

static int fuse_exfat_flush(const char* path, struct fuse_file_info* fi)
{
	/*
	   This handler may be called by FUSE on close() syscall. FUSE also deals
	   with removals of open files, so we don't free clusters on close but
	   only on rmdir and unlink. If the FUSE implementation does not call this
	   handler we will flush node on release. See fuse_exfat_relase() above.
	*/
	exfat_debug("[%s] %s", __func__, path);
	return exfat_flush_node(&ef, get_node(fi));
}

static int fuse_exfat_fsync(const char* path, int datasync,
@@ -160,9 +186,6 @@ static int fuse_exfat_fsync(const char* path, int datasync,
	int rc;

	exfat_debug("[%s] %s", __func__, path);
	rc = exfat_flush_node(&ef, get_node(fi));
	if (rc != 0)
		return rc;
	rc = exfat_flush(&ef);
	if (rc != 0)
		return rc;
@@ -206,7 +229,9 @@ static int fuse_exfat_unlink(const char* path)

	rc = exfat_unlink(&ef, node);
	exfat_put_node(&ef, node);
	if (rc != 0)
		return rc;
	return exfat_cleanup_node(&ef, node);
}

static int fuse_exfat_rmdir(const char* path)
@@ -222,7 +247,9 @@ static int fuse_exfat_rmdir(const char* path)

	rc = exfat_rmdir(&ef, node);
	exfat_put_node(&ef, node);
	if (rc != 0)
		return rc;
	return exfat_cleanup_node(&ef, node);
}

static int fuse_exfat_mknod(const char* path, mode_t mode, dev_t dev)
@@ -255,8 +282,9 @@ static int fuse_exfat_utimens(const char* path, const struct timespec tv[2])
		return rc;

	exfat_utimes(node, tv);
	rc = exfat_flush_node(&ef, node);
	exfat_put_node(&ef, node);
	return 0;
	return rc;
}

static int fuse_exfat_chmod(const char* path, mode_t mode)
@@ -295,7 +323,7 @@ static int fuse_exfat_statfs(const char* path, struct statvfs* sfs)
	   b) no such thing as inode;
	   So here we assume that inode = cluster.
	*/
	sfs->f_files = (sfs->f_blocks - sfs->f_bfree) >> ef.sb->spc_bits;
	sfs->f_files = le32_to_cpu(ef.sb->cluster_count);
	sfs->f_favail = sfs->f_bfree >> ef.sb->spc_bits;
	sfs->f_ffree = sfs->f_bavail;

@@ -330,6 +358,7 @@ static struct fuse_operations fuse_exfat_ops =
	.readdir	= fuse_exfat_readdir,
	.open		= fuse_exfat_open,
	.release	= fuse_exfat_release,
	.flush		= fuse_exfat_flush,
	.fsync		= fuse_exfat_fsync,
	.fsyncdir	= fuse_exfat_fsync,
	.read		= fuse_exfat_read,
@@ -350,6 +379,7 @@ static struct fuse_operations fuse_exfat_ops =
static char* add_option(char* options, const char* name, const char* value)
{
	size_t size;
	char* optionsf = options;

	if (value)
		size = strlen(options) + strlen(name) + strlen(value) + 3;
@@ -359,6 +389,7 @@ static char* add_option(char* options, const char* name, const char* value)
	options = realloc(options, size);
	if (options == NULL)
	{
		free(optionsf);
		exfat_error("failed to reallocate options string");
		return NULL;
	}
@@ -454,7 +485,7 @@ int main(int argc, char* argv[])
			break;
		case 'V':
			free(mount_options);
			puts("Copyright (C) 2010-2013  Andrew Nayenko");
			puts("Copyright (C) 2010-2014  Andrew Nayenko");
			return 0;
		case 'v':
			break;
+10 −7
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
	exFAT file system checker.

	Free exFAT implementation.
	Copyright (C) 2011-2013  Andrew Nayenko
	Copyright (C) 2011-2014  Andrew Nayenko

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
@@ -45,7 +45,7 @@ static int nodeck(struct exfat* ef, struct exfat_node* node)
			char name[UTF8_BYTES(EXFAT_NAME_MAX) + 1];

			exfat_get_name(node, name, sizeof(name) - 1);
			exfat_error("file `%s' has invalid cluster 0x%x", name, c);
			exfat_error("file '%s' has invalid cluster 0x%x", name, c);
			rc = 1;
			break;
		}
@@ -54,7 +54,7 @@ static int nodeck(struct exfat* ef, struct exfat_node* node)
			char name[UTF8_BYTES(EXFAT_NAME_MAX) + 1];

			exfat_get_name(node, name, sizeof(name) - 1);
			exfat_error("cluster 0x%x of file `%s' is not allocated", c, name);
			exfat_error("cluster 0x%x of file '%s' is not allocated", c, name);
			rc = 1;
		}
		c = exfat_next_cluster(ef, node, c);
@@ -72,16 +72,20 @@ static void dirck(struct exfat* ef, const char* path)
	char* entry_path;

	if (exfat_lookup(ef, &parent, path) != 0)
		exfat_bug("directory `%s' is not found", path);
		exfat_bug("directory '%s' is not found", path);
	if (!(parent->flags & EXFAT_ATTRIB_DIR))
		exfat_bug("`%s' is not a directory (0x%x)", path, parent->flags);
		exfat_bug("'%s' is not a directory (0x%x)", path, parent->flags);
	if (nodeck(ef, parent) != 0)
	{
		exfat_put_node(ef, parent);
		return;
	}

	path_length = strlen(path);
	entry_path = malloc(path_length + 1 + UTF8_BYTES(EXFAT_NAME_MAX) + 1);
	if (entry_path == NULL)
	{
		exfat_put_node(ef, parent);
		exfat_error("out of memory");
		return;
	}
@@ -93,7 +97,6 @@ static void dirck(struct exfat* ef, const char* path)
	{
		free(entry_path);
		exfat_put_node(ef, parent);
		exfat_error("failed to open directory `%s'", path);
		return;
	}
	while ((node = exfat_readdir(ef, &it)))
@@ -146,7 +149,7 @@ int main(int argc, char* argv[])
		switch (opt)
		{
		case 'V':
			puts("Copyright (C) 2011-2013  Andrew Nayenko");
			puts("Copyright (C) 2011-2014  Andrew Nayenko");
			return 0;
		default:
			usage(argv[0]);
+2 −2
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
	Prints or changes exFAT volume label.

	Free exFAT implementation.
	Copyright (C) 2011-2013  Andrew Nayenko
	Copyright (C) 2011-2014  Andrew Nayenko

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
@@ -35,7 +35,7 @@ int main(int argc, char* argv[])
		{
			printf("exfatlabel %u.%u.%u\n", EXFAT_VERSION_MAJOR,
					EXFAT_VERSION_MINOR, EXFAT_VERSION_PATCH);
			puts("Copyright (C) 2011-2013  Andrew Nayenko");
			puts("Copyright (C) 2011-2014  Andrew Nayenko");
			return 0;
		}

exfat/libexfat/COPYING

deleted100644 → 0
+0 −339

File deleted.

Preview size limit exceeded, changes collapsed.

Loading