[CFT] switch makefs to use NetBSD mtree
Brooks Davis
brooks at freebsd.org
Thu Jan 17 23:37:02 UTC 2013
The following patch switches makefs to use NetBSD's mtree's file parsing
code which adds support for full pathnames. It also replaces the adhoc
compatibility code with libnetbsd. Before applying it you
should cd to usr.sbin/makefs and run "rm -rf getid.c compat".
Please review or test it out and let me know if it works for you.
The patch can also be found at:
http://people.freebsd.org/~brooks/patches/makefs-nmtree.diff
Thanks
Brooks
Modify the makefs build to use NetBSD's mtree's parsing code rather than
FreeBSD's so that full pathnames are supported in mtree files.
Also use libnetbsd instead of the existing compat layer.
Sponsored by: DARPA, AFRL
Before applying this patch run: rm -rf getid.c compat
Index: walk.c
===================================================================
--- walk.c (revision 245563)
+++ walk.c (working copy)
@@ -305,7 +305,7 @@
if ((fp = fopen(specfile, "r")) == NULL)
err(1, "Can't open `%s'", specfile);
TIMER_START(start);
- root = mtree_readspec(fp);
+ root = spec(fp);
TIMER_RESULTS(start, "spec");
if (fclose(fp) == EOF)
err(1, "Can't close `%s'", specfile);
@@ -321,33 +321,6 @@
}
-static u_int
-nodetoino(u_int type)
-{
-
- switch (type) {
- case F_BLOCK:
- return S_IFBLK;
- case F_CHAR:
- return S_IFCHR;
- case F_DIR:
- return S_IFDIR;
- case F_FIFO:
- return S_IFIFO;
- case F_FILE:
- return S_IFREG;
- case F_LINK:
- return S_IFLNK;
- case F_SOCK:
- return S_IFSOCK;
- default:
- printf("unknown type %d", type);
- abort();
- }
- /* NOTREACHED */
-}
-
-
static void
apply_specdir(const char *dir, NODE *specnode, fsnode *dirnode, int speconly)
{
Index: makefs.h
===================================================================
--- makefs.h (revision 245563)
+++ makefs.h (working copy)
@@ -279,22 +279,4 @@
struct fs;
void ffs_fragacct_swap(struct fs *, int, int32_t [], int, int);
-/*
- * Declarations for compat routines.
- */
-long long strsuftoll(const char *, const char *, long long, long long);
-long long strsuftollx(const char *, const char *,
- long long, long long, char *, size_t);
-
-struct passwd;
-int uid_from_user(const char *, uid_t *);
-int pwcache_userdb(int (*)(int), void (*)(void),
- struct passwd * (*)(const char *), struct passwd * (*)(uid_t));
-struct group;
-int gid_from_group(const char *, gid_t *);
-int pwcache_groupdb(int (*)(int), void (*)(void),
- struct group * (*)(const char *), struct group * (*)(gid_t));
-
-int setup_getid(const char *dir);
-
#endif /* _MAKEFS_H */
Index: Makefile
===================================================================
--- Makefile (revision 245563)
+++ Makefile (working copy)
@@ -5,7 +5,6 @@
CFLAGS+=-I${.CURDIR}
SRCS= cd9660.c ffs.c \
- getid.c \
makefs.c \
mtree.c \
walk.c
@@ -15,19 +14,28 @@
.include "${.CURDIR}/cd9660/Makefile.inc"
.include "${.CURDIR}/ffs/Makefile.inc"
-.include "${.CURDIR}/compat/Makefile.inc"
CFLAGS+=-DHAVE_STRUCT_STAT_ST_FLAGS=1
CFLAGS+=-DHAVE_STRUCT_STAT_ST_GEN=1
-.PATH: ${.CURDIR}/../mtree
-CFLAGS+=-I${.CURDIR}/../mtree
-SRCS+= misc.c spec.c
+.PATH: ${.CURDIR}/../../contrib/mtree
+CFLAGS+=-I${.CURDIR}/../../contrib/mtree
+SRCS+= getid.c misc.c spec.c
+.PATH: ${.CURDIR}/../../contrib/mknod
+CFLAGS+=-I${.CURDIR}/../../contrib/mknod
+SRCS+= pack_dev.c
+
.PATH: ${.CURDIR}/../../sys/ufs/ffs
SRCS+= ffs_tables.c
-DPADD= ${LIBSBUF}
-LDADD= -lsbuf
+CFLAGS+= -I${.CURDIR}/../../lib/libnetbsd
+LIBNETBSDDIR= ${.OBJDIR}/../../lib/libnetbsd
+LIBNETBSD= ${LIBNETBSDDIR}/libnetbsd.a
+DPADD+= ${LIBNETBSD}
+LDADD+= ${LIBNETBSD}
+DPADD+= ${LIBSBUF} ${LIBUTIL}
+LDADD+= -lsbuf -lutil
+
.include <bsd.prog.mk>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20130117/7ea3c21f/attachment.sig>
More information about the freebsd-arch
mailing list