diff options
| author | Mike Frysinger <vapier@gentoo.org> | 2005-05-07 07:14:41 +0000 |
|---|---|---|
| committer | Mike Frysinger <vapier@gentoo.org> | 2005-05-07 07:14:41 +0000 |
| commit | 548ffd49a346a699ab64bd2659420d3ddbaeea6b (patch) | |
| tree | 4f5be5e56a345fb02590a0dfb9679297c2275fd7 | |
| parent | ba3a01f5e09102a2ed4392dc379d1879eb5b573f (diff) | |
| download | busybox-w32-548ffd49a346a699ab64bd2659420d3ddbaeea6b.tar.gz busybox-w32-548ffd49a346a699ab64bd2659420d3ddbaeea6b.tar.bz2 busybox-w32-548ffd49a346a699ab64bd2659420d3ddbaeea6b.zip | |
patch by Tito which unifies common get/set functions into 1 get/set function and cuts down on the size used significantly :)
| -rw-r--r-- | e2fsprogs/e2p/e2p.h | 15 | ||||
| -rw-r--r-- | e2fsprogs/e2p/fgetsetflags.c (renamed from e2fsprogs/e2p/fgetflags.c) | 43 | ||||
| -rw-r--r-- | e2fsprogs/e2p/fgetsetversion.c (renamed from e2fsprogs/e2p/fgetversion.c) | 29 | ||||
| -rw-r--r-- | e2fsprogs/e2p/fsetflags.c | 96 |
4 files changed, 39 insertions, 144 deletions
diff --git a/e2fsprogs/e2p/e2p.h b/e2fsprogs/e2p/e2p.h index d208b46a8..78930ec17 100644 --- a/e2fsprogs/e2p/e2p.h +++ b/e2fsprogs/e2p/e2p.h | |||
| @@ -13,11 +13,18 @@ | |||
| 13 | 13 | ||
| 14 | #define PFOPT_LONG 1 /* Must be 1 for compatibility with `int long_format'. */ | 14 | #define PFOPT_LONG 1 /* Must be 1 for compatibility with `int long_format'. */ |
| 15 | 15 | ||
| 16 | /*int fgetversion (const char * name, unsigned long * version);*/ | ||
| 17 | /*int fsetversion (const char * name, unsigned long version);*/ | ||
| 18 | int fgetsetversion(const char * name, unsigned long * get_version, unsigned long set_version); | ||
| 19 | #define fgetversion(name, version) fgetsetversion(name, version, 0) | ||
| 20 | #define fsetversion(name, version) fgetsetversion(name, NULL, version) | ||
| 21 | |||
| 22 | /*int fgetflags (const char * name, unsigned long * flags);*/ | ||
| 23 | /*int fsetflags (const char * name, unsigned long flags);*/ | ||
| 24 | int fgetsetflags(const char * name, unsigned long * get_flags, unsigned long set_flags); | ||
| 25 | #define fgetflags(name, flags) fgetsetflags(name, flags, 0) | ||
| 26 | #define fsetflags(name, flags) fgetsetflags(name, NULL, flags) | ||
| 16 | 27 | ||
| 17 | int fgetflags (const char * name, unsigned long * flags); | ||
| 18 | int fgetversion (const char * name, unsigned long * version); | ||
| 19 | int fsetflags (const char * name, unsigned long flags); | ||
| 20 | int fsetversion (const char * name, unsigned long version); | ||
| 21 | int getflags (int fd, unsigned long * flags); | 28 | int getflags (int fd, unsigned long * flags); |
| 22 | int getversion (int fd, unsigned long * version); | 29 | int getversion (int fd, unsigned long * version); |
| 23 | int iterate_on_dir (const char * dir_name, | 30 | int iterate_on_dir (const char * dir_name, |
diff --git a/e2fsprogs/e2p/fgetflags.c b/e2fsprogs/e2p/fgetsetflags.c index 6db729e08..0a9f5359a 100644 --- a/e2fsprogs/e2p/fgetflags.c +++ b/e2fsprogs/e2p/fgetsetflags.c | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * fgetflags.c - Get a file flags on an ext2 file system | 2 | * fgetflags.c - Get a file flags on an ext2 file system |
| 3 | * fsetflags.c - Set a file flags on an ext2 file system | ||
| 3 | * | 4 | * |
| 4 | * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr> | 5 | * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr> |
| 5 | * Laboratoire MASI, Institut Blaise Pascal | 6 | * Laboratoire MASI, Institut Blaise Pascal |
| @@ -35,57 +36,33 @@ | |||
| 35 | #define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) | 36 | #define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) |
| 36 | #endif | 37 | #endif |
| 37 | 38 | ||
| 38 | int fgetflags (const char * name, unsigned long * flags) | 39 | int fgetsetflags (const char * name, unsigned long * get_flags, unsigned long set_flags) |
| 39 | { | 40 | { |
| 40 | struct stat buf; | ||
| 41 | #if HAVE_STAT_FLAGS && !(APPLE_DARWIN && HAVE_EXT2_IOCTLS) | ||
| 42 | |||
| 43 | if (stat (name, &buf) == -1) | ||
| 44 | return -1; | ||
| 45 | |||
| 46 | *flags = 0; | ||
| 47 | #ifdef UF_IMMUTABLE | ||
| 48 | if (buf.st_flags & UF_IMMUTABLE) | ||
| 49 | *flags |= EXT2_IMMUTABLE_FL; | ||
| 50 | #endif | ||
| 51 | #ifdef UF_APPEND | ||
| 52 | if (buf.st_flags & UF_APPEND) | ||
| 53 | *flags |= EXT2_APPEND_FL; | ||
| 54 | #endif | ||
| 55 | #ifdef UF_NODUMP | ||
| 56 | if (buf.st_flags & UF_NODUMP) | ||
| 57 | *flags |= EXT2_NODUMP_FL; | ||
| 58 | #endif | ||
| 59 | |||
| 60 | return 0; | ||
| 61 | #else | ||
| 62 | #if HAVE_EXT2_IOCTLS | 41 | #if HAVE_EXT2_IOCTLS |
| 42 | struct stat buf; | ||
| 63 | int fd, r, f, save_errno = 0; | 43 | int fd, r, f, save_errno = 0; |
| 64 | 44 | ||
| 65 | if (!stat(name, &buf) && | 45 | if (!stat(name, &buf) && |
| 66 | !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { | 46 | !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { |
| 67 | goto notsupp; | 47 | goto notsupp; |
| 68 | } | 48 | } |
| 69 | #if !APPLE_DARWIN | ||
| 70 | fd = open (name, OPEN_FLAGS); | 49 | fd = open (name, OPEN_FLAGS); |
| 71 | if (fd == -1) | 50 | if (fd == -1) |
| 72 | return -1; | 51 | return -1; |
| 73 | r = ioctl (fd, EXT2_IOC_GETFLAGS, &f); | 52 | if (!get_flags) { |
| 53 | f = (int) set_flags; | ||
| 54 | r = ioctl (fd, EXT2_IOC_SETFLAGS, &f); | ||
| 55 | } else { | ||
| 56 | r = ioctl (fd, EXT2_IOC_GETFLAGS, &f); | ||
| 57 | *get_flags = f; | ||
| 58 | } | ||
| 74 | if (r == -1) | 59 | if (r == -1) |
| 75 | save_errno = errno; | 60 | save_errno = errno; |
| 76 | *flags = f; | ||
| 77 | close (fd); | 61 | close (fd); |
| 78 | if (save_errno) | 62 | if (save_errno) |
| 79 | errno = save_errno; | 63 | errno = save_errno; |
| 80 | return r; | 64 | return r; |
| 81 | #else | ||
| 82 | f = -1; | ||
| 83 | save_errno = syscall(SYS_fsctl, name, EXT2_IOC_GETFLAGS, &f, 0); | ||
| 84 | *flags = f; | ||
| 85 | return (save_errno); | ||
| 86 | #endif | ||
| 87 | #endif /* HAVE_EXT2_IOCTLS */ | 65 | #endif /* HAVE_EXT2_IOCTLS */ |
| 88 | #endif | ||
| 89 | notsupp: | 66 | notsupp: |
| 90 | errno = EOPNOTSUPP; | 67 | errno = EOPNOTSUPP; |
| 91 | return -1; | 68 | return -1; |
diff --git a/e2fsprogs/e2p/fgetversion.c b/e2fsprogs/e2p/fgetsetversion.c index 351a7d5d0..dcf127c26 100644 --- a/e2fsprogs/e2p/fgetversion.c +++ b/e2fsprogs/e2p/fgetsetversion.c | |||
| @@ -1,5 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * fgetversion.c - Get a file version on an ext2 file system | 2 | * fgetversion.c - Get a file version on an ext2 file system |
| 3 | * fsetversion.c - Set a file version on an ext2 file system | ||
| 4 | * | ||
| 3 | * | 5 | * |
| 4 | * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr> | 6 | * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr> |
| 5 | * Laboratoire MASI, Institut Blaise Pascal | 7 | * Laboratoire MASI, Institut Blaise Pascal |
| @@ -31,31 +33,36 @@ | |||
| 31 | #define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) | 33 | #define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) |
| 32 | #endif | 34 | #endif |
| 33 | 35 | ||
| 34 | int fgetversion (const char * name, unsigned long * version) | 36 | /* |
| 37 | To do fsetversion: unsigned long *ptr_version must be set to NULL. | ||
| 38 | and unsigned long version must be set to a value | ||
| 39 | To do fgetversion: unsigned long *ptr_version must NOT be set to NULL | ||
| 40 | and unsigned long version is ignored. | ||
| 41 | TITO. | ||
| 42 | */ | ||
| 43 | |||
| 44 | int fgetsetversion (const char * name, unsigned long * get_version, unsigned long set_version) | ||
| 35 | { | 45 | { |
| 36 | #if HAVE_EXT2_IOCTLS | 46 | #if HAVE_EXT2_IOCTLS |
| 37 | #if !APPLE_DARWIN | ||
| 38 | int fd, r, ver, save_errno = 0; | 47 | int fd, r, ver, save_errno = 0; |
| 39 | 48 | ||
| 40 | fd = open (name, OPEN_FLAGS); | 49 | fd = open (name, OPEN_FLAGS); |
| 41 | if (fd == -1) | 50 | if (fd == -1) |
| 42 | return -1; | 51 | return -1; |
| 43 | r = ioctl (fd, EXT2_IOC_GETVERSION, &ver); | 52 | if (!get_version) { |
| 53 | ver = (int) set_version; | ||
| 54 | r = ioctl (fd, EXT2_IOC_SETVERSION, &ver); | ||
| 55 | } else { | ||
| 56 | r = ioctl (fd, EXT2_IOC_GETVERSION, &ver); | ||
| 57 | *get_version = ver; | ||
| 58 | } | ||
| 44 | if (r == -1) | 59 | if (r == -1) |
| 45 | save_errno = errno; | 60 | save_errno = errno; |
| 46 | *version = ver; | ||
| 47 | close (fd); | 61 | close (fd); |
| 48 | if (save_errno) | 62 | if (save_errno) |
| 49 | errno = save_errno; | 63 | errno = save_errno; |
| 50 | return r; | 64 | return r; |
| 51 | #else | ||
| 52 | int ver=-1, err; | ||
| 53 | err = syscall(SYS_fsctl, name, EXT2_IOC_GETVERSION, &ver, 0); | ||
| 54 | *version = ver; | ||
| 55 | return(err); | ||
| 56 | #endif | ||
| 57 | #else /* ! HAVE_EXT2_IOCTLS */ | 65 | #else /* ! HAVE_EXT2_IOCTLS */ |
| 58 | extern int errno; | ||
| 59 | errno = EOPNOTSUPP; | 66 | errno = EOPNOTSUPP; |
| 60 | return -1; | 67 | return -1; |
| 61 | #endif /* ! HAVE_EXT2_IOCTLS */ | 68 | #endif /* ! HAVE_EXT2_IOCTLS */ |
diff --git a/e2fsprogs/e2p/fsetflags.c b/e2fsprogs/e2p/fsetflags.c deleted file mode 100644 index 40e7292dd..000000000 --- a/e2fsprogs/e2p/fsetflags.c +++ /dev/null | |||
| @@ -1,96 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * fsetflags.c - Set a file flags on an ext2 file system | ||
| 3 | * | ||
| 4 | * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr> | ||
| 5 | * Laboratoire MASI, Institut Blaise Pascal | ||
| 6 | * Universite Pierre et Marie Curie (Paris VI) | ||
| 7 | * | ||
| 8 | * This file can be redistributed under the terms of the GNU Library General | ||
| 9 | * Public License | ||
| 10 | */ | ||
| 11 | |||
| 12 | /* | ||
| 13 | * History: | ||
| 14 | * 93/10/30 - Creation | ||
| 15 | */ | ||
| 16 | |||
| 17 | #if HAVE_ERRNO_H | ||
| 18 | #include <errno.h> | ||
| 19 | #endif | ||
| 20 | #if HAVE_UNISTD_H | ||
| 21 | #include <unistd.h> | ||
| 22 | #endif | ||
| 23 | #include <sys/types.h> | ||
| 24 | #include <sys/stat.h> | ||
| 25 | #if HAVE_EXT2_IOCTLS | ||
| 26 | #include <fcntl.h> | ||
| 27 | #include <sys/ioctl.h> | ||
| 28 | #endif | ||
| 29 | |||
| 30 | #include "e2p.h" | ||
| 31 | |||
| 32 | /* | ||
| 33 | * Deal with lame glibc's that define this function without actually | ||
| 34 | * implementing it. Can you say "attractive nuisance", boys and girls? | ||
| 35 | * I knew you could! | ||
| 36 | */ | ||
| 37 | #ifdef __linux__ | ||
| 38 | #undef HAVE_CHFLAGS | ||
| 39 | #endif | ||
| 40 | |||
| 41 | #ifdef O_LARGEFILE | ||
| 42 | #define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE) | ||
| 43 | #else | ||
| 44 | #define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) | ||
| 45 | #endif | ||
| 46 | |||
| 47 | int fsetflags (const char * name, unsigned long flags) | ||
| 48 | { | ||
| 49 | struct stat buf; | ||
| 50 | #if HAVE_CHFLAGS && !(APPLE_DARWIN && HAVE_EXT2_IOCTLS) | ||
| 51 | unsigned long bsd_flags = 0; | ||
| 52 | |||
| 53 | #ifdef UF_IMMUTABLE | ||
| 54 | if (flags & EXT2_IMMUTABLE_FL) | ||
| 55 | bsd_flags |= UF_IMMUTABLE; | ||
| 56 | #endif | ||
| 57 | #ifdef UF_APPEND | ||
| 58 | if (flags & EXT2_APPEND_FL) | ||
| 59 | bsd_flags |= UF_APPEND; | ||
| 60 | #endif | ||
| 61 | #ifdef UF_NODUMP | ||
| 62 | if (flags & EXT2_NODUMP_FL) | ||
| 63 | bsd_flags |= UF_NODUMP; | ||
| 64 | #endif | ||
| 65 | |||
| 66 | return chflags (name, bsd_flags); | ||
| 67 | #else | ||
| 68 | #if HAVE_EXT2_IOCTLS | ||
| 69 | int fd, r, f, save_errno = 0; | ||
| 70 | |||
| 71 | if (!stat(name, &buf) && | ||
| 72 | !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { | ||
| 73 | goto notsupp; | ||
| 74 | } | ||
| 75 | #if !APPLE_DARWIN | ||
| 76 | fd = open (name, OPEN_FLAGS); | ||
| 77 | if (fd == -1) | ||
| 78 | return -1; | ||
| 79 | f = (int) flags; | ||
| 80 | r = ioctl (fd, EXT2_IOC_SETFLAGS, &f); | ||
| 81 | if (r == -1) | ||
| 82 | save_errno = errno; | ||
| 83 | close (fd); | ||
| 84 | if (save_errno) | ||
| 85 | errno = save_errno; | ||
| 86 | #else | ||
| 87 | f = (int) flags; | ||
| 88 | return syscall(SYS_fsctl, name, EXT2_IOC_SETFLAGS, &f, 0); | ||
| 89 | #endif | ||
| 90 | return r; | ||
| 91 | #endif /* HAVE_EXT2_IOCTLS */ | ||
| 92 | #endif | ||
| 93 | notsupp: | ||
| 94 | errno = EOPNOTSUPP; | ||
| 95 | return -1; | ||
| 96 | } | ||
