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 | } | ||