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.
This commit is contained in:
parent
08110d41bc
commit
45e878bba6
|
@ -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
|
||||
|
|
28
mdadm.h
28
mdadm.h
|
@ -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 {};
|
||||
# define FTW_PHYS 1
|
||||
#else
|
||||
# include <ftw.h>
|
||||
# ifdef __dietlibc__
|
||||
# define FTW_PHYS 1
|
||||
# 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
|
||||
# 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);
|
||||
|
||||
|
||||
|
|
50
util.c
50
util.c
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue