Allow building of a special rescue version of geom that

has a subset of the classes compiled-in.
This commit is contained in:
Marcel Moolenaar 2007-11-04 00:32:54 +00:00
parent a3393da7bf
commit a16f9b367d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=173313
3 changed files with 44 additions and 4 deletions

View File

@ -1,5 +1,23 @@
# $FreeBSD$ # $FreeBSD$
.if defined(RESCUE)
.PATH: ${.CURDIR}/class/part ${.CURDIR}/core ${.CURDIR}/misc
PROG= geom
SRCS= geom.c geom_part.c subr.c
CFLAGS+=-I${.CURDIR} -I${.CURDIR}/core
DPADD= ${LIBGEOM} ${LIBSBUF} ${LIBBSDXML} ${LIBUTIL}
LDADD= -lgeom -lsbuf -lbsdxml -lutil
.include <bsd.prog.mk>
.else
SUBDIR= core class SUBDIR= core class
.include <bsd.subdir.mk> .include <bsd.subdir.mk>
.endif

View File

@ -43,15 +43,21 @@ __FBSDID("$FreeBSD$");
#include "core/geom.h" #include "core/geom.h"
#include "misc/subr.h" #include "misc/subr.h"
uint32_t lib_version = G_LIB_VERSION; #ifdef RESCUE
uint32_t version = 0; #define PUBSYM(x) gpart_##x
#else
#define PUBSYM(x) x
#endif
uint32_t PUBSYM(lib_version) = G_LIB_VERSION;
uint32_t PUBSYM(version) = 0;
static char optional[] = ""; static char optional[] = "";
static char flags[] = "C"; static char flags[] = "C";
static void gpart_show(struct gctl_req *, unsigned); static void gpart_show(struct gctl_req *, unsigned);
struct g_command class_commands[] = { struct g_command PUBSYM(class_commands)[] = {
{ "add", 0, NULL, { { "add", 0, NULL, {
{ 'b', "start", NULL, G_TYPE_STRING }, { 'b', "start", NULL, G_TYPE_STRING },
{ 's', "size", NULL, G_TYPE_STRING }, { 's', "size", NULL, G_TYPE_STRING },

View File

@ -51,6 +51,10 @@ __FBSDID("$FreeBSD$");
#include "misc/subr.h" #include "misc/subr.h"
#ifdef RESCUE
extern uint32_t gpart_version;
extern struct g_command gpart_class_commands[];
#endif
static char comm[MAXPATHLEN], *class_name = NULL, *gclass_name = NULL; static char comm[MAXPATHLEN], *class_name = NULL, *gclass_name = NULL;
static uint32_t *version = NULL; static uint32_t *version = NULL;
@ -466,6 +470,7 @@ run_command(int argc, char *argv[])
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
#ifndef RESCUE
static const char * static const char *
library_path(void) library_path(void)
{ {
@ -524,6 +529,7 @@ load_library(void)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
#endif /* !RESCUE */
/* /*
* Class name should be all capital letters. * Class name should be all capital letters.
@ -571,8 +577,18 @@ get_class(int *argc, char ***argv)
} else { } else {
errx(EXIT_FAILURE, "Invalid utility name."); errx(EXIT_FAILURE, "Invalid utility name.");
} }
set_class_name();
#ifndef RESCUE
load_library(); load_library();
#else
if (!strcasecmp(class_name, "part")) {
version = &gpart_version;
class_commands = gpart_class_commands;
} else
errx(EXIT_FAILURE, "Invalid class name.");
#endif /* !RESCUE */
set_class_name();
if (*argc < 1) if (*argc < 1)
usage(); usage();
} }