[BusyBox] [PATCH] e2fs patch
Tito
farmatito at tiscali.it
Thu May 5 12:22:09 UTC 2005
Hi,
This is a first attempt to reduce the size of the new
e2fs stuff.
This is not heavily tested.
Size reduction is:
root at localhost:/dev/pts/5:/root/Desktop/busybox# size e2fsprogs/*.o
text data bss dec hex filename
1072 0 24 1096 448 e2fsprogs/chattr.o
1044 168 0 1212 4bc e2fsprogs/e2p.o
727 0 4 731 2db e2fsprogs/lsattr.o
text data bss dec hex filename
1049 0 24 1073 431 e2fsprogs/chattr.o
976 168 0 1144 478 e2fsprogs/e2p.o
687 0 4 691 2b3 e2fsprogs/lsattr.o
Please test it and apply if you think it is ok.
Ciao,
Tito
-------------- next part --------------
diff -uNr busybox_orig/e2fsprogs/chattr.c busybox/e2fsprogs/chattr.c
--- busybox_orig/e2fsprogs/chattr.c 2005-05-03 08:20:10.000000000 +0200
+++ busybox/e2fsprogs/chattr.c 2005-05-05 14:01:16.000000000 +0200
@@ -118,9 +118,10 @@
static void change_attributes(const char * name)
{
+ char *err_fmt="while %s flags on %s";
unsigned long fsflags;
STRUCT_STAT st;
-
+
if (LSTAT(name, &st) == -1) {
bb_error_msg("while trying to stat %s", name);
return;
@@ -136,14 +137,14 @@
return;
if (flags & OPT_SET_VER)
- if (fsetversion(name, version) == -1)
+ if (fgetsetversion(name, version, NULL) == -1)
bb_error_msg("while setting version on %s", name);
if (flags & OPT_SET) {
fsflags = sf;
} else {
if (fgetflags(name, &fsflags) == -1) {
- bb_error_msg("while reading flags on %s", name);
+ bb_error_msg(err_fmt, "reading", name);
goto skip_setflags;
}
if (flags & OPT_REM)
@@ -154,7 +155,7 @@
fsflags &= ~EXT2_DIRSYNC_FL;
}
if (fsetflags(name, fsflags) == -1)
- bb_error_msg("while setting flags on %s", name);
+ bb_error_msg(err_fmt, "setting", name);
skip_setflags:
if (S_ISDIR(st.st_mode) && recursive)
@@ -164,12 +165,11 @@
static int chattr_dir_proc(const char *dir_name, struct dirent *de,
void *private EXT2FS_ATTR((unused)))
{
- /*if (strcmp(de->d_name, ".") && strcmp(de->d_name, "..")) {*/
- if (de->d_name[0] == '.' && (de->d_name[1] == '\0' || \
- (de->d_name[1] == '.' && de->d_name[2] == '\0'))) {
+ if (de->d_name[0] != '.' && (de->d_name[1] != '\0' ||
+ (de->d_name[1] != '.' && de->d_name[2] != '\0'))) {
char *path;
- if (asprintf(&path, "%s/%s", dir_name, de->d_name) == -1)
- bb_error_msg_and_die(bb_msg_memory_exhausted);
+
+ bb_xasprintf(&path, "%s/%s", dir_name, de->d_name);
change_attributes(path);
free(path);
}
diff -uNr busybox_orig/e2fsprogs/e2p/e2p.h busybox/e2fsprogs/e2p/e2p.h
--- busybox_orig/e2fsprogs/e2p/e2p.h 2005-05-03 08:20:10.000000000 +0200
+++ busybox/e2fsprogs/e2p/e2p.h 2005-05-02 21:29:31.000000000 +0200
@@ -15,9 +15,10 @@
int fgetflags (const char * name, unsigned long * flags);
-int fgetversion (const char * name, unsigned long * version);
+/*int fgetversion (const char * name, unsigned long * version);*/
int fsetflags (const char * name, unsigned long flags);
-int fsetversion (const char * name, unsigned long version);
+/*int fsetversion (const char * name, unsigned long version);*/
+int fgetsetversion (const char * name, unsigned long version, unsigned long * ptr_version);
int getflags (int fd, unsigned long * flags);
int getversion (int fd, unsigned long * version);
int iterate_on_dir (const char * dir_name,
@@ -50,3 +51,4 @@
char *e2p_os2string(int os_type);
int e2p_string2os(char *str);
+char *skip_over_word(char *cp);
diff -uNr busybox_orig/e2fsprogs/e2p/fgetsetversion.c busybox/e2fsprogs/e2p/fgetsetversion.c
--- busybox_orig/e2fsprogs/e2p/fgetsetversion.c 1970-01-01 01:00:00.000000000 +0100
+++ busybox/e2fsprogs/e2p/fgetsetversion.c 2005-05-02 22:17:46.000000000 +0200
@@ -0,0 +1,82 @@
+/*
+ * fgetversion.c - Get a file version on an ext2 file system
+ * fsetversion.c - Set a file version on an ext2 file system
+ *
+ *
+ * Copyright (C) 1993, 1994 Remy Card <card at masi.ibp.fr>
+ * Laboratoire MASI, Institut Blaise Pascal
+ * Universite Pierre et Marie Curie (Paris VI)
+ *
+ * This file can be redistributed under the terms of the GNU Library General
+ * Public License
+ */
+
+/*
+ * History:
+ * 93/10/30 - Creation
+ */
+
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#include "e2p.h"
+
+#ifdef O_LARGEFILE
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE)
+#else
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK)
+#endif
+
+/*
+ To do fsetversion: unsigned long *ptr_version must be set to NULL.
+ and unsigned long version must be set to a value
+ To do fgetversion: unsigned long *ptr_version must NOT be set to NULL
+ and unsigned long version is ignored.
+ TITO.
+*/
+
+int fgetsetversion (const char * name, unsigned long version, unsigned long *ptr_version)
+{
+#if HAVE_EXT2_IOCTLS
+#if !APPLE_DARWIN
+ int fd, r, ver, save_errno = 0;
+
+ fd = open (name, OPEN_FLAGS);
+ if (fd == -1)
+ return -1;
+ if (!ptr_version) {
+ ver = (int) version;
+ r = ioctl (fd, EXT2_IOC_SETVERSION, &ver);
+ } else {
+ r = ioctl (fd, EXT2_IOC_GETVERSION, &ver);
+ *ptr_version = ver;
+ }
+ if (r == -1)
+ save_errno = errno;
+ close (fd);
+ if (save_errno)
+ errno = save_errno;
+ return r;
+#else
+ if (!ptr_version) {
+ int ver = (int)version;
+ return syscall(SYS_fsctl, name, EXT2_IOC_SETVERSION, &ver, 0);
+ } else {
+ int ver=-1, err;
+ err = syscall(SYS_fsctl, name, EXT2_IOC_GETVERSION, &ver, 0);
+ *ptr_version = ver;
+ return(err);
+ }
+#endif
+#else /* ! HAVE_EXT2_IOCTLS */
+ extern int errno;
+ errno = EOPNOTSUPP;
+ return -1;
+#endif /* ! HAVE_EXT2_IOCTLS */
+}
diff -uNr busybox_orig/e2fsprogs/e2p/fgetversion.c busybox/e2fsprogs/e2p/fgetversion.c
--- busybox_orig/e2fsprogs/e2p/fgetversion.c 2005-05-03 08:20:10.000000000 +0200
+++ busybox/e2fsprogs/e2p/fgetversion.c 1970-01-01 01:00:00.000000000 +0100
@@ -1,62 +0,0 @@
-/*
- * fgetversion.c - Get a file version on an ext2 file system
- *
- * Copyright (C) 1993, 1994 Remy Card <card at masi.ibp.fr>
- * Laboratoire MASI, Institut Blaise Pascal
- * Universite Pierre et Marie Curie (Paris VI)
- *
- * This file can be redistributed under the terms of the GNU Library General
- * Public License
- */
-
-/*
- * History:
- * 93/10/30 - Creation
- */
-
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <sys/ioctl.h>
-
-#include "e2p.h"
-
-#ifdef O_LARGEFILE
-#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE)
-#else
-#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK)
-#endif
-
-int fgetversion (const char * name, unsigned long * version)
-{
-#if HAVE_EXT2_IOCTLS
-#if !APPLE_DARWIN
- int fd, r, ver, save_errno = 0;
-
- fd = open (name, OPEN_FLAGS);
- if (fd == -1)
- return -1;
- r = ioctl (fd, EXT2_IOC_GETVERSION, &ver);
- if (r == -1)
- save_errno = errno;
- *version = ver;
- close (fd);
- if (save_errno)
- errno = save_errno;
- return r;
-#else
- int ver=-1, err;
- err = syscall(SYS_fsctl, name, EXT2_IOC_GETVERSION, &ver, 0);
- *version = ver;
- return(err);
-#endif
-#else /* ! HAVE_EXT2_IOCTLS */
- extern int errno;
- errno = EOPNOTSUPP;
- return -1;
-#endif /* ! HAVE_EXT2_IOCTLS */
-}
diff -uNr busybox_orig/e2fsprogs/e2p/fsetversion.c busybox/e2fsprogs/e2p/fsetversion.c
--- busybox_orig/e2fsprogs/e2p/fsetversion.c 2005-05-03 08:20:10.000000000 +0200
+++ busybox/e2fsprogs/e2p/fsetversion.c 1970-01-01 01:00:00.000000000 +0100
@@ -1,60 +0,0 @@
-/*
- * fsetversion.c - Set a file version on an ext2 file system
- *
- * Copyright (C) 1993, 1994 Remy Card <card at masi.ibp.fr>
- * Laboratoire MASI, Institut Blaise Pascal
- * Universite Pierre et Marie Curie (Paris VI)
- *
- * This file can be redistributed under the terms of the GNU Library General
- * Public License
- */
-
-/*
- * History:
- * 93/10/30 - Creation
- */
-
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <sys/ioctl.h>
-
-#include "e2p.h"
-
-#ifdef O_LARGEFILE
-#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE)
-#else
-#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK)
-#endif
-
-int fsetversion (const char * name, unsigned long version)
-{
-#if HAVE_EXT2_IOCTLS
-#if !APPLE_DARWIN
- int fd, r, ver, save_errno = 0;
-
- fd = open (name, OPEN_FLAGS);
- if (fd == -1)
- return -1;
- ver = (int) version;
- r = ioctl (fd, EXT2_IOC_SETVERSION, &ver);
- if (r == -1)
- save_errno = errno;
- close (fd);
- if (save_errno)
- errno = save_errno;
- return r;
-#else
- int ver = (int)version;
- return syscall(SYS_fsctl, name, EXT2_IOC_SETVERSION, &ver, 0);
-#endif
-#else /* ! HAVE_EXT2_IOCTLS */
- extern int errno;
- errno = EOPNOTSUPP;
- return -1;
-#endif /* ! HAVE_EXT2_IOCTLS */
-}
diff -uNr busybox_orig/e2fsprogs/e2p/README busybox/e2fsprogs/e2p/README
--- busybox_orig/e2fsprogs/e2p/README 2005-05-03 08:20:10.000000000 +0200
+++ busybox/e2fsprogs/e2p/README 2005-05-05 13:53:47.000000000 +0200
@@ -2,3 +2,6 @@
files we don't need (Makefile.in, e2p.pc.in, etc...). Remove all of the
_LARGEFILE* define's from the few source files that use it since we'll be
appending it ourselves to CFLAGS when we compile. All done ! :)
+
+Some of the files in this dir are unused.
+Take a look at /busybox/e2fsprogs/Makefile.in.
\ No newline at end of file
diff -uNr busybox_orig/e2fsprogs/lsattr.c busybox/e2fsprogs/lsattr.c
--- busybox_orig/e2fsprogs/lsattr.c 2005-05-03 08:20:10.000000000 +0200
+++ busybox/e2fsprogs/lsattr.c 2005-05-02 22:19:14.000000000 +0200
@@ -58,15 +58,15 @@
{
unsigned long fsflags;
unsigned long generation;
-
+ char *err = "flags";
+
if (fgetflags(name, &fsflags) == -1) {
- bb_perror_msg("While reading flags on %s", name);
- return;
+ goto ERROR;
}
if (flags & OPT_GENERATION) {
- if (fgetversion(name, &generation) == -1) {
- bb_perror_msg("While reading version on %s", name);
- return;
+ if (fgetsetversion(name,0, &generation) == -1) {
+ err = "version";
+ goto ERROR;
}
printf("%5lu ", generation);
}
@@ -78,6 +78,9 @@
print_flags(stdout, fsflags, 0);
printf(" %s\n", name);
}
+ return;
+ERROR:
+ bb_perror_msg("While reading %s on %s", err, name);
}
static int lsattr_dir_proc(const char *, struct dirent *, void *);
@@ -86,13 +89,14 @@
{
STRUCT_STAT st;
- if (LSTAT(name, &st) == -1)
+ if (LSTAT(name, &st) == -1) {
bb_perror_msg("while trying to stat %s", name);
- else {
- if (S_ISDIR(st.st_mode) && !(flags & OPT_DIRS_OPT))
+ } else {
+ if (S_ISDIR(st.st_mode) && !(flags & OPT_DIRS_OPT)) {
iterate_on_dir(name, lsattr_dir_proc, NULL);
- else
+ } else {
list_attributes(name);
+ }
}
}
@@ -104,19 +108,18 @@
int i = strlen(dir_name);
if (i && dir_name[i-1] == '/')
- i = asprintf(&path, "%s%s", dir_name, de->d_name);
+ bb_xasprintf(&path, "%s%s", dir_name, de->d_name);
else
- i = asprintf(&path, "%s/%s", dir_name, de->d_name);
- if (i == -1)
- bb_error_msg_and_die(bb_msg_memory_exhausted);
-
+ bb_xasprintf(&path, "%s/%s", dir_name, de->d_name);
+
if (LSTAT(path, &st) == -1)
bb_perror_msg(path);
else {
if (de->d_name[0] != '.' || (flags & OPT_ALL)) {
list_attributes(path);
if (S_ISDIR(st.st_mode) && (flags & OPT_RECUR) &&
- strcmp(de->d_name, ".") && strcmp(de->d_name, "..")) {
+ (de->d_name[0] != '.' && (de->d_name[1] != '\0' ||
+ (de->d_name[1] != '.' && de->d_name[2] != '\0')))) {
printf("\n%s:\n", path);
iterate_on_dir(path, lsattr_dir_proc, NULL);
printf("\n");
diff -uNr busybox_orig/e2fsprogs/Makefile.in busybox/e2fsprogs/Makefile.in
--- busybox_orig/e2fsprogs/Makefile.in 2005-05-03 08:20:10.000000000 +0200
+++ busybox/e2fsprogs/Makefile.in 2005-05-02 21:24:28.000000000 +0200
@@ -37,7 +37,7 @@
E2P_SRC_LIST := \
fgetflags.c fsetflags.c \
- fgetversion.c fsetversion.c \
+ fgetsetversion.c \
pf.c iod.c
E2P_SRC := $(patsubst %, $(E2FSPROGS_DIR)/e2p/%, $(E2P_SRC_LIST))
$(E2FSPROGS_DIR)e2p.o: $(E2P_SRC)
More information about the busybox
mailing list