#include "bitmap.h"
#include <endian.h>
-#include <byteswap.h>
/* Redhat don't like to #include <asm/byteorder.h>, and
* some time include <linux/byteorder/xxx_endian.h> isn't enough,
* and there is no standard conversion function so... */
+/* And dietlibc doesn't think byteswap is ok, so.. */
+/* #include <byteswap.h> */
+#define bswap_16(x) (((x) & 0x00ffU) << 8 | \
+ ((x) & 0xff00U) >> 8)
+#define bswap_32(x) (((x) & 0x000000ffU) << 24 | \
+ ((x) & 0xff000000U) >> 24 | \
+ ((x) & 0x0000ff00U) << 8 | \
+ ((x) & 0x00ff0000U) >> 8)
+#define bswap_64(x) (((x) & 0x00000000000000ffULL) << 56 | \
+ ((x) & 0xff00000000000000ULL) >> 56 | \
+ ((x) & 0x000000000000ff00ULL) << 40 | \
+ ((x) & 0x00ff000000000000ULL) >> 40 | \
+ ((x) & 0x0000000000ff0000ULL) << 24 | \
+ ((x) & 0x0000ff0000000000ULL) >> 24 | \
+ ((x) & 0x00000000ff000000ULL) << 8 | \
+ ((x) & 0x000000ff00000000ULL) >> 8)
+
#if BYTE_ORDER == LITTLE_ENDIAN
#define __cpu_to_le16(_x) (_x)
#define __cpu_to_le32(_x) (_x)
int gid;
int autof;
int mode;
+ int symlinks;
+ struct supertype *supertype;
};
#define Name "mdadm"
BackupFile,
HomeHost,
AutoHomeHost,
+ Symlinks,
};
/* structures read from config file */
int (*update_super)(struct mdinfo *info, void *sbv, char *update,
char *devname, int verbose,
int uuid_set, char *homehost);
- __u64 (*event_super)(void *sbv);
int (*init_super)(struct supertype *st, void **sbp, mdu_array_info_t *info, unsigned long long size, char *name, char *homehost);
void (*add_to_super)(void *sbv, mdu_disk_info_t *dinfo);
int (*store_super)(struct supertype *st, int fd, void *sbv);
int (*load_super)(struct supertype *st, int fd, void **sbp, char *devname);
struct supertype * (*match_metadata_desc)(char *arg);
__u64 (*avail_size)(struct supertype *st, __u64 size);
- int (*add_internal_bitmap)(struct supertype *st, void *sbv, int chunk, int delay, int write_behind,
+ int (*add_internal_bitmap)(struct supertype *st, void *sbv, int *chunkp,
+ int delay, int write_behind,
unsigned long long size, int may_change, int major);
void (*locate_bitmap)(struct supertype *st, int fd, void *sbv);
int (*write_bitmap)(struct supertype *st, int fd, void *sbv);
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);
extern int Assemble(struct supertype *st, char *mddev, int mdfd,
mddev_ident_t ident,
- char *conffile,
mddev_dev_t devlist, char *backup_file,
int readonly, int runstop,
char *update, char *homehost,
extern int Monitor(mddev_dev_t devlist,
char *mailaddr, char *alert_cmd,
int period, int daemonise, int scan, int oneshot,
- int dosyslog, char *config, int test, char *pidfile);
+ int dosyslog, int test, char *pidfile);
extern int Kill(char *dev, int force, int quiet);
extern int is_standard(char *dev, int *nump);
extern int parse_auto(char *str, char *msg, int config);
-extern mddev_ident_t conf_get_ident(char *conffile, char *dev);
-extern mddev_dev_t conf_get_devs(char *conffile);
-extern struct createinfo *conf_get_create_info(char *conffile);
-extern char *conf_get_mailaddr(char *conffile);
-extern char *conf_get_mailfrom(char *conffile);
-extern char *conf_get_program(char *conffile);
-extern char *conf_get_homehost(char *conffile);
+extern mddev_ident_t conf_get_ident(char *dev);
+extern mddev_dev_t conf_get_devs(void);
+extern struct createinfo *conf_get_create_info(void);
+extern void set_conffile(char *file);
+extern char *conf_get_mailaddr(void);
+extern char *conf_get_mailfrom(void);
+extern char *conf_get_program(void);
+extern char *conf_get_homehost(void);
extern char *conf_line(FILE *file);
extern char *conf_word(FILE *file, int allow_key);
extern void free_line(char *line);
char *avail, int avail_disks);
extern int ask(char *mesg);
extern unsigned long long get_component_size(int fd);
+extern void remove_partitions(int fd);
extern char *human_size(long long bytes);