diff options
author | Neil Brown <neilb@suse.de> | 2006-06-26 15:10:48 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2006-06-26 15:10:48 +1000 |
commit | 45e878bba6b490bf204db824be71f070689c8737 (patch) | |
tree | 195397cfc3d4529edb80412cc7b1d506a8d3f529 | |
parent | 08110d41bc376e0a5724ab54b72a8793d03a79c0 (diff) | |
download | mdadm-45e878bba6b490bf204db824be71f070689c8737.tar.gz mdadm-45e878bba6b490bf204db824be71f070689c8737.tar.xz mdadm-45e878bba6b490bf204db824be71f070689c8737.zip |
Improve ftw handling.
If not 'ftw' is available, still allow openning of devices by dev number.
More recent version of uclibc support nftw, so add support to check
for that.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | mdadm.h | 26 | ||||
-rw-r--r-- | util.c | 50 |
3 files changed, 45 insertions, 33 deletions
@@ -10,6 +10,8 @@ Changes Prior to this release information in superblocks. - Don't claim newly added spares are InSync!! (don't know why that code was ever in there) + - Work better when no 'ftw' is available, and check to see + if current uclibc provides ftw. Changes Prior to 2.5.1 release - Various fixes for gcc warnings @@ -343,16 +343,32 @@ extern struct supertype *guess_super(int fd); struct stat64; #endif +#define HAVE_NFTW we assume +#define HAVE_FTW + #ifdef UCLIBC - struct FTW {}; +# include <features.h> +# ifndef __UCLIBC_HAS_FTW__ +# undef HAVE_FTW +# undef HAVE_NFTW +# endif +#endif + +#ifdef __dietlibc__ +# undef HAVE_NFTW +#endif + +#ifndef HAVE_NFTW # define FTW_PHYS 1 -#else -# include <ftw.h> -# ifdef __dietlibc__ -# define FTW_PHYS 1 +# ifndef HAVE_FTW + struct FTW {}; # endif #endif +#ifdef HAVE_FTW +# include <ftw.h> +#endif + extern int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s); @@ -354,32 +354,6 @@ struct devmap { } *devlist = NULL; int devlist_ready = 0; -#ifdef UCLIBC -int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s) -{ - return 0; -} -char *map_dev(int major, int minor, int create) -{ -#if 0 - fprintf(stderr, "Warning - fail to map %d,%d to a device name\n", - major, minor); -#endif - return NULL; -} -#else - -#ifdef __dietlibc__ -int add_dev_1(const char *name, const struct stat *stb, int flag) -{ - return add_dev(name, stb, flag, NULL); -} -int nftw(const char *path, int (*han)(const char *name, const struct stat *stb, int flag, struct FTW *s), int nopenfd, int flags) -{ - return ftw(path, add_dev_1, nopenfd); -} -#endif - int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s) { struct stat st; @@ -404,6 +378,28 @@ int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s) return 0; } +#ifndef HAVE_NFTW +#ifdef HAVE_FTW +int add_dev_1(const char *name, const struct stat *stb, int flag) +{ + return add_dev(name, stb, flag, NULL); +} +int nftw(const char *path, int (*han)(const char *name, const struct stat *stb, int flag, struct FTW *s), int nopenfd, int flags) +{ + return ftw(path, add_dev_1, nopenfd); +} +#else +int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s) +{ + return 0; +} +int nftw(const char *path, int (*han)(const char *name, const struct stat *stb, int flag, struct FTW *s), int nopenfd, int flags) +{ + return 0; +} +#endif /* HAVE_FTW */ +#endif /* HAVE_NFTW */ + /* * Find a block device with the right major/minor number. * If we find multiple names, choose the shortest. @@ -464,8 +460,6 @@ char *map_dev(int major, int minor, int create) return nonstd ? nonstd : std; } -#endif - unsigned long calc_csum(void *super, int bytes) { unsigned long long newcsum = 0; |