Merge branch 'next' into debian
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 3575d49..567f276 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,3 +1,58 @@
+E2fsprogs 1.43.4-WIP (January 17, 2017) -- 75a790455c43abf
+=======================================
+
+Fix a bug which was causing mke2fs -d and fuse2fs to improperly handle
+Posix ACL's.
+
+Fix a bug which could cause mke2fs -d to fail if there is an
+zero-length file in source directory tree.
+
+Debugfs will now display project quota information.
+
+Debugfs's do_set_xattr now uses C strings to parse extended attribute
+values, and will print the extended attributes using either C strings
+or hex bytes when using debugfs's do_get_xattr command. It will now
+allow developers to see the contents of the system.data extended
+attribute.
+
+Fix a bug in mke2fs where I/O errors weren't getting properly reported
+to the user.
+
+Fix multiblock writes in the unaligned Direct I/O fallback code.
+(Which is rarely needed on Linux systems, but which is required on
+Freebsd systems.)
+
+Make sure the default mke2fs.conf file includes the uninit_bg feature
+flag. (Which was accidentally dropped in v1.43).
+
+Fix a bug in resize2fs when operating on very large file systems which
+have a block size different from the VM page size.
+
+If the reported device size is absurdly large, mke2fs will now report
+an error instead looping forever or crashing.
+
+Replace a test file but which had a "non-commercial use-only"
+copyright permission file with a newer version from the Cyrus imapd
+package which now has a 4-clause BSD license, which was making some
+lawyers nervous, even though the test file in question was only used
+in lib/et's regression testing and was never included in any compiled
+binary. (Addresses Debian Bug: #840733)
+
+Programming notes
+-----------------
+
+Fix more FreeBSD-11 compatibility bugs, including some unmasked by
+FreeBSD 11-rc2.
+
+Fix the Mac build.
+
+Fix build failure on RHEL 5.x systems caused by an old version of
+libmagic.
+
+Fix a number of bugs reported by ASAN that can cause some (mostly
+harmless) memory dereferences beyond allocated memory.
+
+
E2fsprogs 1.43.3 (September 4, 2016)
====================================
diff --git a/acinclude.m4 b/acinclude.m4
index b4bdc5d..912383a 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -108,7 +108,7 @@
[CHECK_GNU_MAKE], [ AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
_cv_gnu_make_command='' ;
dnl Search all the common names for GNU make
- if test -z "$FORCE_NATIVE_MAKE" ; then
+ if test -n "$FORCE_NATIVE_MAKE" ; then
MAKES="make"
else
MAKES="make gmake gnumake"
diff --git a/configure b/configure
index 6825bd2..5f7b429 100755
--- a/configure
+++ b/configure
@@ -11515,7 +11515,7 @@
$as_echo_n "(cached) " >&6
else
_cv_gnu_make_command='' ;
- if test -z "$FORCE_NATIVE_MAKE" ; then
+ if test -n "$FORCE_NATIVE_MAKE" ; then
MAKES="make"
else
MAKES="make gmake gnumake"
@@ -12305,7 +12305,7 @@
if test "_$MAKEINFO" = "_"; then
- MAKEINFO="@echo Makeinfo is missing. Info documentation will not be built.;true"
+ MAKEINFO="echo Makeinfo is missing. Info documentation will not be built."
else
case "$MAKEINFO" in
*/missing.*)
diff --git a/configure.ac b/configure.ac
index 1c73301..9da7b86 100644
--- a/configure.ac
+++ b/configure.ac
@@ -877,7 +877,7 @@
AC_CHECK_TOOL(STRIP, strip, :)
AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
if test "_$MAKEINFO" = "_"; then
- MAKEINFO="@echo Makeinfo is missing. Info documentation will not be built.;true"
+ MAKEINFO="echo Makeinfo is missing. Info documentation will not be built."
else
case "$MAKEINFO" in
*/missing.*)
diff --git a/contrib/Android.mk b/contrib/Android.mk
index 282d47e..f8d74c3 100644
--- a/contrib/Android.mk
+++ b/contrib/Android.mk
@@ -31,6 +31,7 @@
LOCAL_MODULE := fsstress_host
LOCAL_MODULE_STEM := fsstress
LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_HOST_OS := linux
include $(BUILD_HOST_EXECUTABLE)
diff --git a/debian/changelog b/debian/changelog
index 86377aa..a0eb435 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,25 @@
+e2fsprogs (1.43.4~WIP.2017.01.30-1) unstable; urgency=medium
+
+ * Fix a bug which was causing mke2fs -d and fuse2fs to improperly
+ handle Posix ACL's.
+ * Fix a bug which could cause mke2fs -d to fail if there is an
+ zero-length file in source directory tree.
+ * Debugfs will now display project quota information.
+ * Debugfs has a more friendly and powerful to print and set extended
+ attributes.
+ * Fix a bug in mke2fs where I/O errors weren't getting properly
+ reported to the user.
+ * Fix a bug in resize2fs when operating on very large file systems
+ which have a block size different from the VM page size.
+ * If the reported device size is absurdly large, mke2fs will now
+ report an error instead looping forever or crashing.
+ * Replace a test file in the sources with an updated version which has
+ a DFSG-compliant copyright license. This was making lawyers
+ nervous, even though the file was only used in regression tests and
+ was never used when building any binaries. (Closes: #840733)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu> Mon, 30 Jan 2017 22:14:07 -0400
+
e2fsprogs (1.43.3-1) unstable; urgency=medium
* Fix e2fsck's handling of timestamps on 32-bit system (Closes: #836559)
diff --git a/debian/e2fslibs.symbols b/debian/e2fslibs.symbols
index 00da445..380cacd 100644
--- a/debian/e2fslibs.symbols
+++ b/debian/e2fslibs.symbols
@@ -606,6 +606,7 @@
ext2fs_xattr_set@Base 1.43
ext2fs_xattrs_close@Base 1.43
ext2fs_xattrs_count@Base 1.43
+ ext2fs_xattrs_flags@Base 1.43.4~WIP.2017.01.30
ext2fs_xattrs_iterate@Base 1.43
ext2fs_xattrs_open@Base 1.43
ext2fs_xattrs_read@Base 1.43
diff --git a/debugfs/Makefile.in b/debugfs/Makefile.in
index a3fe13e..3ac80d9 100644
--- a/debugfs/Makefile.in
+++ b/debugfs/Makefile.in
@@ -68,6 +68,11 @@
$(Q) $(CC) $(LDFLAGS_STATIC) -o debugfs.static $(DEBUG_OBJS) \
$(STATIC_LIBS) $(READLINE_LIB)
+debugfs.static-libs: $(DEBUG_OBJS) $(STATIC_DEPLIBS)
+ $(E) " LD $@"
+ $(Q) $(CC) -o debugfs.static-libs $(DEBUG_OBJS) \
+ $(STATIC_LIBS) $(READLINE_LIB)
+
rdebugfs: $(RO_DEBUG_OBJS) $(DEPLIBS)
$(E) " LD $@"
$(Q) $(CC) $(ALL_LDFLAGS) -o rdebugfs $(RO_DEBUG_OBJS) $(LIBS)
@@ -146,7 +151,7 @@
clean::
$(RM) -f $(PROGS) debugfs.8 \#* *.s *.o *.a *~ debug_cmds.c \
extent_cmds.c ro_debug_cmds.c core rdebugfs debugfs.static \
- tst_set_fields
+ debugfs.static-libs tst_set_fields
mostlyclean: clean
distclean: clean
@@ -335,7 +340,8 @@
$(top_srcdir)/lib/ext2fs/fiemap.h $(srcdir)/../misc/create_inode.h \
$(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/nls-enable.h
xattrs.o: $(srcdir)/xattrs.c $(top_builddir)/lib/config.h \
- $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
+ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/cstring.h \
+ $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \
$(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \
$(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
$(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
@@ -355,11 +361,11 @@
$(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
$(top_srcdir)/lib/support/quotaio_tree.h
journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \
- $(top_builddir)/lib/dirpaths.h $(srcdir)/../e2fsck/jfs_user.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
- $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/journal.h \
+ $(srcdir)/../e2fsck/jfs_user.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
$(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
$(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
$(top_srcdir)/lib/ext2fs/kernel-list.h
@@ -388,6 +394,7 @@
$(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
$(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \
$(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \
- $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/../e2fsck/jfs_user.h \
+ $(top_srcdir)/lib/support/quotaio_tree.h \
$(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(srcdir)/journal.h \
+ $(srcdir)/../e2fsck/jfs_user.h
diff --git a/debugfs/journal.c b/debugfs/journal.c
index fcd5d5e..9997c7c 100644
--- a/debugfs/journal.c
+++ b/debugfs/journal.c
@@ -655,6 +655,8 @@
if (fs->io != fs->journal_io)
io_channel_close(fs->journal_io);
fs->journal_io = NULL;
+ free(fs->journal_name);
+ fs->journal_name = NULL;
}
#ifndef USE_INODE_IO
diff --git a/debugfs/quota.c b/debugfs/quota.c
index 9b8dbaf..0b7c2ee 100644
--- a/debugfs/quota.c
+++ b/debugfs/quota.c
@@ -25,7 +25,7 @@
#include "debugfs.h"
-const char *quota_type[] = { "user", "group", NULL };
+const char *quota_type[] = { "user", "group", "project", NULL };
static int load_quota_ctx(char *progname)
{
@@ -42,7 +42,7 @@
if (current_qctx)
return 0;
- retval = quota_init_context(¤t_qctx, current_fs, QUOTA_ALL_BIT);
+ retval = quota_init_context(¤t_qctx, current_fs, 0);
if (retval) {
com_err(current_fs->device_name, retval,
"while trying to load quota information");
@@ -92,7 +92,7 @@
static int list_quota_callback(struct dquot *dq,
void *cb_data EXT2FS_ATTR((unused)))
{
- printf("%8u %8lld %8lld %8lld %8lld %8lld %8lld\n",
+ printf("%10u %8lld %8lld %8lld %8lld %8lld %8lld\n",
dq->dq_id, (long long)dq->dq_dqb.dqb_curspace,
(long long)dq->dq_dqb.dqb_bsoftlimit,
(long long)dq->dq_dqb.dqb_bhardlimit,
@@ -120,8 +120,8 @@
if (type < 0)
return;
- printf("%8s %8s %8s %8s %8s %8s %8s\n",
- (type == 0) ? "user id" : "group id",
+ printf("%7s %2s %8s %8s %8s %8s %8s %8s\n",
+ quota_type[type], "id",
"blocks", "quota", "limit", "inodes", "quota", "limit");
qh = current_qctx->quota_file[type];
retval = qh->qh_ops->scan_dquots(qh, list_quota_callback, NULL);
@@ -154,8 +154,8 @@
if (err)
return;
- printf("%8s %8s %8s %8s %8s %8s %8s\n",
- (type == 0) ? "user id" : "group id",
+ printf("%7s %2s %8s %8s %8s %8s %8s %8s\n",
+ quota_type[type], "id",
"blocks", "quota", "limit", "inodes", "quota", "limit");
qh = current_qctx->quota_file[type];
diff --git a/debugfs/xattrs.c b/debugfs/xattrs.c
index b938cc0..1112da4 100644
--- a/debugfs/xattrs.c
+++ b/debugfs/xattrs.c
@@ -14,29 +14,71 @@
extern char *optarg;
#endif
#include <ctype.h>
+#include "support/cstring.h"
#include "debugfs.h"
+#define PRINT_XATTR_HEX 0x01
+#define PRINT_XATTR_RAW 0x02
+#define PRINT_XATTR_C 0x04
+#define PRINT_XATTR_STATFMT 0x08
+#define PRINT_XATTR_NOQUOTES 0x10
+
/* Dump extended attributes */
-static void dump_xattr_string(FILE *out, const char *str, int len)
+static void print_xattr_hex(FILE *f, const char *str, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ fprintf(f, "%02x ", (unsigned char)str[i]);
+}
+
+/* Dump extended attributes */
+static void print_xattr_string(FILE *f, const char *str, int len, int flags)
{
int printable = 0;
int i;
- /* check: is string "printable enough?" */
- for (i = 0; i < len; i++)
- if (isprint(str[i]))
- printable++;
+ if (flags & PRINT_XATTR_RAW) {
+ fwrite(str, len, 1, f);
+ return;
+ }
- if (printable <= len*7/8)
- printable = 0;
+ if ((flags & PRINT_XATTR_C) == 0) {
+ /* check: is string "printable enough?" */
+ for (i = 0; i < len; i++)
+ if (isprint(str[i]))
+ printable++;
- for (i = 0; i < len; i++)
- if (printable)
- fprintf(out, isprint(str[i]) ? "%c" : "\\%03o",
- (unsigned char)str[i]);
- else
- fprintf(out, "%02x ", (unsigned char)str[i]);
+ if (printable <= len*7/8)
+ flags |= PRINT_XATTR_HEX;
+ }
+
+ if (flags & PRINT_XATTR_HEX) {
+ print_xattr_hex(f, str, len);
+ } else {
+ if ((flags & PRINT_XATTR_NOQUOTES) == 0)
+ fputc('\"', f);
+ print_c_string(f, str, len);
+ if ((flags & PRINT_XATTR_NOQUOTES) == 0)
+ fputc('\"', f);
+ }
+}
+
+static void print_xattr(FILE *f, char *name, char *value, size_t value_len,
+ int print_flags)
+{
+ print_xattr_string(f, name, strlen(name), PRINT_XATTR_NOQUOTES);
+ fprintf(f, " (%zu)", value_len);
+ if ((print_flags & PRINT_XATTR_STATFMT) &&
+ (strcmp(name, "system.data") == 0))
+ value_len = 0;
+ if (value_len != 0 &&
+ (!(print_flags & PRINT_XATTR_STATFMT) || (value_len < 40))) {
+ fprintf(f, " = ");
+ print_xattr_string(f, value, value_len, print_flags);
+ }
+ fputc('\n', f);
}
static int dump_attr(char *name, char *value, size_t value_len, void *data)
@@ -44,14 +86,7 @@
FILE *out = data;
fprintf(out, " ");
- dump_xattr_string(out, name, strlen(name));
- if (strcmp(name, "system.data") != 0) {
- fprintf(out, " = \"");
- dump_xattr_string(out, value, value_len);
- fprintf(out, "\"");
- }
- fprintf(out, " (%zu)\n", value_len);
-
+ print_xattr(out, name, value, value_len, PRINT_XATTR_STATFMT);
return 0;
}
@@ -110,10 +145,12 @@
char *buf = NULL;
size_t buflen;
int i;
+ int print_flags = 0;
+ int handle_flags = 0;
errcode_t err;
reset_getopt();
- while ((i = getopt(argc, argv, "f:")) != -1) {
+ while ((i = getopt(argc, argv, "Cf:rxV")) != -1) {
switch (i) {
case 'f':
if (fp)
@@ -124,16 +161,28 @@
return;
}
break;
+ case 'r':
+ handle_flags |= XATTR_HANDLE_FLAG_RAW;
+ break;
+ case 'x':
+ print_flags |= PRINT_XATTR_HEX;
+ break;
+ case 'V':
+ print_flags |= PRINT_XATTR_RAW;
+ break;
+ case 'C':
+ print_flags |= PRINT_XATTR_C;
+ break;
default:
- printf("%s: Usage: %s <file> <attr> [-f outfile]\n",
- argv[0], argv[0]);
- goto out2;
+ goto usage;
}
}
if (optind != argc - 2) {
- printf("%s: Usage: %s <file> <attr> [-f outfile]\n", argv[0],
- argv[0]);
+ usage:
+ printf("%s: Usage: %s [-f outfile]|[-xVC] [-r] <file> <attr>\n",
+ argv[0], argv[0]);
+
goto out2;
}
@@ -148,6 +197,10 @@
if (err)
goto out2;
+ err = ext2fs_xattrs_flags(h, &handle_flags, NULL);
+ if (err)
+ goto out;
+
err = ext2fs_xattrs_read(h);
if (err)
goto out;
@@ -159,7 +212,14 @@
if (fp) {
fwrite(buf, buflen, 1, fp);
} else {
- dump_xattr_string(stdout, buf, buflen);
+ if (print_flags & PRINT_XATTR_RAW) {
+ if (print_flags & PRINT_XATTR_HEX|PRINT_XATTR_C)
+ print_flags &= ~PRINT_XATTR_RAW;
+ print_xattr_string(stdout, buf, buflen, print_flags);
+ } else {
+ print_xattr(stdout, argv[optind + 1],
+ buf, buflen, print_flags);
+ }
printf("\n");
}
@@ -180,11 +240,13 @@
FILE *fp = NULL;
char *buf = NULL;
size_t buflen;
+ int print_flags = 0;
+ int handle_flags = 0;
int i;
errcode_t err;
reset_getopt();
- while ((i = getopt(argc, argv, "f:")) != -1) {
+ while ((i = getopt(argc, argv, "f:r")) != -1) {
switch (i) {
case 'f':
if (fp)
@@ -195,6 +257,9 @@
return;
}
break;
+ case 'r':
+ handle_flags |= XATTR_HANDLE_FLAG_RAW;
+ break;
default:
goto print_usage;
}
@@ -203,7 +268,7 @@
if (!(fp && optind == argc - 2) && !(!fp && optind == argc - 3)) {
print_usage:
printf("Usage:\t%s <file> <attr> <value>\n", argv[0]);
- printf("\t%s -f <value_file> <file> <attr>\n", argv[0]);
+ printf("\t%s -f <value_file> [-r] <file> <attr>\n", argv[0]);
goto out2;
}
@@ -222,6 +287,10 @@
if (err)
goto out2;
+ err = ext2fs_xattrs_flags(h, &handle_flags, NULL);
+ if (err)
+ goto out;
+
err = ext2fs_xattrs_read(h);
if (err)
goto out;
@@ -233,7 +302,7 @@
buflen = fread(buf, 1, current_fs->blocksize, fp);
} else {
buf = argv[optind + 2];
- buflen = strlen(argv[optind + 2]);
+ buflen = parse_c_string(buf);
}
err = ext2fs_xattr_set(h, argv[optind + 1], buf, buflen);
diff --git a/e2fsck/e2fsck.c b/e2fsck/e2fsck.c
index 6fb2f40..5184a17 100644
--- a/e2fsck/e2fsck.c
+++ b/e2fsck/e2fsck.c
@@ -146,6 +146,10 @@
ext2fs_u32_list_free(ctx->encrypted_dirs);
ctx->encrypted_dirs = 0;
}
+ if (ctx->inode_count) {
+ ext2fs_free_icount(ctx->inode_count);
+ ctx->inode_count = 0;
+ }
/* Clear statistic counters */
ctx->fs_directory_count = 0;
diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c
index ac4d554..8ef40f6 100644
--- a/e2fsck/pass1.c
+++ b/e2fsck/pass1.c
@@ -1063,6 +1063,7 @@
int imagic_fs, extent_fs, inlinedata_fs;
int low_dtime_check = 1;
int inode_size = EXT2_INODE_SIZE(fs->super);
+ int bufsize;
int failed_csum = 0;
ext2_ino_t ino_threshold = 0;
dgrp_t ra_group = 0;
@@ -1162,8 +1163,11 @@
ctx->flags |= E2F_FLAG_ABORT;
return;
}
+ bufsize = inode_size;
+ if (bufsize < sizeof(struct ext2_inode_large))
+ bufsize = sizeof(struct ext2_inode_large);
inode = (struct ext2_inode *)
- e2fsck_allocate_memory(ctx, inode_size, "scratch inode");
+ e2fsck_allocate_memory(ctx, bufsize, "scratch inode");
inodes_to_process = (struct process_inode_block *)
e2fsck_allocate_memory(ctx,
diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c
index 5020a19..11c19e8 100644
--- a/e2fsck/pass2.c
+++ b/e2fsck/pass2.c
@@ -121,7 +121,7 @@
if (cd.pctx.errcode) {
fix_problem(ctx, PR_2_ALLOCATE_ICOUNT, &cd.pctx);
ctx->flags |= E2F_FLAG_ABORT;
- return;
+ goto cleanup;
}
buf = (char *) e2fsck_allocate_memory(ctx, 2*fs->blocksize,
"directory scan buffer");
@@ -156,17 +156,17 @@
}
if (ctx->flags & E2F_FLAG_RUN_RETURN)
- return;
+ goto cleanup;
if (cd.pctx.errcode) {
fix_problem(ctx, PR_2_DBLIST_ITERATE, &cd.pctx);
ctx->flags |= E2F_FLAG_ABORT;
- return;
+ goto cleanup;
}
for (i=0; (dx_dir = e2fsck_dx_dir_info_iter(ctx, &i)) != 0;) {
if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
- return;
+ goto cleanup;
if (e2fsck_dir_will_be_rehashed(ctx, dx_dir->ino) ||
dx_dir->numblocks == 0)
continue;
@@ -285,6 +285,8 @@
}
print_resource_track(ctx, _("Pass 2"), &rtrack, fs->io);
+cleanup:
+ ext2fs_free_mem(&buf);
}
#define MAX_DEPTH 32000
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index e00fa16..eb9f311 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1338,7 +1338,6 @@
int old_bitmaps;
__u32 features[3];
char *cp;
- unsigned int qtype_bits = 0;
enum quota_type qtype;
clear_problem_context(&pctx);
@@ -1786,14 +1785,8 @@
if (ext2fs_has_feature_quota(sb)) {
/* Quotas were enabled. Do quota accounting during fsck. */
- for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
- if (*quota_sb_inump(sb, qtype) != 0)
- qtype_bits |= 1 << qtype;
- }
-
clear_problem_context(&pctx);
- pctx.errcode = quota_init_context(&ctx->qctx, ctx->fs,
- qtype_bits);
+ pctx.errcode = quota_init_context(&ctx->qctx, ctx->fs, 0);
if (pctx.errcode) {
fix_problem(ctx, PR_0_QUOTA_INIT_CTX, &pctx);
fatal_error(ctx, 0);
@@ -1842,7 +1835,7 @@
int needs_writeout;
for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
- if (((1 << qtype) & qtype_bits) == 0)
+ if (*quota_sb_inump(sb, qtype) == 0)
continue;
needs_writeout = 0;
pctx.num = qtype;
diff --git a/lib/e2p/ostype.c b/lib/e2p/ostype.c
index d002e75..7f08844 100644
--- a/lib/e2p/ostype.c
+++ b/lib/e2p/ostype.c
@@ -66,6 +66,7 @@
s = e2p_os2string(i);
os = e2p_string2os(s);
printf("%d: %s (%d)\n", i, s, os);
+ free(s);
if (i != os) {
fprintf(stderr, "Failure!\n");
exit(1);
diff --git a/lib/et/test_cases/imap_err.c b/lib/et/test_cases/imap_err.c
index 6f576d3..4d2ffc6 100644
--- a/lib/et/test_cases/imap_err.c
+++ b/lib/et/test_cases/imap_err.c
@@ -8,16 +8,28 @@
#define N_(a) a
static const char * const text[] = {
+ N_( "Internal Error"),
N_( "System I/O error"),
+ N_( "Item does not exist"),
+ N_( "Operating System Error"),
+ N_( "mail system storage has been exceeded"),
N_( "Permission denied"),
N_( "Over quota"),
+ N_( "Message size exceeds fixed limit"),
N_( "Too many user flags in mailbox"),
+ N_( "Invalid namespace prefix in configuration file"),
N_( "Mailbox has an invalid format"),
+ N_( "Replication inconsistency detected"),
+ N_( "Mailbox format corruption detected"),
N_( "Operation is not supported on mailbox"),
N_( "Mailbox does not exist"),
N_( "Mailbox already exists"),
N_( "Invalid mailbox name"),
- N_( "Mailbox is locked by POP server"),
+ N_( "Invalid mailbox type"),
+ N_( "Mailbox has been moved to another server"),
+ N_( "Mailbox is currently reserved"),
+ N_( "Mailbox is locked"),
+ N_( "Delivery to mailbox is disabled"),
N_( "Unknown/invalid partition"),
N_( "Invalid identifier"),
N_( "Message contains NUL characters"),
@@ -26,16 +38,35 @@
N_( "Message contains invalid header"),
N_( "Message has no header/body separator"),
N_( "Quota root does not exist"),
+ N_( "Bad protocol"),
+ N_( "Syntax error in parameters"),
+ N_( "Invalid annotation entry"),
+ N_( "Invalid annotation attribute"),
+ N_( "Invalid annotation value"),
+ N_( "Bad URL"),
+ N_( "Zero-length message literal"),
+ N_( "Invalid server requested"),
+ N_( "Server(s) unavailable to complete operation"),
+ N_( "The remote Server(s) denied the operation"),
+ N_( "Retry operation"),
+ N_( "This mailbox hierarchy does not exist on a single backend server."),
+ N_( "The remote server does not support MULTIAPPEND"),
N_( "Unrecognized character set"),
N_( "Invalid user"),
N_( "Login incorrect"),
N_( "Anonymous login is not permitted"),
N_( "Unsupported quota resource"),
- N_( "Mailbox is over quota"),
- N_( "Mailbox is at %d%% of quota"),
+ N_( "Authentication failed"),
+ N_( "Client cancelled authentication"),
+ N_( "Protocol error during authentication"),
+ N_( "Mailbox is over %s quota"),
+ N_( "Mailbox is at %d%% of %s quota"),
N_( "Message %d no longer exists"),
N_( "Unable to checkpoint \\Seen state"),
N_( "Unable to preserve \\Seen state"),
+ N_( "No matching messages"),
+ N_( "No matching annotations"),
+ N_( "[UNKNOWN-CTE] Can not process the binary data"),
N_( "LOGOUT received"),
N_( "Completed"),
0
@@ -52,7 +83,7 @@
};
extern struct et_list *_et_list;
-const struct error_table et_imap_error_table = { text, -1904809472L, 30 };
+const struct error_table et_imap_error_table = { text, -1904809472L, 61 };
static struct et_list link = { 0, 0 };
diff --git a/lib/et/test_cases/imap_err.et b/lib/et/test_cases/imap_err.et
index 33f5bbc..bfae243 100644
--- a/lib/et/test_cases/imap_err.et
+++ b/lib/et/test_cases/imap_err.et
@@ -1,46 +1,85 @@
# imap_err.et -- Error codes for Cyrus IMAP server programs
#
-# Copyright 1998 Carnegie Mellon University
-#
-# No warranties, either expressed or implied, are made regarding the
-# operation, use, or results of the software.
+# Copyright (c) 1994-2008 Carnegie Mellon University. All rights reserved.
#
-# Permission to use, copy, modify and distribute this software and its
-# documentation is hereby granted for non-commercial purposes only
-# provided that this copyright notice appears in all copies and in
-# supporting documentation.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
#
-# Permission is also granted to Internet Service Providers and others
-# entities to use the software for internal purposes.
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
#
-# The distribution, modification or sale of a product which uses or is
-# based on the software, in whole or in part, for commercial purposes or
-# benefits requires specific, additional permission from:
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
#
-# Office of Technology Transfer
-# Carnegie Mellon University
-# 5000 Forbes Avenue
-# Pittsburgh, PA 15213-3890
-# (412) 268-4387, fax: (412) 268-7395
-# tech-transfer@andrew.cmu.edu
-#
+# 3. The name "Carnegie Mellon University" must not be used to
+# endorse or promote products derived from this software without
+# prior written permission. For permission or any legal
+# details, please contact
+# Carnegie Mellon University
+# Center for Technology Transfer and Enterprise Creation
+# 4615 Forbes Avenue
+# Suite 302
+# Pittsburgh, PA 15213
+# (412) 268-7393, fax: (412) 268-7395
+# innovation@andrew.cmu.edu
+#
+# 4. Redistributions of any form whatsoever must retain the following
+# acknowledgment:
+# "This product includes software developed by Computing Services
+# at Carnegie Mellon University (http://www.cmu.edu/computing/)."
+#
+# CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
+# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
+# FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+# OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
error_table imap
+ec IMAP_INTERNAL,
+ "Internal Error"
+
ec IMAP_IOERROR,
"System I/O error"
+ec IMAP_NOTFOUND,
+ "Item does not exist"
+
+ec IMAP_SYS_ERROR,
+ "Operating System Error"
+
+ec IMAP_NOSPACE,
+ "mail system storage has been exceeded"
+
ec IMAP_PERMISSION_DENIED,
"Permission denied"
ec IMAP_QUOTA_EXCEEDED,
"Over quota"
+ec IMAP_MESSAGE_TOO_LARGE,
+ "Message size exceeds fixed limit"
+
ec IMAP_USERFLAG_EXHAUSTED,
"Too many user flags in mailbox"
+ec IMAP_NAMESPACE_BADPREFIX,
+ "Invalid namespace prefix in configuration file"
+
ec IMAP_MAILBOX_BADFORMAT,
"Mailbox has an invalid format"
+ec IMAP_SYNC_CHECKSUM,
+ "Replication inconsistency detected"
+
+ec IMAP_MAILBOX_CHECKSUM,
+ "Mailbox format corruption detected"
+
ec IMAP_MAILBOX_NOTSUPPORTED,
"Operation is not supported on mailbox"
@@ -53,8 +92,20 @@
ec IMAP_MAILBOX_BADNAME,
"Invalid mailbox name"
-ec IMAP_MAILBOX_POPLOCKED,
- "Mailbox is locked by POP server"
+ec IMAP_MAILBOX_BADTYPE,
+ "Invalid mailbox type"
+
+ec IMAP_MAILBOX_MOVED,
+ "Mailbox has been moved to another server"
+
+ec IMAP_MAILBOX_RESERVED,
+ "Mailbox is currently reserved"
+
+ec IMAP_MAILBOX_LOCKED,
+ "Mailbox is locked"
+
+ec IMAP_MAILBOX_DISABLED,
+ "Delivery to mailbox is disabled"
ec IMAP_PARTITION_UNKNOWN,
"Unknown/invalid partition"
@@ -80,6 +131,46 @@
ec IMAP_QUOTAROOT_NONEXISTENT,
"Quota root does not exist"
+ec IMAP_PROTOCOL_ERROR,
+ "Bad protocol"
+
+ec IMAP_PROTOCOL_BAD_PARAMETERS,
+ "Syntax error in parameters"
+
+ec IMAP_ANNOTATION_BADENTRY,
+ "Invalid annotation entry"
+
+ec IMAP_ANNOTATION_BADATTRIB,
+ "Invalid annotation attribute"
+
+ec IMAP_ANNOTATION_BADVALUE,
+ "Invalid annotation value"
+
+ec IMAP_BADURL,
+ "Bad URL"
+
+ec IMAP_ZERO_LENGTH_LITERAL,
+ "Zero-length message literal"
+
+# following used only proxy/db operations
+ec IMAP_BAD_SERVER,
+ "Invalid server requested"
+
+ec IMAP_SERVER_UNAVAILABLE,
+ "Server(s) unavailable to complete operation"
+
+ec IMAP_REMOTE_DENIED,
+ "The remote Server(s) denied the operation"
+
+ec IMAP_AGAIN,
+ "Retry operation"
+
+ec IMAP_NOT_SINGULAR_ROOT,
+ "This mailbox hierarchy does not exist on a single backend server."
+
+ec IMAP_REMOTE_NO_MULTIAPPEND,
+ "The remote server does not support MULTIAPPEND"
+
# Following only used for internationalization of error messages
ec IMAP_UNRECOGNIZED_CHARSET,
@@ -97,13 +188,24 @@
ec IMAP_UNSUPPORTED_QUOTA,
"Unsupported quota resource"
+# Following used only for SASL operations
+
+ec IMAP_SASL_FAIL,
+ "Authentication failed"
+
+ec IMAP_SASL_CANCEL,
+ "Client cancelled authentication"
+
+ec IMAP_SASL_PROTERR,
+ "Protocol error during authentication"
+
# Following used for internationalization of untagged OK/NO responses
ec IMAP_NO_OVERQUOTA,
- "Mailbox is over quota"
+ "Mailbox is over %s quota"
ec IMAP_NO_CLOSEQUOTA,
- "Mailbox is at %d%% of quota"
+ "Mailbox is at %d%% of %s quota"
ec IMAP_NO_MSGGONE,
"Message %d no longer exists"
@@ -114,6 +216,15 @@
ec IMAP_NO_CHECKPRESERVE,
"Unable to preserve \\Seen state"
+ec IMAP_NO_NOSUCHMSG,
+ "No matching messages"
+
+ec IMAP_NO_NOSUCHANNOTATION,
+ "No matching annotations"
+
+ec IMAP_NO_UNKNOWN_CTE,
+ "[UNKNOWN-CTE] Can not process the binary data"
+
# Following used for internationalization of untagged BYE response
ec IMAP_BYE_LOGOUT,
diff --git a/lib/et/test_cases/imap_err.h b/lib/et/test_cases/imap_err.h
index 17664c4..bfa8f65 100644
--- a/lib/et/test_cases/imap_err.h
+++ b/lib/et/test_cases/imap_err.h
@@ -5,36 +5,67 @@
#include <et/com_err.h>
-#define IMAP_IOERROR (-1904809472L)
-#define IMAP_PERMISSION_DENIED (-1904809471L)
-#define IMAP_QUOTA_EXCEEDED (-1904809470L)
-#define IMAP_USERFLAG_EXHAUSTED (-1904809469L)
-#define IMAP_MAILBOX_BADFORMAT (-1904809468L)
-#define IMAP_MAILBOX_NOTSUPPORTED (-1904809467L)
-#define IMAP_MAILBOX_NONEXISTENT (-1904809466L)
-#define IMAP_MAILBOX_EXISTS (-1904809465L)
-#define IMAP_MAILBOX_BADNAME (-1904809464L)
-#define IMAP_MAILBOX_POPLOCKED (-1904809463L)
-#define IMAP_PARTITION_UNKNOWN (-1904809462L)
-#define IMAP_INVALID_IDENTIFIER (-1904809461L)
-#define IMAP_MESSAGE_CONTAINSNULL (-1904809460L)
-#define IMAP_MESSAGE_CONTAINSNL (-1904809459L)
-#define IMAP_MESSAGE_CONTAINS8BIT (-1904809458L)
-#define IMAP_MESSAGE_BADHEADER (-1904809457L)
-#define IMAP_MESSAGE_NOBLANKLINE (-1904809456L)
-#define IMAP_QUOTAROOT_NONEXISTENT (-1904809455L)
-#define IMAP_UNRECOGNIZED_CHARSET (-1904809454L)
-#define IMAP_INVALID_USER (-1904809453L)
-#define IMAP_INVALID_LOGIN (-1904809452L)
-#define IMAP_ANONYMOUS_NOT_PERMITTED (-1904809451L)
-#define IMAP_UNSUPPORTED_QUOTA (-1904809450L)
-#define IMAP_NO_OVERQUOTA (-1904809449L)
-#define IMAP_NO_CLOSEQUOTA (-1904809448L)
-#define IMAP_NO_MSGGONE (-1904809447L)
-#define IMAP_NO_CHECKSEEN (-1904809446L)
-#define IMAP_NO_CHECKPRESERVE (-1904809445L)
-#define IMAP_BYE_LOGOUT (-1904809444L)
-#define IMAP_OK_COMPLETED (-1904809443L)
+#define IMAP_INTERNAL (-1904809472L)
+#define IMAP_IOERROR (-1904809471L)
+#define IMAP_NOTFOUND (-1904809470L)
+#define IMAP_SYS_ERROR (-1904809469L)
+#define IMAP_NOSPACE (-1904809468L)
+#define IMAP_PERMISSION_DENIED (-1904809467L)
+#define IMAP_QUOTA_EXCEEDED (-1904809466L)
+#define IMAP_MESSAGE_TOO_LARGE (-1904809465L)
+#define IMAP_USERFLAG_EXHAUSTED (-1904809464L)
+#define IMAP_NAMESPACE_BADPREFIX (-1904809463L)
+#define IMAP_MAILBOX_BADFORMAT (-1904809462L)
+#define IMAP_SYNC_CHECKSUM (-1904809461L)
+#define IMAP_MAILBOX_CHECKSUM (-1904809460L)
+#define IMAP_MAILBOX_NOTSUPPORTED (-1904809459L)
+#define IMAP_MAILBOX_NONEXISTENT (-1904809458L)
+#define IMAP_MAILBOX_EXISTS (-1904809457L)
+#define IMAP_MAILBOX_BADNAME (-1904809456L)
+#define IMAP_MAILBOX_BADTYPE (-1904809455L)
+#define IMAP_MAILBOX_MOVED (-1904809454L)
+#define IMAP_MAILBOX_RESERVED (-1904809453L)
+#define IMAP_MAILBOX_LOCKED (-1904809452L)
+#define IMAP_MAILBOX_DISABLED (-1904809451L)
+#define IMAP_PARTITION_UNKNOWN (-1904809450L)
+#define IMAP_INVALID_IDENTIFIER (-1904809449L)
+#define IMAP_MESSAGE_CONTAINSNULL (-1904809448L)
+#define IMAP_MESSAGE_CONTAINSNL (-1904809447L)
+#define IMAP_MESSAGE_CONTAINS8BIT (-1904809446L)
+#define IMAP_MESSAGE_BADHEADER (-1904809445L)
+#define IMAP_MESSAGE_NOBLANKLINE (-1904809444L)
+#define IMAP_QUOTAROOT_NONEXISTENT (-1904809443L)
+#define IMAP_PROTOCOL_ERROR (-1904809442L)
+#define IMAP_PROTOCOL_BAD_PARAMETERS (-1904809441L)
+#define IMAP_ANNOTATION_BADENTRY (-1904809440L)
+#define IMAP_ANNOTATION_BADATTRIB (-1904809439L)
+#define IMAP_ANNOTATION_BADVALUE (-1904809438L)
+#define IMAP_BADURL (-1904809437L)
+#define IMAP_ZERO_LENGTH_LITERAL (-1904809436L)
+#define IMAP_BAD_SERVER (-1904809435L)
+#define IMAP_SERVER_UNAVAILABLE (-1904809434L)
+#define IMAP_REMOTE_DENIED (-1904809433L)
+#define IMAP_AGAIN (-1904809432L)
+#define IMAP_NOT_SINGULAR_ROOT (-1904809431L)
+#define IMAP_REMOTE_NO_MULTIAPPEND (-1904809430L)
+#define IMAP_UNRECOGNIZED_CHARSET (-1904809429L)
+#define IMAP_INVALID_USER (-1904809428L)
+#define IMAP_INVALID_LOGIN (-1904809427L)
+#define IMAP_ANONYMOUS_NOT_PERMITTED (-1904809426L)
+#define IMAP_UNSUPPORTED_QUOTA (-1904809425L)
+#define IMAP_SASL_FAIL (-1904809424L)
+#define IMAP_SASL_CANCEL (-1904809423L)
+#define IMAP_SASL_PROTERR (-1904809422L)
+#define IMAP_NO_OVERQUOTA (-1904809421L)
+#define IMAP_NO_CLOSEQUOTA (-1904809420L)
+#define IMAP_NO_MSGGONE (-1904809419L)
+#define IMAP_NO_CHECKSEEN (-1904809418L)
+#define IMAP_NO_CHECKPRESERVE (-1904809417L)
+#define IMAP_NO_NOSUCHMSG (-1904809416L)
+#define IMAP_NO_NOSUCHANNOTATION (-1904809415L)
+#define IMAP_NO_UNKNOWN_CTE (-1904809414L)
+#define IMAP_BYE_LOGOUT (-1904809413L)
+#define IMAP_OK_COMPLETED (-1904809412L)
extern const struct error_table et_imap_error_table;
extern void initialize_imap_error_table(void);
diff --git a/lib/ext2fs/Makefile.in b/lib/ext2fs/Makefile.in
index 6a3656d..2081da8 100644
--- a/lib/ext2fs/Makefile.in
+++ b/lib/ext2fs/Makefile.in
@@ -312,10 +312,12 @@
$(Q) $(CC) -o tst_bitops tst_bitops.o $(ALL_CFLAGS) $(ALL_LDFLAGS) \
$(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(SYSLIBS)
-tst_getsectsize: tst_getsectsize.o $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
+tst_getsectsize: tst_getsectsize.o getsectsize.o $(STATIC_LIBEXT2FS) \
+ $(DEPSTATIC_LIBCOM_ERR)
$(E) " LD $@"
- $(Q) $(CC) -o tst_sectgetsize tst_getsectsize.o $(ALL_LDFLAGS) \
- $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(SYSLIBS)
+ $(Q) $(CC) -o tst_getsectsize tst_getsectsize.o getsectsize.o \
+ $(ALL_LDFLAGS) $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) \
+ $(SYSLIBS)
tst_types.o: $(srcdir)/tst_types.c ext2_types.h
@@ -521,7 +523,7 @@
check:: tst_bitops tst_badblocks tst_iscan tst_types tst_icount \
tst_super_size tst_types tst_inode_size tst_csum tst_crc32c tst_bitmaps \
tst_inline tst_inline_data tst_libext2fs tst_sha256 tst_sha512 \
- tst_digest_encode
+ tst_digest_encode tst_getsize tst_getsectsize
$(TESTENV) ./tst_bitops
$(TESTENV) ./tst_badblocks
$(TESTENV) ./tst_iscan
@@ -574,7 +576,7 @@
clean::
$(RM) -f \#* *.s *.o *.a *~ *.bak core profiled/* \
tst_badblocks tst_iscan ext2_err.et ext2_err.c ext2_err.h \
- tst_byteswap tst_ismounted tst_getsize tst_sectgetsize \
+ tst_byteswap tst_ismounted tst_getsize tst_getsectsize \
tst_bitops tst_types tst_icount tst_super_size tst_csum \
tst_bitmaps tst_bitmaps_out tst_extents tst_inline \
tst_inline_data tst_inode_size tst_bitmaps_cmd.c \
@@ -787,8 +789,8 @@
ext_attr.o: $(srcdir)/ext_attr.c $(top_builddir)/lib/config.h \
$(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
$(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2_ext_attr.h \
- $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
- $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
+ $(srcdir)/ext4_acl.h $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h \
+ $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
$(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
$(srcdir)/bitops.h
extent.o: $(srcdir)/extent.c $(top_builddir)/lib/config.h \
@@ -1317,11 +1319,11 @@
$(top_srcdir)/lib/support/dqblk_v2.h \
$(top_srcdir)/lib/support/quotaio_tree.h
xattrs.o: $(top_srcdir)/debugfs/xattrs.c $(top_builddir)/lib/config.h \
- $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/debugfs.h \
- $(top_srcdir)/lib/ss/ss.h $(top_builddir)/lib/ss/ss_err.h \
- $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
- $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
+ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/cstring.h \
+ $(top_srcdir)/debugfs/debugfs.h $(top_srcdir)/lib/ss/ss.h \
+ $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(srcdir)/ext2fs.h $(srcdir)/ext3_extents.h $(srcdir)/ext2_io.h \
$(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
$(srcdir)/bitops.h $(top_srcdir)/debugfs/../misc/create_inode.h \
$(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
index b69fa09..b255759 100644
--- a/lib/ext2fs/closefs.c
+++ b/lib/ext2fs/closefs.c
@@ -429,16 +429,22 @@
if (retval)
return retval;
- if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC))
+ if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC)) {
retval = io_channel_flush(fs->io);
+ if (retval)
+ goto errout;
+ }
retval = write_primary_superblock(fs, super_shadow);
if (retval)
goto errout;
fs->flags &= ~EXT2_FLAG_DIRTY;
- if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC))
+ if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC)) {
retval = io_channel_flush(fs->io);
+ if (retval)
+ goto errout;
+ }
errout:
fs->super->s_state = fs_state;
#ifdef WORDS_BIGENDIAN
diff --git a/lib/ext2fs/csum.c b/lib/ext2fs/csum.c
index fcee07c..e67850f 100644
--- a/lib/ext2fs/csum.c
+++ b/lib/ext2fs/csum.c
@@ -1012,6 +1012,7 @@
printf("checksums for different data shouldn't match\n");
exit(1);
}
+ ext2fs_free(fs);
return 0;
}
diff --git a/lib/ext2fs/ext2_io.h b/lib/ext2fs/ext2_io.h
index 3a07b5d..6b7e977 100644
--- a/lib/ext2fs/ext2_io.h
+++ b/lib/ext2fs/ext2_io.h
@@ -101,6 +101,7 @@
#define IO_FLAG_RW 0x0001
#define IO_FLAG_EXCLUSIVE 0x0002
#define IO_FLAG_DIRECT_IO 0x0004
+#define IO_FLAG_FORCE_BOUNCE 0x0008
/*
* Convenience functions....
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 4cf3c5b..8ff49ca 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -60,6 +60,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <errno.h>
#if EXT2_FLAT_INCLUDES
@@ -1217,6 +1218,9 @@
errcode_t ext2fs_xattrs_count(struct ext2_xattr_handle *handle, size_t *count);
errcode_t ext2fs_xattr_inode_max_size(ext2_filsys fs, ext2_ino_t ino,
size_t *size);
+#define XATTR_HANDLE_FLAG_RAW 0x0001
+errcode_t ext2fs_xattrs_flags(struct ext2_xattr_handle *handle,
+ unsigned int *new_flags, unsigned int *old_flags);
/* extent.c */
extern errcode_t ext2fs_extent_header_verify(void *ptr, int size);
diff --git a/lib/ext2fs/ext4_acl.h b/lib/ext2fs/ext4_acl.h
new file mode 100644
index 0000000..69ff79d
--- /dev/null
+++ b/lib/ext2fs/ext4_acl.h
@@ -0,0 +1,55 @@
+/*
+ * Ext4's on-disk acl format. From linux/fs/ext4/acl.h
+ */
+
+#define EXT4_ACL_VERSION 0x0001
+
+/* 23.2.5 acl_tag_t values */
+
+#define ACL_UNDEFINED_TAG (0x00)
+#define ACL_USER_OBJ (0x01)
+#define ACL_USER (0x02)
+#define ACL_GROUP_OBJ (0x04)
+#define ACL_GROUP (0x08)
+#define ACL_MASK (0x10)
+#define ACL_OTHER (0x20)
+
+/* 23.3.6 acl_type_t values */
+
+#define ACL_TYPE_ACCESS (0x8000)
+#define ACL_TYPE_DEFAULT (0x4000)
+
+/* 23.2.7 ACL qualifier constants */
+
+#define ACL_UNDEFINED_ID ((id_t)-1)
+
+typedef struct {
+ __le16 e_tag;
+ __le16 e_perm;
+ __le32 e_id;
+ } ext4_acl_entry;
+
+typedef struct {
+ __le16 e_tag;
+ __le16 e_perm;
+} ext4_acl_entry_short;
+
+typedef struct {
+ __le32 a_version;
+} ext4_acl_header;
+
+
+/* Supported ACL a_version fields */
+ #define POSIX_ACL_XATTR_VERSION 0x0002
+
+typedef struct {
+ __le16 e_tag;
+ __le16 e_perm;
+ __le32 e_id;
+} posix_acl_xattr_entry;
+
+typedef struct {
+ __le32 a_version;
+ posix_acl_xattr_entry a_entries[0];
+} posix_acl_xattr_header;
+
diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c
index e8fd10c..0314f9f 100644
--- a/lib/ext2fs/ext_attr.c
+++ b/lib/ext2fs/ext_attr.c
@@ -21,6 +21,7 @@
#include "ext2_fs.h"
#include "ext2_ext_attr.h"
+#include "ext4_acl.h"
#include "ext2fs.h"
@@ -215,6 +216,7 @@
struct ext2_xattr *attrs;
size_t length, count;
ext2_ino_t ino;
+ unsigned int flags;
int dirty;
};
@@ -308,7 +310,7 @@
struct ea_name_index *e;
for (e = ea_names; e->name; e++) {
- if (memcmp(fullname, e->name, strlen(e->name)) == 0) {
+ if (strncmp(fullname, e->name, strlen(e->name)) == 0) {
*name = (char *)fullname + strlen(e->name);
*index = e->index;
return 1;
@@ -452,6 +454,136 @@
}
+static inline int
+posix_acl_xattr_count(size_t size)
+{
+ if (size < sizeof(posix_acl_xattr_header))
+ return -1;
+ size -= sizeof(posix_acl_xattr_header);
+ if (size % sizeof(posix_acl_xattr_entry))
+ return -1;
+ return size / sizeof(posix_acl_xattr_entry);
+}
+
+/*
+ * The lgetxattr function returns data formatted in the POSIX extended
+ * attribute format. The on-disk format uses a more compact encoding.
+ * See the ext4_acl_to_disk in fs/ext4/acl.c.
+ */
+static errcode_t convert_posix_acl_to_disk_buffer(const void *value, size_t size,
+ void *out_buf, size_t *size_out)
+{
+ posix_acl_xattr_header *header = (posix_acl_xattr_header*) value;
+ posix_acl_xattr_entry *entry = (posix_acl_xattr_entry *)(header+1), *end;
+ ext4_acl_header *ext_acl;
+ size_t s;
+ void *e;
+ int err;
+
+ int count;
+
+ if (!value)
+ return EINVAL;
+ if (size < sizeof(posix_acl_xattr_header))
+ return ENOMEM;
+ if (header->a_version != ext2fs_cpu_to_le32(POSIX_ACL_XATTR_VERSION))
+ return EINVAL;
+
+ count = posix_acl_xattr_count(size);
+ ext_acl = out_buf;
+ ext_acl->a_version = ext2fs_cpu_to_le32(EXT4_ACL_VERSION);
+
+ if (count <= 0)
+ return EINVAL;
+
+ e = (char *) out_buf + sizeof(ext4_acl_header);
+ s = sizeof(ext4_acl_header);
+ for (end = entry + count; entry != end;entry++) {
+ ext4_acl_entry *disk_entry = (ext4_acl_entry*) e;
+ disk_entry->e_tag = ext2fs_cpu_to_le16(entry->e_tag);
+ disk_entry->e_perm = ext2fs_cpu_to_le16(entry->e_perm);
+
+ switch(entry->e_tag) {
+ case ACL_USER_OBJ:
+ case ACL_GROUP_OBJ:
+ case ACL_MASK:
+ case ACL_OTHER:
+ e += sizeof(ext4_acl_entry_short);
+ s += sizeof(ext4_acl_entry_short);
+ break;
+ case ACL_USER:
+ case ACL_GROUP:
+ disk_entry->e_id = ext2fs_cpu_to_le32(entry->e_id);
+ e += sizeof(ext4_acl_entry);
+ s += sizeof(ext4_acl_entry);
+ break;
+ }
+ }
+ *size_out = s;
+ return 0;
+}
+
+static errcode_t convert_disk_buffer_to_posix_acl(const void *value, size_t size,
+ void **out_buf, size_t *size_out)
+{
+ posix_acl_xattr_header *header;
+ posix_acl_xattr_entry *entry;
+ ext4_acl_header *ext_acl = (ext4_acl_header *) value;
+ errcode_t err;
+ const char *cp;
+ char *out;
+ int count;
+
+ if ((!value) ||
+ (size < sizeof(ext4_acl_header)) ||
+ (ext_acl->a_version != ext2fs_cpu_to_le32(EXT4_ACL_VERSION)))
+ return EINVAL;
+
+ err = ext2fs_get_mem(size * 2, &out);
+ if (err)
+ return err;
+
+ header = (posix_acl_xattr_header *) out;
+ header->a_version = ext2fs_cpu_to_le32(POSIX_ACL_XATTR_VERSION);
+ entry = (posix_acl_xattr_entry *) (out + sizeof(posix_acl_xattr_header));
+
+ cp = value + sizeof(ext4_acl_header);
+ size -= sizeof(ext4_acl_header);
+
+ while (size > 0) {
+ const ext4_acl_entry *disk_entry = (const ext4_acl_entry *) cp;
+
+ entry->e_tag = ext2fs_le16_to_cpu(disk_entry->e_tag);
+ entry->e_perm = ext2fs_le16_to_cpu(disk_entry->e_perm);
+
+ switch(entry->e_tag) {
+ case ACL_USER_OBJ:
+ case ACL_GROUP_OBJ:
+ case ACL_MASK:
+ case ACL_OTHER:
+ entry->e_id = 0;
+ cp += sizeof(ext4_acl_entry_short);
+ size -= sizeof(ext4_acl_entry_short);
+ break;
+ case ACL_USER:
+ case ACL_GROUP:
+ entry->e_id = ext2fs_le32_to_cpu(disk_entry->e_id);
+ cp += sizeof(ext4_acl_entry);
+ size -= sizeof(ext4_acl_entry);
+ break;
+ default:
+ ext2fs_free_mem(&out);
+ return EINVAL;
+ break;
+ }
+ entry++;
+ }
+ *out_buf = out;
+ *size_out = ((char *) entry - out);
+ return 0;
+}
+
+
static errcode_t write_xattrs_to_buffer(struct ext2_xattr_handle *handle,
struct ext2_xattr **pos,
void *entries_start,
@@ -914,10 +1046,16 @@
EXT2_CHECK_MAGIC(h, EXT2_ET_MAGIC_EA_HANDLE);
for (x = h->attrs; x < h->attrs + h->length; x++) {
- if (!x->name)
+ if (!x->name || strcmp(x->name, key))
continue;
- if (strcmp(x->name, key) == 0) {
+ if (!(h->flags & XATTR_HANDLE_FLAG_RAW) &&
+ ((strcmp(key, "system.posix_acl_default") == 0) ||
+ (strcmp(key, "system.posix_acl_access") == 0))) {
+ err = convert_disk_buffer_to_posix_acl(x->value, x->value_len,
+ value, value_len);
+ return err;
+ } else {
err = ext2fs_get_mem(x->value_len, &val);
if (err)
return err;
@@ -1002,6 +1140,20 @@
EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EA_HANDLE);
last_empty = NULL;
+
+ err = ext2fs_get_mem(value_len, &new_value);
+ if (err)
+ return err;
+ if (!(handle->flags & XATTR_HANDLE_FLAG_RAW) &&
+ ((strcmp(key, "system.posix_acl_default") == 0) ||
+ (strcmp(key, "system.posix_acl_access") == 0))) {
+ err = convert_posix_acl_to_disk_buffer(value, value_len,
+ new_value, &value_len);
+ if (err)
+ goto errout;
+ } else
+ memcpy(new_value, value, value_len);
+
for (x = handle->attrs; x < handle->attrs + handle->length; x++) {
if (!x->name) {
last_empty = x;
@@ -1010,10 +1162,6 @@
/* Replace xattr */
if (strcmp(x->name, key) == 0) {
- err = ext2fs_get_mem(value_len, &new_value);
- if (err)
- return err;
- memcpy(new_value, value, value_len);
ext2fs_free_mem(&x->value);
x->value = new_value;
x->value_len = value_len;
@@ -1026,13 +1174,9 @@
if (last_empty) {
err = ext2fs_get_mem(strlen(key) + 1, &last_empty->name);
if (err)
- return err;
+ goto errout;
strcpy(last_empty->name, key);
-
- err = ext2fs_get_mem(value_len, &last_empty->value);
- if (err)
- return err;
- memcpy(last_empty->value, value, value_len);
+ last_empty->value = new_value;
last_empty->value_len = value_len;
handle->dirty = 1;
handle->count++;
@@ -1058,6 +1202,9 @@
handle->dirty = 1;
handle->count++;
return 0;
+errout:
+ ext2fs_free_mem(&new_value);
+ return err;
}
errcode_t ext2fs_xattr_remove(struct ext2_xattr_handle *handle,
@@ -1137,3 +1284,14 @@
*count = handle->count;
return 0;
}
+
+errcode_t ext2fs_xattrs_flags(struct ext2_xattr_handle *handle,
+ unsigned int *new_flags, unsigned int *old_flags)
+{
+ EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EA_HANDLE);
+ if (old_flags)
+ *old_flags = handle->flags;
+ if (new_flags)
+ handle->flags = *new_flags;
+ return 0;
+}
diff --git a/lib/ext2fs/getsectsize.c b/lib/ext2fs/getsectsize.c
index b57bf56..d6bc376 100644
--- a/lib/ext2fs/getsectsize.c
+++ b/lib/ext2fs/getsectsize.c
@@ -26,6 +26,9 @@
#include <errno.h>
#endif
#include <fcntl.h>
+#ifdef HAVE_SYS_DISK_H
+#include <sys/disk.h>
+#endif
#ifdef HAVE_LINUX_FD_H
#include <sys/ioctl.h>
#include <linux/fd.h>
@@ -60,6 +63,12 @@
return 0;
}
#endif
+#ifdef DIOCGSECTORSIZE
+ if (ioctl(fd, DIOCGSECTORSIZE, sectsize) >= 0) {
+ close(fd);
+ return 0;
+ }
+#endif
*sectsize = 0;
close(fd);
return 0;
@@ -76,6 +85,11 @@
if (ioctl(fd, BLKSSZGET, &align) < 0)
align = 0;
#endif
+#ifdef DIOCGSECTORSIZE
+ if (align <= 0 &&
+ ioctl(fd, DIOCGSECTORSIZE, &align) < 0)
+ align = 0;
+#endif
#ifdef _SC_PAGESIZE
if (align <= 0)
@@ -108,6 +122,14 @@
return 0;
}
#endif
+#ifdef DIOCGSECTORSIZE
+ /* This isn't really the physical sector size, but FreeBSD
+ * doesn't seem to have this concept. */
+ if (ioctl(fd, DIOCGSECTORSIZE, sectsize) >= 0) {
+ close(fd);
+ return 0;
+ }
+#endif
*sectsize = 0;
close(fd);
return 0;
diff --git a/lib/ext2fs/inline_data.c b/lib/ext2fs/inline_data.c
index 587b88d..c8613f6 100644
--- a/lib/ext2fs/inline_data.c
+++ b/lib/ext2fs/inline_data.c
@@ -845,6 +845,7 @@
return 1;
}
printf("tst_inline_data(DIR): OK\n");
+ ext2fs_free(fs);
return 0;
}
diff --git a/lib/ext2fs/tst_badblocks.c b/lib/ext2fs/tst_badblocks.c
index c685f33..b6e766a 100644
--- a/lib/ext2fs/tst_badblocks.c
+++ b/lib/ext2fs/tst_badblocks.c
@@ -201,6 +201,7 @@
printf("Block bitmap NOT matched.\n");
test_fail++;
}
+ ext2fs_badblocks_list_free(new_bb);
return 0;
}
@@ -215,7 +216,7 @@
}
}
-int file_test_invalid(badblocks_list bb)
+void file_test_invalid(badblocks_list bb)
{
badblocks_list new_bb = 0;
errcode_t retval;
@@ -234,12 +235,14 @@
if (!f) {
fprintf(stderr, "Error opening temp file: %s\n",
error_message(errno));
- return 1;
+ test_fail++;
+ goto out;
}
retval = ext2fs_write_bb_FILE(bb, 0, f);
if (retval) {
com_err("file_test", retval, "while writing bad blocks");
- return 1;
+ test_fail++;
+ goto out;
}
fprintf(f, "34500\n");
@@ -248,7 +251,8 @@
retval = ext2fs_read_bb_FILE(fs, f, &new_bb, invalid_proc);
if (retval) {
com_err("file_test", retval, "while reading bad blocks");
- return 1;
+ test_fail++;
+ goto out;
}
fclose(f);
if (!test_expected_fail) {
@@ -263,7 +267,10 @@
printf("Block bitmap NOT matched.\n");
test_fail++;
}
- return 0;
+ ext2fs_badblocks_list_free(new_bb);
+out:
+ free(fs->super);
+ free(fs);
}
int main(int argc, char **argv)
@@ -354,6 +361,8 @@
ext2fs_badblocks_list_free(bb3);
if (bb4)
ext2fs_badblocks_list_free(bb4);
+ if (bb5)
+ ext2fs_badblocks_list_free(bb5);
return test_fail;
diff --git a/lib/ext2fs/tst_bitops.c b/lib/ext2fs/tst_bitops.c
index ed71447..8262d3b 100644
--- a/lib/ext2fs/tst_bitops.c
+++ b/lib/ext2fs/tst_bitops.c
@@ -220,12 +220,6 @@
printf("64-bit: ext2fs_clear_bit test succeed.\n");
/* Do bigarray test */
- bigarray = malloc(1 << 29);
- if (!bigarray) {
- fprintf(stderr, "Failed to allocate scratch memory!\n");
- exit(1);
- }
-
bigarray[BIG_TEST_BIT >> 3] = 0;
ext2fs_set_bit64(BIG_TEST_BIT, bigarray);
@@ -289,6 +283,6 @@
exit(1);
printf("64-bit: ext2fs_fast_set_bit big_test successful\n");
-
+ free(bigarray);
exit(0);
}
diff --git a/lib/ext2fs/tst_getsectsize.c b/lib/ext2fs/tst_getsectsize.c
index a6b234e..d616965 100644
--- a/lib/ext2fs/tst_getsectsize.c
+++ b/lib/ext2fs/tst_getsectsize.c
@@ -30,6 +30,7 @@
{
int lsectsize, psectsize;
int retval;
+ int fd;
if (argc < 2) {
fprintf(stderr, "Usage: %s device\n", argv[0]);
@@ -50,5 +51,13 @@
}
printf("Device %s has logical/physical sector size of %d/%d.\n",
argv[1], lsectsize, psectsize);
+ fd = open(argv[1], O_RDONLY);
+ if (fd < 0) {
+ perror("open");
+ exit(1);
+ }
+ printf("The device's DIO alignment is %d\n",
+ ext2fs_get_dio_alignment(fd));
+ close(fd);
exit(0);
}
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index 018d2ca..f4e6148 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -53,6 +53,11 @@
#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
#endif
+#ifdef HAVE_SYS_PRCTL_H
+#include <sys/prctl.h>
+#else
+#define PR_GET_DUMPABLE 3
+#endif
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
@@ -122,6 +127,29 @@
return retval;
}
+static char *safe_getenv(const char *arg)
+{
+ if ((getuid() != geteuid()) || (getgid() != getegid()))
+ return NULL;
+#ifdef HAVE_PRCTL
+ if (prctl(PR_GET_DUMPABLE, 0, 0, 0, 0) == 0)
+ return NULL;
+#else
+#if (defined(linux) && defined(SYS_prctl))
+ if (syscall(SYS_prctl, PR_GET_DUMPABLE, 0, 0, 0, 0) == 0)
+ return NULL;
+#endif
+#endif
+
+#if defined(HAVE_SECURE_GETENV)
+ return secure_getenv(arg);
+#elif defined(HAVE___SECURE_GETENV)
+ return __secure_getenv(arg);
+#else
+ return getenv(arg);
+#endif
+}
+
/*
* Here are the raw I/O functions
*/
@@ -135,11 +163,20 @@
ext2_loff_t location;
int actual = 0;
unsigned char *buf = bufv;
+ ssize_t really_read = 0;
size = (count < 0) ? -count : count * channel->block_size;
data->io_stats.bytes_read += size;
location = ((ext2_loff_t) block * channel->block_size) + data->offset;
+ if (data->flags & IO_FLAG_FORCE_BOUNCE) {
+ if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) {
+ retval = errno ? errno : EXT2_ET_LLSEEK_FAILED;
+ goto error_out;
+ }
+ goto bounce_read;
+ }
+
#ifdef HAVE_PREAD64
/* Try an aligned pread */
if ((channel->align == 0) ||
@@ -171,9 +208,11 @@
actual = read(data->dev, buf, size);
if (actual != size) {
short_read:
- if (actual < 0)
+ if (actual < 0) {
+ retval = errno;
actual = 0;
- retval = EXT2_ET_SHORT_READ;
+ } else
+ retval = EXT2_ET_SHORT_READ;
goto error_out;
}
return 0;
@@ -188,14 +227,20 @@
* The buffer or size which we're trying to read isn't aligned
* to the O_DIRECT rules, so we need to do this the hard way...
*/
+bounce_read:
while (size > 0) {
actual = read(data->dev, data->bounce, channel->block_size);
- if (actual != channel->block_size)
+ if (actual != channel->block_size) {
+ actual = really_read;
+ buf -= really_read;
+ size += really_read;
goto short_read;
+ }
actual = size;
if (size > channel->block_size)
actual = channel->block_size;
memcpy(buf, data->bounce, actual);
+ really_read += actual;
size -= actual;
buf += actual;
}
@@ -232,6 +277,14 @@
location = ((ext2_loff_t) block * channel->block_size) + data->offset;
+ if (data->flags & IO_FLAG_FORCE_BOUNCE) {
+ if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) {
+ retval = errno ? errno : EXT2_ET_LLSEEK_FAILED;
+ goto error_out;
+ }
+ goto bounce_write;
+ }
+
#ifdef HAVE_PWRITE64
/* Try an aligned pwrite */
if ((channel->align == 0) ||
@@ -262,6 +315,10 @@
(IS_ALIGNED(buf, channel->align) &&
IS_ALIGNED(size, channel->align))) {
actual = write(data->dev, buf, size);
+ if (actual < 0) {
+ retval = errno;
+ goto error_out;
+ }
if (actual != size) {
short_write:
retval = EXT2_ET_SHORT_WRITE;
@@ -278,13 +335,18 @@
* The buffer or size which we're trying to write isn't aligned
* to the O_DIRECT rules, so we need to do this the hard way...
*/
+bounce_write:
while (size > 0) {
if (size < channel->block_size) {
actual = read(data->dev, data->bounce,
channel->block_size);
if (actual != channel->block_size) {
- retval = EXT2_ET_SHORT_READ;
- goto error_out;
+ if (actual < 0) {
+ retval = errno;
+ goto error_out;
+ }
+ memset(data->bounce + actual, 0,
+ channel->block_size - actual);
}
}
actual = size;
@@ -296,10 +358,15 @@
goto error_out;
}
actual = write(data->dev, data->bounce, channel->block_size);
+ if (actual < 0) {
+ retval = errno;
+ goto error_out;
+ }
if (actual != channel->block_size)
goto short_write;
size -= actual;
buf += actual;
+ location += actual;
}
return 0;
@@ -335,7 +402,7 @@
if (retval)
return retval;
}
- if (channel->align) {
+ if (channel->align || data->flags & IO_FLAG_FORCE_BOUNCE) {
if (data->bounce)
ext2fs_free_mem(&data->bounce);
retval = io_channel_alloc_buf(channel, 0, &data->bounce);
@@ -495,6 +562,9 @@
struct utsname ut;
#endif
+ if (safe_getenv("UNIX_IO_FORCE_BOUNCE"))
+ flags |= IO_FLAG_FORCE_BOUNCE;
+
retval = ext2fs_get_mem(sizeof(struct struct_io_channel), &io);
if (retval)
goto cleanup;
@@ -553,7 +623,7 @@
}
#endif
-#if defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#if defined(__CYGWIN__)
/*
* Some operating systems require that the buffers be aligned,
* regardless of O_DIRECT
@@ -562,6 +632,14 @@
io->align = 512;
#endif
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ if (io->flags & CHANNEL_FLAGS_BLOCK_DEVICE) {
+ int dio_align = ext2fs_get_dio_alignment(fd);
+
+ if (io->align < dio_align)
+ io->align = dio_align;
+ }
+#endif
if ((retval = alloc_cache(io, data)))
goto cleanup;
@@ -929,6 +1007,8 @@
return errno;
actual = write(data->dev, buf, size);
+ if (actual < 0)
+ return errno;
if (actual != size)
return EXT2_ET_SHORT_WRITE;
@@ -950,7 +1030,8 @@
#ifndef NO_IO_CACHE
retval = flush_cached_blocks(channel, data, 0);
#endif
- fsync(data->dev);
+ if (!retval && fsync(data->dev) != 0)
+ return errno;
return retval;
}
@@ -1042,7 +1123,7 @@
data = (struct unix_private_data *) channel->private_data;
EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
- if (getenv("UNIX_IO_NOZEROOUT"))
+ if (safe_getenv("UNIX_IO_NOZEROOUT"))
goto unimplemented;
if (channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE) {
diff --git a/lib/support/Android.mk b/lib/support/Android.mk
index 3d2056d..fefd058 100644
--- a/lib/support/Android.mk
+++ b/lib/support/Android.mk
@@ -55,3 +55,41 @@
LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(libext2_quota_shared_libraries))
include $(BUILD_HOST_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+libext2_profile_src_files := \
+ prof_err.c \
+ profile.c
+
+libext2_profile_shared_libraries := \
+ libext2_com_err
+
+libext2_profile_system_shared_libraries := libc
+
+libext2_profile_c_includes := external/e2fsprogs/lib
+
+libext2_profile_cflags := -O2 -g -W -Wall
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_profile_src_files)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_profile_system_shared_libraries)
+LOCAL_SHARED_LIBRARIES := $(libext2_profile_shared_libraries)
+LOCAL_C_INCLUDES := $(libext2_profile_c_includes)
+LOCAL_CFLAGS := $(libext2_profile_cflags)
+LOCAL_MODULE := libext2_profile
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_profile_src_files)
+LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(libext2_profile_shared_libraries))
+LOCAL_C_INCLUDES := $(libext2_profile_c_includes)
+LOCAL_CFLAGS := $(libext2_profile_cflags)
+LOCAL_MODULE := libext2_profile-host
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/lib/support/Makefile.in b/lib/support/Makefile.in
index 112ba24..d5a6f26 100644
--- a/lib/support/Makefile.in
+++ b/lib/support/Makefile.in
@@ -12,7 +12,8 @@
all::
-OBJS= mkquota.o \
+OBJS= cstring.o \
+ mkquota.o \
plausible.o \
profile.o \
parse_qtype.o \
@@ -24,6 +25,7 @@
dict.o
SRCS= $(srcdir)/argv_parse.c \
+ $(srcdir)/cstring.c \
$(srcdir)/mkquota.c \
$(srcdir)/parse_qtype.c \
$(srcdir)/plausible.c \
@@ -67,10 +69,15 @@
profile_helpers.o argv_parse.o $(STATIC_LIBCOM_ERR) \
$(ALL_CFLAGS)
+test_cstring: $(srcdir)/cstring.c
+ $(E) " CC $@"
+ $(Q) $(CC) -o test_cstring -DDEBUG_PROGRAM $(srcdir)/cstring.c \
+ $(ALL_CFLAGS)
+
clean::
$(RM) -f \#* *.s *.o *.a *~ *.bak core profiled/* \
../libsupport.a ../libsupport_p.a $(SMANPAGES) \
- prof_err.c prof_err.h test_profile
+ prof_err.c prof_err.h test_profile test_cstring
#check:: tst_uuid
# LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_uuid
@@ -96,6 +103,8 @@
#
argv_parse.o: $(srcdir)/argv_parse.c $(top_builddir)/lib/config.h \
$(top_builddir)/lib/dirpaths.h $(srcdir)/argv_parse.h
+cstring.o: $(srcdir)/cstring.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/cstring.h
mkquota.o: $(srcdir)/mkquota.c $(top_builddir)/lib/config.h \
$(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
$(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
diff --git a/lib/support/cstring.c b/lib/support/cstring.c
new file mode 100644
index 0000000..3250477
--- /dev/null
+++ b/lib/support/cstring.c
@@ -0,0 +1,161 @@
+/*
+ * cstring.c -- parse and print strings using the C escape sequences
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+#include <string.h>
+
+#include "cstring.h"
+
+int parse_c_string(char *str)
+{
+ unsigned char *to, *from, ch;
+ int v;
+
+ to = from = str;
+
+ for (to = from = (unsigned char *) str;
+ *from && *from != '"'; to++, from++) {
+ if (*from == '\\') {
+ ch = *(++from);
+ switch (ch) {
+ case 'a':
+ *to = '\a';
+ break;
+ case 'b':
+ *to = '\b';
+ break;
+ case 'f':
+ *to = '\f';
+ break;
+ case 'n':
+ *to = '\n';
+ break;
+ case 't':
+ *to = '\t';
+ break;
+ case 'v':
+ *to = '\v';
+ break;
+ case 'x':
+ ch = *(from + 1);
+ if (ch >= 'a' && ch <= 'f')
+ ch = ch - 'a' + 'A';
+ if (ch >= '0' && ch <= '9')
+ v = ch - '0';
+ else if (ch >= 'A' && ch <= 'F')
+ v = ch + 10 - 'A';
+ else {
+ ch = *from;
+ break;
+ }
+ from++;
+ ch = *(from + 1);
+ if (ch >= 'a' && ch <= 'f')
+ ch = ch - 'a' + 'A';
+ if (ch >= '0' && ch <= '9')
+ v = (v * 16) + (ch - '0');
+ else if (ch >= 'A' && ch <= 'F')
+ v = (v * 16) + (ch + 10 - 'A');
+ else {
+ ch = *from;
+ break;
+ }
+ from++;
+ *to = v;
+ break;
+ default:
+ if (ch >= '0' && ch <= '9') {
+ v = ch - '0';
+ ch = *(from + 1);
+ if (ch >= '0' && ch <= '9') {
+ from++;
+ v = (8 * v) + (ch - '0');
+ ch = *(from + 1);
+ if (ch >= '0' && ch <= '9') {
+ from++;
+ v = (8 * v) + (ch - '0');
+ }
+ }
+ ch = v;
+ }
+ *to = ch;
+ }
+ continue;
+ }
+ *to = *from;
+ }
+ *to = '\0';
+ return to - (unsigned char *) str;
+}
+
+void print_c_string(FILE *f, const char *cp, int len)
+{
+ unsigned char ch;
+
+ if (len < 0)
+ len = strlen(cp);
+
+ while (len--) {
+ ch = *cp++;
+ if (ch == '\a')
+ fputs("\\a", f);
+ else if (ch == '\b')
+ fputs("\\b", f);
+ else if (ch == '\f')
+ fputs("\\f", f);
+ else if (ch == '\n')
+ fputs("\\n", f);
+ else if (ch == '\t')
+ fputs("\\t", f);
+ else if (ch == '\v')
+ fputs("\\v", f);
+ else if (ch == '\\')
+ fputs("\\\\", f);
+ else if (ch == '\'')
+ fputs("\\\'", f);
+ else if (ch == '\"')
+ fputs("\\\"", f);
+ else if ((ch < 32) || (ch > 126))
+ fprintf(f, "\\%03o", ch);
+ else
+ fputc(ch, f);
+ }
+}
+
+#ifdef DEBUG_PROGRAM
+int main(int argc, char **argv)
+{
+ char buf[4096];
+ int c, raw = 0;
+
+ while ((c = getopt(argc, argv, "r")) != EOF) {
+ switch (c) {
+ case 'r':
+ raw++;
+ break;
+ default:
+ fprintf(stderr, "Usage: %s [-r]\n", argv[0]);
+ exit(1);
+ }
+ }
+
+ while (!feof(stdin)) {
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ c = parse_c_string(buf);
+ if (raw)
+ fputs(buf, stdout);
+ else {
+ print_c_string(stdout, buf, c);
+ printf(" <%d>\n", c);
+ }
+ }
+}
+#endif
diff --git a/lib/support/cstring.h b/lib/support/cstring.h
new file mode 100644
index 0000000..7f80f41
--- /dev/null
+++ b/lib/support/cstring.h
@@ -0,0 +1,6 @@
+/*
+ * cstring.h -- header file for C string parse/print utilities
+ */
+
+extern int parse_c_string(char *str);
+extern void print_c_string(FILE *f, const char *cp, int len);
diff --git a/lib/support/mkquota.c b/lib/support/mkquota.c
index 8407c76..8629266 100644
--- a/lib/support/mkquota.c
+++ b/lib/support/mkquota.c
@@ -296,8 +296,13 @@
memset(ctx, 0, sizeof(struct quota_ctx));
for (qtype = 0; qtype < MAXQUOTAS; qtype++) {
ctx->quota_file[qtype] = NULL;
- if (((1 << qtype) & qtype_bits) == 0)
- continue;
+ if (qtype_bits) {
+ if (((1 << qtype) & qtype_bits) == 0)
+ continue;
+ } else {
+ if (*quota_sb_inump(fs->super, qtype) == 0)
+ continue;
+ }
err = ext2fs_get_mem(sizeof(dict_t), &dict);
if (err) {
log_debug("Failed to allocate dictionary");
diff --git a/lib/support/plausible.c b/lib/support/plausible.c
index 6f0c4bc..0636061 100644
--- a/lib/support/plausible.c
+++ b/lib/support/plausible.c
@@ -43,6 +43,17 @@
static int (*dl_magic_load)(magic_t, const char *);
static void (*dl_magic_close)(magic_t);
+/*
+ * NO_CHECK functionality was only added in file 4.20.
+ * Older systems like RHEL 5.x still have file 4.17
+ */
+#ifndef MAGIC_NO_CHECK_COMPRESS
+#define MAGIC_NO_CHECK_COMPRESS 0x0001000
+#endif
+#ifndef MAGIC_NO_CHECK_ELF
+#define MAGIC_NO_CHECK_ELF 0x0010000
+#endif
+
#ifdef HAVE_DLOPEN
#include <dlfcn.h>
diff --git a/lib/support/quotaio.c b/lib/support/quotaio.c
index c250e31..befa832 100644
--- a/lib/support/quotaio.c
+++ b/lib/support/quotaio.c
@@ -243,13 +243,16 @@
if (qctx->quota_file[qtype]) {
h = qctx->quota_file[qtype];
if (((flags & EXT2_FILE_WRITE) == 0) ||
- (h->qh_file_flags & EXT2_FILE_WRITE))
+ (h->qh_file_flags & EXT2_FILE_WRITE)) {
+ ext2fs_file_close(e2_file);
return 0;
+ }
(void) quota_file_close(qctx, h);
}
err = ext2fs_get_mem(sizeof(struct quota_handle), &h);
if (err) {
log_err("Unable to allocate quota handle");
+ ext2fs_file_close(e2_file);
return err;
}
allocated_handle = 1;
diff --git a/misc/Android.mk b/misc/Android.mk
index 55f2767..d960737 100644
--- a/misc/Android.mk
+++ b/misc/Android.mk
@@ -341,6 +341,7 @@
LOCAL_MODULE := e4crypt_host
LOCAL_MODULE_STEM := e4crypt
LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_HOST_OS := linux
include $(BUILD_HOST_EXECUTABLE)
diff --git a/misc/Makefile.in b/misc/Makefile.in
index d6436c2..370fdac 100644
--- a/misc/Makefile.in
+++ b/misc/Makefile.in
@@ -157,9 +157,9 @@
$(E) " LD $@"
$(Q) $(CC) $(ALL_LDFLAGS) -o findsuper findsuper.o $(LIBS) $(SYSLIBS)
-partinfo: partinfo.o
+partinfo: partinfo.o $(DEPLIBCOM_ERR)
$(E) " LD $@"
- $(Q) $(CC) $(ALL_LDFLAGS) -o partinfo partinfo.o
+ $(Q) $(CC) $(ALL_LDFLAGS) -o partinfo partinfo.o $(LIBCOM_ERR)
e2initrd_helper: e2initrd_helper.o $(DEPLIBS) $(DEPLIBBLKID) $(LIBEXT2FS)
$(E) " LD $@"
diff --git a/misc/base_device.c b/misc/base_device.c
index b2ce138..d1c1cd9 100644
--- a/misc/base_device.c
+++ b/misc/base_device.c
@@ -150,7 +150,7 @@
#ifdef DEBUG
int main(int argc, char** argv)
{
- const char *base;
+ char *base;
char buf[256], *cp;
while (1) {
@@ -164,6 +164,7 @@
*cp = 0;
base = base_device(buf);
printf("%s\t%s\n", buf, base ? base : "NONE");
+ free(base);
}
exit(0);
}
diff --git a/misc/create_inode.c b/misc/create_inode.c
index 5122e56..ae22ff6 100644
--- a/misc/create_inode.c
+++ b/misc/create_inode.c
@@ -510,10 +510,11 @@
if (err < 0 && (errno == EOPNOTSUPP || errno == ENOTTY)) {
err = EXT2_ET_UNIMPLEMENTED;
goto out;
- } else if (err < 0 || fiemap_buf->fm_mapped_extents == 0) {
+ } else if (err < 0) {
err = errno;
goto out;
- }
+ } else if (fiemap_buf->fm_mapped_extents == 0)
+ goto out;
for (i = 0, ext = ext_buf; i < fiemap_buf->fm_mapped_extents;
i++, ext++) {
err = copy_file_range(fs, fd, e2_file, ext->fe_logical,
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index d98e71e..49c6e94 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -632,6 +632,7 @@
retval = io_channel_write_blk64(fs->io,
fs->super->s_first_data_block+1,
1, buf);
+ (void) ext2fs_free_mem(&buf);
if (retval) {
com_err("create_journal_dev", retval, "%s",
_("while writing journal superblock"));
@@ -1138,7 +1139,7 @@
static errcode_t init_list(struct str_list *sl)
{
sl->num = 0;
- sl->max = 0;
+ sl->max = 1;
sl->list = malloc((sl->max+1) * sizeof(char *));
if (!sl->list)
return ENOMEM;
@@ -2089,10 +2090,28 @@
EXT2_BLOCK_SIZE(&fs_param));
exit(1);
}
+ /*
+ * Guard against group descriptor count overflowing... Mostly to avoid
+ * strange results for absurdly large devices.
+ */
+ if (fs_blocks_count > ((1ULL << (fs_param.s_log_block_size + 3 + 32)) - 1)) {
+ fprintf(stderr, _("%s: Size of device (0x%llx blocks) %s "
+ "too big to create\n\t"
+ "a filesystem using a blocksize of %d.\n"),
+ program_name, fs_blocks_count, device_name,
+ EXT2_BLOCK_SIZE(&fs_param));
+ exit(1);
+ }
ext2fs_blocks_count_set(&fs_param, fs_blocks_count);
if (ext2fs_has_feature_journal_dev(&fs_param)) {
+ int i;
+
+ for (i=0; fs_types[i]; i++) {
+ free(fs_types[i]);
+ fs_types[i] = 0;
+ }
fs_types[0] = strdup("journal");
fs_types[1] = 0;
}
@@ -2702,7 +2721,7 @@
quota_ctx_t qctx;
errcode_t retval;
- retval = quota_init_context(&qctx, fs, QUOTA_ALL_BIT);
+ retval = quota_init_context(&qctx, fs, quotatype_bits);
if (retval) {
com_err(program_name, retval,
_("while initializing quota context"));
@@ -3208,7 +3227,7 @@
retval = ext2fs_close_free(&fs);
if (retval) {
fprintf(stderr, "%s",
- _("\nWarning, had trouble writing out superblocks."));
+ _("\nWarning, had trouble writing out superblocks.\n"));
} else if (!quiet) {
printf("%s", _("done\n\n"));
if (!getenv("MKE2FS_SKIP_CHECK_MSG"))
diff --git a/misc/partinfo.c b/misc/partinfo.c
index 2b69c89..b79d183 100644
--- a/misc/partinfo.c
+++ b/misc/partinfo.c
@@ -18,7 +18,9 @@
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
+#include <string.h>
#include "support/nls-enable.h"
+#include "et/com_err.h"
#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE)
#define BLKGETSIZE _IO(0x12,96) /* return device size */
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
index 09e65ba..6239577 100644
--- a/misc/tune2fs.c
+++ b/misc/tune2fs.c
@@ -1492,7 +1492,7 @@
/* Nothing to do. */
return;
- retval = quota_init_context(&qctx, fs, QUOTA_ALL_BIT);
+ retval = quota_init_context(&qctx, fs, 0);
if (retval) {
com_err(program_name, retval,
_("while initializing quota context in support library"));
diff --git a/po/e2fsprogs.pot b/po/e2fsprogs.pot
index c7123fd..aa73457 100644
--- a/po/e2fsprogs.pot
+++ b/po/e2fsprogs.pot
@@ -69,9 +69,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: e2fsprogs 1.43.3\n"
+"Project-Id-Version: e2fsprogs 1.43.4-WIP\n"
"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2016-09-04 21:27-0400\n"
+"POT-Creation-Date: 2017-01-31 00:56-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -94,8 +94,8 @@
msgid "while reading the bad blocks inode"
msgstr ""
-#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1508
-#: e2fsck/unix.c:1601 misc/badblocks.c:1242 misc/badblocks.c:1250
+#: e2fsck/badblocks.c:72 e2fsck/scantest.c:107 e2fsck/unix.c:1507
+#: e2fsck/unix.c:1600 misc/badblocks.c:1242 misc/badblocks.c:1250
#: misc/badblocks.c:1264 misc/badblocks.c:1276 misc/dumpe2fs.c:689
#: misc/e2image.c:1400 misc/e2image.c:1584 misc/e2image.c:1605
#: misc/mke2fs.c:230 misc/tune2fs.c:2693 misc/tune2fs.c:2787 resize/main.c:413
@@ -493,81 +493,81 @@
msgid "internal error: couldn't lookup EA inode record for %u"
msgstr ""
-#: e2fsck/pass1.c:666 e2fsck/pass2.c:970
+#: e2fsck/pass1.c:666 e2fsck/pass2.c:972
msgid "reading directory block"
msgstr ""
-#: e2fsck/pass1.c:1111
+#: e2fsck/pass1.c:1112
msgid "in-use inode map"
msgstr ""
-#: e2fsck/pass1.c:1122
+#: e2fsck/pass1.c:1123
msgid "directory inode map"
msgstr ""
-#: e2fsck/pass1.c:1132
+#: e2fsck/pass1.c:1133
msgid "regular file inode map"
msgstr ""
-#: e2fsck/pass1.c:1141 misc/e2image.c:1268
+#: e2fsck/pass1.c:1142 misc/e2image.c:1268
msgid "in-use block map"
msgstr ""
-#: e2fsck/pass1.c:1150
+#: e2fsck/pass1.c:1151
msgid "metadata block map"
msgstr ""
-#: e2fsck/pass1.c:1209
+#: e2fsck/pass1.c:1213
msgid "opening inode scan"
msgstr ""
-#: e2fsck/pass1.c:1247
+#: e2fsck/pass1.c:1251
msgid "getting next inode from scan"
msgstr ""
-#: e2fsck/pass1.c:1933
+#: e2fsck/pass1.c:1937
msgid "Pass 1"
msgstr ""
-#: e2fsck/pass1.c:1994
+#: e2fsck/pass1.c:1998
#, c-format
msgid "reading indirect blocks of inode %u"
msgstr ""
-#: e2fsck/pass1.c:2044
+#: e2fsck/pass1.c:2048
msgid "bad inode map"
msgstr ""
-#: e2fsck/pass1.c:2084
+#: e2fsck/pass1.c:2088
msgid "inode in bad block map"
msgstr ""
-#: e2fsck/pass1.c:2104
+#: e2fsck/pass1.c:2108
msgid "imagic inode map"
msgstr ""
-#: e2fsck/pass1.c:2131
+#: e2fsck/pass1.c:2135
msgid "multiply claimed block map"
msgstr ""
-#: e2fsck/pass1.c:2245
+#: e2fsck/pass1.c:2249
msgid "ext attr block map"
msgstr ""
-#: e2fsck/pass1.c:3412
+#: e2fsck/pass1.c:3416
#, c-format
msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
msgstr ""
-#: e2fsck/pass1.c:3827
+#: e2fsck/pass1.c:3831
msgid "block bitmap"
msgstr ""
-#: e2fsck/pass1.c:3833
+#: e2fsck/pass1.c:3837
msgid "inode bitmap"
msgstr ""
-#: e2fsck/pass1.c:3839
+#: e2fsck/pass1.c:3843
msgid "inode table"
msgstr ""
@@ -575,7 +575,7 @@
msgid "Pass 2"
msgstr ""
-#: e2fsck/pass2.c:1042 e2fsck/pass2.c:1207
+#: e2fsck/pass2.c:1044 e2fsck/pass2.c:1209
msgid "Can not continue."
msgstr ""
@@ -3194,7 +3194,7 @@
msgstr ""
#: e2fsck/unix.c:1252 e2fsck/unix.c:1304 misc/e2undo.c:230 misc/e2undo.c:275
-#: misc/mke2fs.c:2541 misc/mke2fs.c:2592 misc/tune2fs.c:2610
+#: misc/mke2fs.c:2560 misc/mke2fs.c:2611 misc/tune2fs.c:2610
#: misc/tune2fs.c:2655 resize/main.c:187 resize/main.c:232
#, c-format
msgid ""
@@ -3203,188 +3203,188 @@
"\n"
msgstr ""
-#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2581 misc/tune2fs.c:2644
+#: e2fsck/unix.c:1293 misc/e2undo.c:264 misc/mke2fs.c:2600 misc/tune2fs.c:2644
#: resize/main.c:221
#, c-format
msgid "while trying to delete %s"
msgstr ""
-#: e2fsck/unix.c:1319 misc/mke2fs.c:2607 resize/main.c:242
+#: e2fsck/unix.c:1319 misc/mke2fs.c:2626 resize/main.c:242
msgid "while trying to setup undo file\n"
msgstr ""
-#: e2fsck/unix.c:1363
+#: e2fsck/unix.c:1362
msgid "Error: ext2fs library version out of date!\n"
msgstr ""
-#: e2fsck/unix.c:1370
+#: e2fsck/unix.c:1369
msgid "while trying to initialize program"
msgstr ""
-#: e2fsck/unix.c:1393
+#: e2fsck/unix.c:1392
#, c-format
msgid "\tUsing %s, %s\n"
msgstr ""
-#: e2fsck/unix.c:1405
+#: e2fsck/unix.c:1404
msgid "need terminal for interactive repairs"
msgstr ""
-#: e2fsck/unix.c:1466
+#: e2fsck/unix.c:1465
#, c-format
msgid "%s: %s trying backup blocks...\n"
msgstr ""
-#: e2fsck/unix.c:1468
+#: e2fsck/unix.c:1467
msgid "Superblock invalid,"
msgstr ""
-#: e2fsck/unix.c:1469
+#: e2fsck/unix.c:1468
msgid "Group descriptors look bad..."
msgstr ""
-#: e2fsck/unix.c:1479
+#: e2fsck/unix.c:1478
#, c-format
msgid "%s: %s while using the backup blocks"
msgstr ""
-#: e2fsck/unix.c:1483
+#: e2fsck/unix.c:1482
#, c-format
msgid "%s: going back to original superblock\n"
msgstr ""
-#: e2fsck/unix.c:1512
+#: e2fsck/unix.c:1511
msgid ""
"The filesystem revision is apparently too high for this version of e2fsck.\n"
"(Or the filesystem superblock is corrupt)\n"
"\n"
msgstr ""
-#: e2fsck/unix.c:1519
+#: e2fsck/unix.c:1518
msgid "Could this be a zero-length partition?\n"
msgstr ""
-#: e2fsck/unix.c:1521
+#: e2fsck/unix.c:1520
#, c-format
msgid "You must have %s access to the filesystem or be root\n"
msgstr ""
-#: e2fsck/unix.c:1527
+#: e2fsck/unix.c:1526
msgid "Possibly non-existent or swap device?\n"
msgstr ""
-#: e2fsck/unix.c:1529
+#: e2fsck/unix.c:1528
msgid "Filesystem mounted or opened exclusively by another program?\n"
msgstr ""
-#: e2fsck/unix.c:1533
+#: e2fsck/unix.c:1532
msgid "Possibly non-existent device?\n"
msgstr ""
-#: e2fsck/unix.c:1536
+#: e2fsck/unix.c:1535
msgid ""
"Disk write-protected; use the -n option to do a read-only\n"
"check of the device.\n"
msgstr ""
-#: e2fsck/unix.c:1604
+#: e2fsck/unix.c:1603
msgid "Get a newer version of e2fsck!"
msgstr ""
-#: e2fsck/unix.c:1648
+#: e2fsck/unix.c:1647
#, c-format
msgid "while checking journal for %s"
msgstr ""
-#: e2fsck/unix.c:1651
+#: e2fsck/unix.c:1650
msgid "Cannot proceed with file system check"
msgstr ""
-#: e2fsck/unix.c:1662
+#: e2fsck/unix.c:1661
msgid ""
"Warning: skipping journal recovery because doing a read-only filesystem "
"check.\n"
msgstr ""
-#: e2fsck/unix.c:1674
+#: e2fsck/unix.c:1673
#, c-format
msgid "unable to set superblock flags on %s\n"
msgstr ""
-#: e2fsck/unix.c:1680
+#: e2fsck/unix.c:1679
#, c-format
msgid "Journal checksum error found in %s\n"
msgstr ""
-#: e2fsck/unix.c:1684
+#: e2fsck/unix.c:1683
#, c-format
msgid "Journal corrupted in %s\n"
msgstr ""
-#: e2fsck/unix.c:1688
+#: e2fsck/unix.c:1687
#, c-format
msgid "while recovering journal of %s"
msgstr ""
-#: e2fsck/unix.c:1710
+#: e2fsck/unix.c:1709
#, c-format
msgid "%s has unsupported feature(s):"
msgstr ""
-#: e2fsck/unix.c:1769
+#: e2fsck/unix.c:1768
#, c-format
msgid "%s: %s while reading bad blocks inode\n"
msgstr ""
-#: e2fsck/unix.c:1772
+#: e2fsck/unix.c:1771
msgid "This doesn't bode well, but we'll try to go on...\n"
msgstr ""
-#: e2fsck/unix.c:1818
+#: e2fsck/unix.c:1811
#, c-format
msgid "Creating journal (%d blocks): "
msgstr ""
-#: e2fsck/unix.c:1828
+#: e2fsck/unix.c:1821
msgid " Done.\n"
msgstr ""
-#: e2fsck/unix.c:1830
+#: e2fsck/unix.c:1823
msgid ""
"\n"
"*** journal has been regenerated ***\n"
msgstr ""
-#: e2fsck/unix.c:1836
+#: e2fsck/unix.c:1829
msgid "aborted"
msgstr ""
-#: e2fsck/unix.c:1838
+#: e2fsck/unix.c:1831
#, c-format
msgid "%s: e2fsck canceled.\n"
msgstr ""
-#: e2fsck/unix.c:1865
+#: e2fsck/unix.c:1858
msgid "Restarting e2fsck from the beginning...\n"
msgstr ""
-#: e2fsck/unix.c:1869
+#: e2fsck/unix.c:1862
msgid "while resetting context"
msgstr ""
-#: e2fsck/unix.c:1913 e2fsck/util.c:71
+#: e2fsck/unix.c:1906 e2fsck/util.c:71
#, c-format
msgid ""
"\n"
"%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
msgstr ""
-#: e2fsck/unix.c:1917
+#: e2fsck/unix.c:1910
#, c-format
msgid "%s: ***** REBOOT SYSTEM *****\n"
msgstr ""
-#: e2fsck/unix.c:1925 e2fsck/util.c:77
+#: e2fsck/unix.c:1918 e2fsck/util.c:77
#, c-format
msgid ""
"\n"
@@ -3818,7 +3818,7 @@
msgid "while opening inode %u"
msgstr ""
-#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:904
+#: misc/create_inode.c:156 misc/create_inode.c:183 misc/create_inode.c:905
#: misc/e2undo.c:176 misc/e2undo.c:473 misc/e2undo.c:479 misc/e2undo.c:485
#: misc/mke2fs.c:353
msgid "while allocating memory"
@@ -3854,7 +3854,7 @@
msgid "while creating symlink \"%s\""
msgstr ""
-#: misc/create_inode.c:361 misc/create_inode.c:837
+#: misc/create_inode.c:361 misc/create_inode.c:838
#, c-format
msgid "while looking up \"%s\""
msgstr ""
@@ -3864,79 +3864,79 @@
msgid "while creating directory \"%s\""
msgstr ""
-#: misc/create_inode.c:608
+#: misc/create_inode.c:609
#, c-format
msgid "while opening \"%s\" to copy"
msgstr ""
-#: misc/create_inode.c:700
+#: misc/create_inode.c:701
#, c-format
msgid "while changing working directory to \"%s\""
msgstr ""
-#: misc/create_inode.c:708
+#: misc/create_inode.c:709
#, c-format
msgid "while opening directory \"%s\""
msgstr ""
-#: misc/create_inode.c:718
+#: misc/create_inode.c:719
#, c-format
msgid "while lstat \"%s\""
msgstr ""
-#: misc/create_inode.c:751
+#: misc/create_inode.c:752
#, c-format
msgid "while creating special file \"%s\""
msgstr ""
-#: misc/create_inode.c:760
+#: misc/create_inode.c:761
msgid "malloc failed"
msgstr ""
-#: misc/create_inode.c:768
+#: misc/create_inode.c:769
#, c-format
msgid "while trying to read link \"%s\""
msgstr ""
-#: misc/create_inode.c:775
+#: misc/create_inode.c:776
msgid "symlink increased in size between lstat() and readlink()"
msgstr ""
-#: misc/create_inode.c:786
+#: misc/create_inode.c:787
#, c-format
msgid "while writing symlink\"%s\""
msgstr ""
-#: misc/create_inode.c:796
+#: misc/create_inode.c:797
#, c-format
msgid "while writing file \"%s\""
msgstr ""
-#: misc/create_inode.c:809
+#: misc/create_inode.c:810
#, c-format
msgid "while making dir \"%s\""
msgstr ""
-#: misc/create_inode.c:826
+#: misc/create_inode.c:827
msgid "while changing directory"
msgstr ""
-#: misc/create_inode.c:832
+#: misc/create_inode.c:833
#, c-format
msgid "ignoring entry \"%s\""
msgstr ""
-#: misc/create_inode.c:845
+#: misc/create_inode.c:846
#, c-format
msgid "while setting inode for \"%s\""
msgstr ""
-#: misc/create_inode.c:852
+#: misc/create_inode.c:853
#, c-format
msgid "while setting xattrs for \"%s\""
msgstr ""
-#: misc/create_inode.c:870
+#: misc/create_inode.c:871
msgid "while saving inode data"
msgstr ""
@@ -4127,7 +4127,7 @@
msgid "Journal users: %s\n"
msgstr ""
-#: misc/dumpe2fs.c:530 misc/mke2fs.c:785 misc/tune2fs.c:1930
+#: misc/dumpe2fs.c:530 misc/mke2fs.c:786 misc/tune2fs.c:1930
msgid "Couldn't allocate memory to parse options!\n"
msgstr ""
@@ -4155,7 +4155,7 @@
"\tblocksize=<blocksize>\n"
msgstr ""
-#: misc/dumpe2fs.c:646 misc/mke2fs.c:1815
+#: misc/dumpe2fs.c:646 misc/mke2fs.c:1816
#, c-format
msgid "\tUsing %s\n"
msgstr ""
@@ -4901,7 +4901,7 @@
"Could not write %d blocks in inode table starting at %llu: %s\n"
msgstr ""
-#: misc/mke2fs.c:444 misc/mke2fs.c:2654 misc/mke2fs.c:3030
+#: misc/mke2fs.c:444 misc/mke2fs.c:2673 misc/mke2fs.c:3049
msgid "done \n"
msgstr ""
@@ -4961,170 +4961,170 @@
msgid "while zeroing journal device (block %llu, count %d)"
msgstr ""
-#: misc/mke2fs.c:637
+#: misc/mke2fs.c:638
msgid "while writing journal superblock"
msgstr ""
-#: misc/mke2fs.c:652
+#: misc/mke2fs.c:653
#, c-format
msgid "Creating filesystem with %llu %dk blocks and %u inodes\n"
msgstr ""
-#: misc/mke2fs.c:660
+#: misc/mke2fs.c:661
#, c-format
msgid ""
"warning: %llu blocks unused.\n"
"\n"
msgstr ""
-#: misc/mke2fs.c:665
+#: misc/mke2fs.c:666
#, c-format
msgid "Filesystem label=%s\n"
msgstr ""
-#: misc/mke2fs.c:668
+#: misc/mke2fs.c:669
#, c-format
msgid "OS type: %s\n"
msgstr ""
-#: misc/mke2fs.c:670
+#: misc/mke2fs.c:671
#, c-format
msgid "Block size=%u (log=%u)\n"
msgstr ""
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:674
#, c-format
msgid "Cluster size=%u (log=%u)\n"
msgstr ""
-#: misc/mke2fs.c:677
+#: misc/mke2fs.c:678
#, c-format
msgid "Fragment size=%u (log=%u)\n"
msgstr ""
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:680
#, c-format
msgid "Stride=%u blocks, Stripe width=%u blocks\n"
msgstr ""
-#: misc/mke2fs.c:681
+#: misc/mke2fs.c:682
#, c-format
msgid "%u inodes, %llu blocks\n"
msgstr ""
-#: misc/mke2fs.c:683
+#: misc/mke2fs.c:684
#, c-format
msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
msgstr ""
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:687
#, c-format
msgid "First data block=%u\n"
msgstr ""
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:689
#, c-format
msgid "Root directory owner=%u:%u\n"
msgstr ""
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:691
#, c-format
msgid "Maximum filesystem blocks=%lu\n"
msgstr ""
-#: misc/mke2fs.c:694
+#: misc/mke2fs.c:695
#, c-format
msgid "%u block groups\n"
msgstr ""
-#: misc/mke2fs.c:696
+#: misc/mke2fs.c:697
#, c-format
msgid "%u block group\n"
msgstr ""
-#: misc/mke2fs.c:698
+#: misc/mke2fs.c:699
#, c-format
msgid "%u blocks per group, %u clusters per group\n"
msgstr ""
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:702
#, c-format
msgid "%u blocks per group, %u fragments per group\n"
msgstr ""
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:704
#, c-format
msgid "%u inodes per group\n"
msgstr ""
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:713
#, c-format
msgid "Filesystem UUID: %s\n"
msgstr ""
-#: misc/mke2fs.c:713
+#: misc/mke2fs.c:714
msgid "Superblock backups stored on blocks: "
msgstr ""
-#: misc/mke2fs.c:807
+#: misc/mke2fs.c:808
#, c-format
msgid "%s requires '-O 64bit'\n"
msgstr ""
-#: misc/mke2fs.c:813
+#: misc/mke2fs.c:814
#, c-format
msgid "'%s' must be before 'resize=%u'\n"
msgstr ""
-#: misc/mke2fs.c:826
+#: misc/mke2fs.c:827
#, c-format
msgid "Invalid desc_size: '%s'\n"
msgstr ""
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:840
#, c-format
msgid "Invalid offset: %s\n"
msgstr ""
-#: misc/mke2fs.c:853 misc/tune2fs.c:1958
+#: misc/mke2fs.c:854 misc/tune2fs.c:1958
#, c-format
msgid "Invalid mmp_update_interval: %s\n"
msgstr ""
-#: misc/mke2fs.c:867
+#: misc/mke2fs.c:868
#, c-format
msgid "Invalid # of backup superblocks: %s\n"
msgstr ""
-#: misc/mke2fs.c:889
+#: misc/mke2fs.c:890
#, c-format
msgid "Invalid stride parameter: %s\n"
msgstr ""
-#: misc/mke2fs.c:904
+#: misc/mke2fs.c:905
#, c-format
msgid "Invalid stripe-width parameter: %s\n"
msgstr ""
-#: misc/mke2fs.c:927
+#: misc/mke2fs.c:928
#, c-format
msgid "Invalid resize parameter: %s\n"
msgstr ""
-#: misc/mke2fs.c:934
+#: misc/mke2fs.c:935
msgid "The resize maximum must be greater than the filesystem size.\n"
msgstr ""
-#: misc/mke2fs.c:958
+#: misc/mke2fs.c:959
msgid "On-line resizing not supported with revision 0 filesystems\n"
msgstr ""
-#: misc/mke2fs.c:984 misc/mke2fs.c:993
+#: misc/mke2fs.c:985 misc/mke2fs.c:994
#, c-format
msgid "Invalid root_owner: '%s'\n"
msgstr ""
-#: misc/mke2fs.c:1034
+#: misc/mke2fs.c:1035
#, c-format
msgid ""
"\n"
@@ -5151,7 +5151,7 @@
"\n"
msgstr ""
-#: misc/mke2fs.c:1059
+#: misc/mke2fs.c:1060
#, c-format
msgid ""
"\n"
@@ -5159,41 +5159,41 @@
"\n"
msgstr ""
-#: misc/mke2fs.c:1101
+#: misc/mke2fs.c:1102
#, c-format
msgid ""
"Syntax error in mke2fs config file (%s, line #%d)\n"
"\t%s\n"
msgstr ""
-#: misc/mke2fs.c:1114 misc/tune2fs.c:1007
+#: misc/mke2fs.c:1115 misc/tune2fs.c:1007
#, c-format
msgid "Invalid filesystem option set: %s\n"
msgstr ""
-#: misc/mke2fs.c:1126 misc/tune2fs.c:406
+#: misc/mke2fs.c:1127 misc/tune2fs.c:406
#, c-format
msgid "Invalid mount option set: %s\n"
msgstr ""
-#: misc/mke2fs.c:1262
+#: misc/mke2fs.c:1263
#, c-format
msgid ""
"\n"
"Your mke2fs.conf file does not define the %s filesystem type.\n"
msgstr ""
-#: misc/mke2fs.c:1266
+#: misc/mke2fs.c:1267
msgid ""
"You probably need to install an updated mke2fs.conf file.\n"
"\n"
msgstr ""
-#: misc/mke2fs.c:1270
+#: misc/mke2fs.c:1271
msgid "Aborting...\n"
msgstr ""
-#: misc/mke2fs.c:1311
+#: misc/mke2fs.c:1312
#, c-format
msgid ""
"\n"
@@ -5201,154 +5201,154 @@
"\n"
msgstr ""
-#: misc/mke2fs.c:1493
+#: misc/mke2fs.c:1494
msgid "Couldn't allocate memory for new PATH.\n"
msgstr ""
-#: misc/mke2fs.c:1534
+#: misc/mke2fs.c:1535
#, c-format
msgid "Couldn't init profile successfully (error: %ld).\n"
msgstr ""
-#: misc/mke2fs.c:1567
+#: misc/mke2fs.c:1568
#, c-format
msgid "invalid block size - %s"
msgstr ""
-#: misc/mke2fs.c:1571
+#: misc/mke2fs.c:1572
#, c-format
msgid "Warning: blocksize %d not usable on most systems.\n"
msgstr ""
-#: misc/mke2fs.c:1587
+#: misc/mke2fs.c:1588
#, c-format
msgid "invalid cluster size - %s"
msgstr ""
-#: misc/mke2fs.c:1600
+#: misc/mke2fs.c:1601
msgid "'-R' is deprecated, use '-E' instead"
msgstr ""
-#: misc/mke2fs.c:1614 misc/tune2fs.c:1687
+#: misc/mke2fs.c:1615 misc/tune2fs.c:1687
#, c-format
msgid "bad error behavior - %s"
msgstr ""
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1627
msgid "Illegal number for blocks per group"
msgstr ""
-#: misc/mke2fs.c:1631
+#: misc/mke2fs.c:1632
msgid "blocks per group must be multiple of 8"
msgstr ""
-#: misc/mke2fs.c:1639
+#: misc/mke2fs.c:1640
msgid "Illegal number for flex_bg size"
msgstr ""
-#: misc/mke2fs.c:1645
+#: misc/mke2fs.c:1646
msgid "flex_bg size must be a power of 2"
msgstr ""
-#: misc/mke2fs.c:1650
+#: misc/mke2fs.c:1651
#, c-format
msgid "flex_bg size (%lu) must be less than or equal to 2^31"
msgstr ""
-#: misc/mke2fs.c:1660
+#: misc/mke2fs.c:1661
#, c-format
msgid "invalid inode ratio %s (min %d/max %d)"
msgstr ""
-#: misc/mke2fs.c:1670
+#: misc/mke2fs.c:1671
#, c-format
msgid "invalid inode size - %s"
msgstr ""
-#: misc/mke2fs.c:1683
+#: misc/mke2fs.c:1684
msgid ""
"Warning: -K option is deprecated and should not be used anymore. Use '-E "
"nodiscard' extended option instead!\n"
msgstr ""
-#: misc/mke2fs.c:1694
+#: misc/mke2fs.c:1695
msgid "in malloc for bad_blocks_filename"
msgstr ""
-#: misc/mke2fs.c:1703
+#: misc/mke2fs.c:1704
#, c-format
msgid ""
"Warning: label too long; will be truncated to '%s'\n"
"\n"
msgstr ""
-#: misc/mke2fs.c:1712
+#: misc/mke2fs.c:1713
#, c-format
msgid "invalid reserved blocks percent - %s"
msgstr ""
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:1728
#, c-format
msgid "bad num inodes - %s"
msgstr ""
-#: misc/mke2fs.c:1740
+#: misc/mke2fs.c:1741
msgid "while allocating fs_feature string"
msgstr ""
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:1758
#, c-format
msgid "bad revision level - %s"
msgstr ""
-#: misc/mke2fs.c:1762
+#: misc/mke2fs.c:1763
#, c-format
msgid "while trying to create revision %d"
msgstr ""
-#: misc/mke2fs.c:1776
+#: misc/mke2fs.c:1777
msgid "The -t option may only be used once"
msgstr ""
-#: misc/mke2fs.c:1784
+#: misc/mke2fs.c:1785
msgid "The -T option may only be used once"
msgstr ""
-#: misc/mke2fs.c:1840 misc/mke2fs.c:3114
+#: misc/mke2fs.c:1841 misc/mke2fs.c:3133
#, c-format
msgid "while trying to open journal device %s\n"
msgstr ""
-#: misc/mke2fs.c:1846
+#: misc/mke2fs.c:1847
#, c-format
msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
msgstr ""
-#: misc/mke2fs.c:1852
+#: misc/mke2fs.c:1853
#, c-format
msgid "Using journal device's blocksize: %d\n"
msgstr ""
-#: misc/mke2fs.c:1863
+#: misc/mke2fs.c:1864
#, c-format
msgid "invalid blocks '%s' on device '%s'"
msgstr ""
-#: misc/mke2fs.c:1887
+#: misc/mke2fs.c:1888
msgid "filesystem"
msgstr ""
-#: misc/mke2fs.c:1900 resize/main.c:491
+#: misc/mke2fs.c:1901 resize/main.c:491
msgid "while trying to determine filesystem size"
msgstr ""
-#: misc/mke2fs.c:1906
+#: misc/mke2fs.c:1907
msgid ""
"Couldn't determine device size; you must specify\n"
"the size of the filesystem\n"
msgstr ""
-#: misc/mke2fs.c:1913
+#: misc/mke2fs.c:1914
msgid ""
"Device size reported to be zero. Invalid partition specified, or\n"
"\tpartition table wasn't reread after running fdisk, due to\n"
@@ -5356,121 +5356,128 @@
"\tto re-read your partition table.\n"
msgstr ""
-#: misc/mke2fs.c:1930
+#: misc/mke2fs.c:1931
msgid "Filesystem larger than apparent device size."
msgstr ""
-#: misc/mke2fs.c:1950
+#: misc/mke2fs.c:1951
msgid "Failed to parse fs types list\n"
msgstr ""
-#: misc/mke2fs.c:1998
+#: misc/mke2fs.c:1999
msgid "The HURD does not support the filetype feature.\n"
msgstr ""
-#: misc/mke2fs.c:2003
+#: misc/mke2fs.c:2004
msgid "The HURD does not support the huge_file feature.\n"
msgstr ""
-#: misc/mke2fs.c:2008
+#: misc/mke2fs.c:2009
msgid "The HURD does not support the metadata_csum feature.\n"
msgstr ""
-#: misc/mke2fs.c:2018
+#: misc/mke2fs.c:2019
msgid "while trying to determine hardware sector size"
msgstr ""
-#: misc/mke2fs.c:2024
+#: misc/mke2fs.c:2025
msgid "while trying to determine physical sector size"
msgstr ""
-#: misc/mke2fs.c:2056
+#: misc/mke2fs.c:2057
msgid "while setting blocksize; too small for device\n"
msgstr ""
-#: misc/mke2fs.c:2061
+#: misc/mke2fs.c:2062
#, c-format
msgid ""
"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
msgstr ""
-#: misc/mke2fs.c:2085
+#: misc/mke2fs.c:2086
#, c-format
msgid ""
"%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
"\tin 32 bits using a blocksize of %d.\n"
msgstr ""
-#: misc/mke2fs.c:2101
+#: misc/mke2fs.c:2098
+#, c-format
+msgid ""
+"%s: Size of device (0x%llx blocks) %s too big to create\n"
+"\ta filesystem using a blocksize of %d.\n"
+msgstr ""
+
+#: misc/mke2fs.c:2120
msgid "fs_types for mke2fs.conf resolution: "
msgstr ""
-#: misc/mke2fs.c:2108
+#: misc/mke2fs.c:2127
msgid "Filesystem features not supported with revision 0 filesystems\n"
msgstr ""
-#: misc/mke2fs.c:2116
+#: misc/mke2fs.c:2135
msgid "Sparse superblocks not supported with revision 0 filesystems\n"
msgstr ""
-#: misc/mke2fs.c:2126
+#: misc/mke2fs.c:2145
msgid "Journals not supported with revision 0 filesystems\n"
msgstr ""
-#: misc/mke2fs.c:2139
+#: misc/mke2fs.c:2158
#, c-format
msgid "invalid reserved blocks percent - %lf"
msgstr ""
-#: misc/mke2fs.c:2156
+#: misc/mke2fs.c:2175
msgid ""
"Extents MUST be enabled for a 64-bit filesystem. Pass -O extents to "
"rectify.\n"
msgstr ""
-#: misc/mke2fs.c:2176
+#: misc/mke2fs.c:2195
msgid "The cluster size may not be smaller than the block size.\n"
msgstr ""
-#: misc/mke2fs.c:2182
+#: misc/mke2fs.c:2201
msgid "specifying a cluster size requires the bigalloc feature"
msgstr ""
-#: misc/mke2fs.c:2202
+#: misc/mke2fs.c:2221
#, c-format
msgid "warning: Unable to get device geometry for %s\n"
msgstr ""
-#: misc/mke2fs.c:2205
+#: misc/mke2fs.c:2224
#, c-format
msgid "%s alignment is offset by %lu bytes.\n"
msgstr ""
-#: misc/mke2fs.c:2207
+#: misc/mke2fs.c:2226
#, c-format
msgid ""
"This may result in very poor performance, (re)-partitioning suggested.\n"
msgstr ""
-#: misc/mke2fs.c:2228
+#: misc/mke2fs.c:2247
#, c-format
msgid "%d-byte blocks too big for system (max %d)"
msgstr ""
-#: misc/mke2fs.c:2232
+#: misc/mke2fs.c:2251
#, c-format
msgid ""
"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
msgstr ""
-#: misc/mke2fs.c:2240
+#: misc/mke2fs.c:2259
#, c-format
msgid ""
"Suggestion: Use Linux kernel >= 3.18 for improved stability of the metadata "
"and journal checksum features.\n"
msgstr ""
-#: misc/mke2fs.c:2295
+#: misc/mke2fs.c:2314
#, c-format
msgid ""
"\n"
@@ -5480,17 +5487,17 @@
"\n"
msgstr ""
-#: misc/mke2fs.c:2312
+#: misc/mke2fs.c:2331
msgid "Can't support bigalloc feature without extents feature"
msgstr ""
-#: misc/mke2fs.c:2319
+#: misc/mke2fs.c:2338
msgid ""
"The resize_inode and meta_bg features are not compatible.\n"
"They can not be both enabled simultaneously.\n"
msgstr ""
-#: misc/mke2fs.c:2327
+#: misc/mke2fs.c:2346
msgid ""
"\n"
"Warning: the bigalloc feature is still under development\n"
@@ -5498,44 +5505,44 @@
"\n"
msgstr ""
-#: misc/mke2fs.c:2339
+#: misc/mke2fs.c:2358
msgid "reserved online resize blocks not supported on non-sparse filesystem"
msgstr ""
-#: misc/mke2fs.c:2348
+#: misc/mke2fs.c:2367
msgid "blocks per group count out of range"
msgstr ""
-#: misc/mke2fs.c:2370
+#: misc/mke2fs.c:2389
msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
msgstr ""
-#: misc/mke2fs.c:2382
+#: misc/mke2fs.c:2401
#, c-format
msgid "invalid inode size %d (min %d/max %d)"
msgstr ""
-#: misc/mke2fs.c:2397
+#: misc/mke2fs.c:2416
#, c-format
msgid "%d byte inodes are too small for inline data; specify larger size"
msgstr ""
-#: misc/mke2fs.c:2410
+#: misc/mke2fs.c:2429
#, c-format
msgid "%d byte inodes are too small for project quota; specify larger size"
msgstr ""
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2444
#, c-format
msgid "too many inodes (%llu), raise inode ratio?"
msgstr ""
-#: misc/mke2fs.c:2432
+#: misc/mke2fs.c:2451
#, c-format
msgid "too many inodes (%llu), specify < 2^32 inodes"
msgstr ""
-#: misc/mke2fs.c:2446
+#: misc/mke2fs.c:2465
#, c-format
msgid ""
"inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -5543,151 +5550,151 @@
"\tor lower inode count (-N).\n"
msgstr ""
-#: misc/mke2fs.c:2633
+#: misc/mke2fs.c:2652
msgid "Discarding device blocks: "
msgstr ""
-#: misc/mke2fs.c:2649
+#: misc/mke2fs.c:2668
msgid "failed - "
msgstr ""
-#: misc/mke2fs.c:2708
+#: misc/mke2fs.c:2727
msgid "while initializing quota context"
msgstr ""
-#: misc/mke2fs.c:2715
+#: misc/mke2fs.c:2734
msgid "while writing quota inodes"
msgstr ""
-#: misc/mke2fs.c:2740
+#: misc/mke2fs.c:2759
#, c-format
msgid "bad error behavior in profile - %s"
msgstr ""
-#: misc/mke2fs.c:2814
+#: misc/mke2fs.c:2833
msgid "while setting up superblock"
msgstr ""
-#: misc/mke2fs.c:2830
+#: misc/mke2fs.c:2849
msgid ""
"Extents are not enabled. The file extent tree can be checksummed, whereas "
"block maps cannot. Not enabling extents reduces the coverage of metadata "
"checksumming. Pass -O extents to rectify.\n"
msgstr ""
-#: misc/mke2fs.c:2837
+#: misc/mke2fs.c:2856
msgid ""
"64-bit filesystem support is not enabled. The larger fields afforded by "
"this feature enable full-strength checksumming. Pass -O 64bit to rectify.\n"
msgstr ""
-#: misc/mke2fs.c:2845
+#: misc/mke2fs.c:2864
msgid "The metadata_csum_seed feature requres the metadata_csum feature.\n"
msgstr ""
-#: misc/mke2fs.c:2869
+#: misc/mke2fs.c:2888
msgid "Discard succeeded and will return 0s - skipping inode table wipe\n"
msgstr ""
-#: misc/mke2fs.c:2955
+#: misc/mke2fs.c:2974
#, c-format
msgid "unknown os - %s"
msgstr ""
-#: misc/mke2fs.c:3018
+#: misc/mke2fs.c:3037
msgid "Allocating group tables: "
msgstr ""
-#: misc/mke2fs.c:3026
+#: misc/mke2fs.c:3045
msgid "while trying to allocate filesystem tables"
msgstr ""
-#: misc/mke2fs.c:3035
+#: misc/mke2fs.c:3054
msgid ""
"\n"
"\twhile converting subcluster bitmap"
msgstr ""
-#: misc/mke2fs.c:3041
+#: misc/mke2fs.c:3060
#, c-format
msgid "%s may be further corrupted by superblock rewrite\n"
msgstr ""
-#: misc/mke2fs.c:3082
+#: misc/mke2fs.c:3101
#, c-format
msgid "while zeroing block %llu at end of filesystem"
msgstr ""
-#: misc/mke2fs.c:3095
+#: misc/mke2fs.c:3114
msgid "while reserving blocks for online resize"
msgstr ""
-#: misc/mke2fs.c:3107 misc/tune2fs.c:1415
+#: misc/mke2fs.c:3126 misc/tune2fs.c:1415
msgid "journal"
msgstr ""
-#: misc/mke2fs.c:3119
+#: misc/mke2fs.c:3138
#, c-format
msgid "Adding journal to device %s: "
msgstr ""
-#: misc/mke2fs.c:3126
+#: misc/mke2fs.c:3145
#, c-format
msgid ""
"\n"
"\twhile trying to add journal to device %s"
msgstr ""
-#: misc/mke2fs.c:3131 misc/mke2fs.c:3160 misc/mke2fs.c:3200
+#: misc/mke2fs.c:3150 misc/mke2fs.c:3179 misc/mke2fs.c:3219
#: misc/mk_hugefiles.c:510 misc/tune2fs.c:1444 misc/tune2fs.c:1463
msgid "done\n"
msgstr ""
-#: misc/mke2fs.c:3137
+#: misc/mke2fs.c:3156
msgid "Skipping journal creation in super-only mode\n"
msgstr ""
-#: misc/mke2fs.c:3147
+#: misc/mke2fs.c:3166
#, c-format
msgid "Creating journal (%u blocks): "
msgstr ""
-#: misc/mke2fs.c:3156
+#: misc/mke2fs.c:3175
msgid ""
"\n"
"\twhile trying to create journal"
msgstr ""
-#: misc/mke2fs.c:3168 misc/tune2fs.c:1072
+#: misc/mke2fs.c:3187 misc/tune2fs.c:1072
msgid ""
"\n"
"Error while enabling multiple mount protection feature."
msgstr ""
-#: misc/mke2fs.c:3173
+#: misc/mke2fs.c:3192
#, c-format
msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
msgstr ""
-#: misc/mke2fs.c:3191
+#: misc/mke2fs.c:3210
msgid "Copying files into the device: "
msgstr ""
-#: misc/mke2fs.c:3197
+#: misc/mke2fs.c:3216
msgid "while populating file system"
msgstr ""
-#: misc/mke2fs.c:3204
+#: misc/mke2fs.c:3223
msgid "Writing superblocks and filesystem accounting information: "
msgstr ""
-#: misc/mke2fs.c:3211
+#: misc/mke2fs.c:3230
msgid ""
"\n"
-"Warning, had trouble writing out superblocks."
+"Warning, had trouble writing out superblocks.\n"
msgstr ""
-#: misc/mke2fs.c:3213
+#: misc/mke2fs.c:3232
msgid ""
"done\n"
"\n"
@@ -5722,7 +5729,7 @@
msgid "Usage: mklost+found\n"
msgstr ""
-#: misc/partinfo.c:41
+#: misc/partinfo.c:43
#, c-format
msgid ""
"Usage: %s device...\n"
@@ -5732,22 +5739,22 @@
"\n"
msgstr ""
-#: misc/partinfo.c:51
+#: misc/partinfo.c:53
#, c-format
msgid "Cannot open %s: %s"
msgstr ""
-#: misc/partinfo.c:57
+#: misc/partinfo.c:59
#, c-format
msgid "Cannot get geometry of %s: %s"
msgstr ""
-#: misc/partinfo.c:65
+#: misc/partinfo.c:67
#, c-format
msgid "Cannot get size of %s: %s"
msgstr ""
-#: misc/partinfo.c:71
+#: misc/partinfo.c:73
#, c-format
msgid "%s: h=%3d s=%3d c=%4d start=%8d size=%8lu end=%8d\n"
msgstr ""
@@ -6866,7 +6873,7 @@
msgstr ""
#: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.43.2"
+msgid "EXT2FS Library version 1.43.4-WIP"
msgstr ""
#: lib/ext2fs/ext2_err.c:12
@@ -7701,68 +7708,68 @@
msgid "Bad magic value in profile_file_data_t"
msgstr ""
-#: lib/support/plausible.c:107
+#: lib/support/plausible.c:118
#, c-format
msgid "\tlast mounted on %s on %s"
msgstr ""
-#: lib/support/plausible.c:110
+#: lib/support/plausible.c:121
#, c-format
msgid "\tlast mounted on %s"
msgstr ""
-#: lib/support/plausible.c:113
+#: lib/support/plausible.c:124
#, c-format
msgid "\tcreated on %s"
msgstr ""
-#: lib/support/plausible.c:116
+#: lib/support/plausible.c:127
#, c-format
msgid "\tlast modified on %s"
msgstr ""
-#: lib/support/plausible.c:150
+#: lib/support/plausible.c:161
#, c-format
msgid "Found a %s partition table in %s\n"
msgstr ""
-#: lib/support/plausible.c:180
+#: lib/support/plausible.c:191
#, c-format
msgid "The file %s does not exist and no size was specified.\n"
msgstr ""
-#: lib/support/plausible.c:188
+#: lib/support/plausible.c:199
#, c-format
msgid "Creating regular file %s\n"
msgstr ""
-#: lib/support/plausible.c:191
+#: lib/support/plausible.c:202
#, c-format
msgid "Could not open %s: %s\n"
msgstr ""
-#: lib/support/plausible.c:194
+#: lib/support/plausible.c:205
msgid ""
"\n"
"The device apparently does not exist; did you specify it correctly?\n"
msgstr ""
-#: lib/support/plausible.c:216
+#: lib/support/plausible.c:227
#, c-format
msgid "%s is not a block special device.\n"
msgstr ""
-#: lib/support/plausible.c:238
+#: lib/support/plausible.c:249
#, c-format
msgid "%s contains a %s file system labelled '%s'\n"
msgstr ""
-#: lib/support/plausible.c:241
+#: lib/support/plausible.c:252
#, c-format
msgid "%s contains a %s file system\n"
msgstr ""
-#: lib/support/plausible.c:265
+#: lib/support/plausible.c:276
#, c-format
msgid "%s contains `%s' data\n"
msgstr ""
diff --git a/resize/main.c b/resize/main.c
index 5a99483..396391b 100644
--- a/resize/main.c
+++ b/resize/main.c
@@ -505,7 +505,7 @@
new_size = max_size;
/* Round down to an even multiple of a pagesize */
if (sys_page_size > blocksize)
- new_size &= ~((sys_page_size / blocksize)-1);
+ new_size &= ~((blk64_t)((sys_page_size / blocksize)-1));
}
/* If changing 64bit, don't change the filesystem size. */
if (flags & (RESIZE_DISABLE_64BIT | RESIZE_ENABLE_64BIT)) {
diff --git a/tests/d_inline_dump/expect b/tests/d_inline_dump/expect
index c84f64d..b685135 100644
--- a/tests/d_inline_dump/expect
+++ b/tests/d_inline_dump/expect
@@ -12,7 +12,7 @@
Size of extra inode fields: 28
Extended attributes:
system.data (20)
- user.a = "b" (1)
+ user.a (1) = "b"
Size of inline data: 80
*** short file
Inode: 18 Type: regular Mode: 0644 Flags: 0x10000000
@@ -28,7 +28,7 @@
Size of extra inode fields: 28
Extended attributes:
system.data (0)
- user.a = "b" (1)
+ user.a (1) = "b"
Size of inline data: 60
*** long dir
@@ -45,7 +45,7 @@
Size of extra inode fields: 28
Extended attributes:
system.data (72)
- user.a = "b" (1)
+ user.a (1) = "b"
Size of inline data: 132
*** short dir
Inode: 20 Type: directory Mode: 0755 Flags: 0x10000000
@@ -61,7 +61,7 @@
Size of extra inode fields: 28
Extended attributes:
system.data (0)
- user.a = "b" (1)
+ user.a (1) = "b"
Size of inline data: 60
*** long link
diff --git a/tests/d_xattr_edits/expect b/tests/d_xattr_edits/expect
index 4db5414..38f3030 100644
--- a/tests/d_xattr_edits/expect
+++ b/tests/d_xattr_edits/expect
@@ -7,11 +7,12 @@
Exit status is 0
ea_list /
Extended attributes:
- user.joe = "smith" (5)
- user.moo = "FEE_FIE_FOE_FUMMMMMM" (20)
+ user.joe (5) = "smith"
+ user.moo (20) = "FEE_FIE_FOE_FUMMMMMM"
Exit status is 0
ea_get / user.moo
-FEE_FIE_FOE_FUMMMMMM
+user.moo (20) = "FEE_FIE_FOE_FUMMMMMM"
+
Exit status is 0
ea_get / nosuchea
ea_get: Extended attribute key not found while getting extended attribute
@@ -22,7 +23,7 @@
Exit status is 0
ea_list /
Extended attributes:
- user.joe = "smith" (5)
+ user.joe (5) = "smith"
Exit status is 0
ea_get / user.moo
ea_get: Extended attribute key not found while getting extended attribute
@@ -35,7 +36,11 @@
Exit status is 0
ea_list /
Extended attributes:
- user.file_based_xattr = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\012" (108)
+ user.file_based_xattr (108)
+Exit status is 0
+ea_get / user.file_based_xattr
+user.file_based_xattr (108) = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\n"
+
Exit status is 0
ea_get -f d_xattr_edits.ver.tmp / user.file_based_xattr
Exit status is 0
diff --git a/tests/d_xattr_edits/script b/tests/d_xattr_edits/script
index 2e356e8..df2a530 100644
--- a/tests/d_xattr_edits/script
+++ b/tests/d_xattr_edits/script
@@ -96,6 +96,12 @@
echo Exit status is $status >> $OUT.new
sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+echo "ea_get / user.file_based_xattr" > $OUT.new
+$DEBUGFS -w -R "ea_get / user.file_based_xattr" $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
echo "ea_get -f $VERIFY_DATA / user.file_based_xattr" > $OUT.new
$DEBUGFS -w -R "ea_get -f $VERIFY_DATA / user.file_based_xattr" $TMPFILE >> $OUT.new 2>&1
status=$?
diff --git a/tests/d_xattr_sorting/expect b/tests/d_xattr_sorting/expect
index 30a6eab..3fd06fa 100644
--- a/tests/d_xattr_sorting/expect
+++ b/tests/d_xattr_sorting/expect
@@ -9,12 +9,17 @@
Exit status is 0
ea_list /
Extended attributes:
- user.moo = "cow" (3)
- security.imb = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (256)
- security.SMEG64 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (256)
+ user.moo (3) = "cow"
+ security.imb (256)
+ security.SMEG64 (256)
Exit status is 0
ea_get / security.imb
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+security.imb (256) = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+
+Exit status is 0
+ea_get / security.SMEG64
+security.SMEG64 (256) = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+
Exit status is 0
ea_get / nosuchea
ea_get: Extended attribute key not found while getting extended attribute
diff --git a/tests/d_xattr_sorting/script b/tests/d_xattr_sorting/script
index 8d5602e..459a66a 100644
--- a/tests/d_xattr_sorting/script
+++ b/tests/d_xattr_sorting/script
@@ -54,6 +54,12 @@
echo Exit status is $status >> $OUT.new
sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+echo "ea_get / security.SMEG64" > $OUT.new
+$DEBUGFS -w -R "ea_get / security.SMEG64" $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
echo "ea_get / nosuchea" > $OUT.new
$DEBUGFS -w -R "ea_get / nosuchea" $TMPFILE >> $OUT.new 2>&1
status=$?
diff --git a/tests/f_mke2fs_baddisk/script b/tests/f_mke2fs_baddisk/script
new file mode 100644
index 0000000..0e6d3cd
--- /dev/null
+++ b/tests/f_mke2fs_baddisk/script
@@ -0,0 +1,26 @@
+test_description="mke2fs /dev/mapper/bad_disk should fail"
+
+OUT=$test_name.log
+
+dmsetup create -v bad_disk --table '0 1148681097 error' > $OUT 2>&1
+status=$?
+if [ "$status" != 0 ]; then
+ echo "$test_name: $test_description: skip"
+ touch $test_name.ok
+ exit 0
+fi
+
+echo mke2fs /dev/mapper/bad_disk >> $OUT
+$MKE2FS /dev/mapper/bad_disk >> $OUT 2>&1
+status=$?
+sleep 1
+dmsetup remove --retry bad_disk >> $OUT 2>&1
+
+if [ "$status" = 0 ] ; then
+ ln -f $test_name.log $test_name.failed
+ echo "$test_name: $test_description: failed"
+else
+ echo "$test_name: $test_description: ok"
+ touch $test_name.ok
+
+fi
diff --git a/tests/f_quota/expect.0 b/tests/f_quota/expect.0
index c0ad63d..eb5294e 100644
--- a/tests/f_quota/expect.0
+++ b/tests/f_quota/expect.0
@@ -1,21 +1,21 @@
debugfs: list_quota user
- user id blocks quota limit inodes quota limit
- 0 13312 0 0 2 0 0
- 34 1024 0 0 1 0 0
- 100 2048 32 50 2 20 30
+ user id blocks quota limit inodes quota limit
+ 0 13312 0 0 2 0 0
+ 34 1024 0 0 1 0 0
+ 100 2048 32 50 2 20 30
debugfs: list_quota group
-group id blocks quota limit inodes quota limit
- 0 16384 0 0 5 0 0
+ group id blocks quota limit inodes quota limit
+ 0 16384 0 0 5 0 0
debugfs: get_quota user 0
- user id blocks quota limit inodes quota limit
- 0 13312 0 0 2 0 0
+ user id blocks quota limit inodes quota limit
+ 0 13312 0 0 2 0 0
debugfs: get_quota user 100
- user id blocks quota limit inodes quota limit
- 100 2048 32 50 2 20 30
+ user id blocks quota limit inodes quota limit
+ 100 2048 32 50 2 20 30
debugfs: get_quota user 34
- user id blocks quota limit inodes quota limit
- 34 1024 0 0 1 0 0
+ user id blocks quota limit inodes quota limit
+ 34 1024 0 0 1 0 0
debugfs: get_quota group 0
-group id blocks quota limit inodes quota limit
- 0 16384 0 0 5 0 0
+ group id blocks quota limit inodes quota limit
+ 0 16384 0 0 5 0 0
debugfs:
diff --git a/tests/r_inline_xattr/expect b/tests/r_inline_xattr/expect
index 3feba08..885de59 100644
--- a/tests/r_inline_xattr/expect
+++ b/tests/r_inline_xattr/expect
@@ -1,14 +1,14 @@
resize2fs test
-debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|name = ''
+debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|user.name (''
Inode: 1550 Type: regular Mode: 0644 Flags: 0x0
- user.name = "propervalue" (11)
+ user.name (11) = "propervalue"
Exit status is 0
resize2fs test.img 5M
Resizing the filesystem on test.img to 5120 (1k) blocks.
The filesystem on test.img is now 5120 (1k) blocks long.
Exit status is 0
-debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|name = ''
+debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|user.name (''
Inode: 12 Type: regular Mode: 0644 Flags: 0x0
- user.name = "propervalue" (11)
+ user.name (11) = "propervalue"
Exit status is 0
diff --git a/tests/r_inline_xattr/script b/tests/r_inline_xattr/script
index d882587..eb2085d 100644
--- a/tests/r_inline_xattr/script
+++ b/tests/r_inline_xattr/script
@@ -10,8 +10,8 @@
echo "resize2fs test" > $OUT
# Look at existing inline extended attribute
-echo "debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|name = ''" >> $OUT
-$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|name = " >> $OUT
+echo "debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|user.name (''" >> $OUT
+$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|user.name (" >> $OUT
status=$?
echo Exit status is $status >> $OUT
@@ -23,8 +23,8 @@
sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
# Look at inline extended attribute in resized fs
-echo "debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|name = ''" >> $OUT
-$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|name = " >> $OUT
+echo "debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|user.name (''" >> $OUT
+$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|user.name (" >> $OUT
status=$?
echo Exit status is $status >> $OUT
diff --git a/util/gen-sample-fs b/util/gen-sample-fs
new file mode 100644
index 0000000..a6d7b31
--- /dev/null
+++ b/util/gen-sample-fs
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+MNT=/mnt
+FS=/tmp/foo.img
+
+cp /dev/null $FS
+mke2fs -t ext4 -O inline_data -I 256 -b 4096 $FS 256
+mount -t ext4 $FS $MNT
+ln -s symlink_data $MNT/symlink
+for i in 30 70 500 1023 1024 1500; do
+ ln -s /$(perl -e "print 'x' x $i;") $MNT/l_$i
+done
+touch $MNT/acl
+setfacl -m u:daemon:r $MNT/acl
+setfacl -m u:bin:rx $MNT/acl
+setfacl -m g:mail:rw $MNT/acl
+setfacl -m g:daemon:r $MNT/acl
+touch $MNT/simple_acl
+setfacl -m u:daemon:r $MNT/simple_acl
+touch $MNT/xattr
+attr -s foo -V bar $MNT/xattr
+echo -e "one\n\ttwo" | attr -s quux $MNT/xattr
+echo -e "abc\001\002\003" | attr -s def $MNT/xattr
+echo file_data > $MNT/small_inline
+a="I am a very model of a modern major general;"
+a="$a I've information vegetable, animal and mineral"
+echo $a > $MNT/big_inline
+umount $MNT
+
+
diff --git a/version.h b/version.h
index c367bf8..b9e21d9 100644
--- a/version.h
+++ b/version.h
@@ -7,5 +7,5 @@
* file may be redistributed under the GNU Public License v2.
*/
-#define E2FSPROGS_VERSION "1.43.3"
-#define E2FSPROGS_DATE "04-Sep-2016"
+#define E2FSPROGS_VERSION "1.43.4-WIP"
+#define E2FSPROGS_DATE "30-Jan-2017"