There are two ways to open a given store. The first, and the more common way, is to hand libstore a string to parse such as: part:4:device:hd2. The second way, is to use one of the exported functions to open a specific type of store. Effectively, anything is <hurd/store.h> is game. Included among them are: store_zero_create, store_device_create and, of course, store_part_create.
In the current implementation, the function store_part_create is not guaranteed to be present. That is, if libparted is not compiled into the Hurd, an application depending on the store_part_create will not fail gracefully: the linker will see an unresolved symbol and fail to load the program. The correct solution, would appear to be to return EINVAL if libparted is not available. This patch does that: 2001-10-07 Neal H Walfield <[EMAIL PROTECTED]> * Makefile: Always build parted.o, parted_p.o and parted_pic.o. * part.c [! HAVE_LIBPARTED]: Do not include <parted/parted.h> or <parted/device_gnu.h>. (store_part_create) [! HAVE_LIBPARTED]: Fail returning EINVAL. (store_part_open) [! HAVE_LIBPARTED]: Likewise. * std.c (store_std_classes): Always include store_part_class. Index: Makefile =================================================================== RCS file: /cvsroot/hurd/hurd/libstore/Makefile,v retrieving revision 1.22 diff -u -p -r1.22 Makefile --- Makefile 2001/10/01 01:04:57 1.22 +++ Makefile 2001/10/07 18:48:47 @@ -40,20 +40,16 @@ CPPFLAGS += -I$(srcdir)/../exec include ../Makeconf -ifeq (,$(strip $(PARTED_LIBS))) -# Configure didn't find the Parted libraries, so we have no "part" store type. +ifneq (,$(strip $(PARTED_LIBS))) -parted.o parted_p.o parted_pic.o: - $(CC) -o $@ -c -x c /dev/null - -else - # We have Parted, so link against it. For the static libraries, # we slurp in all the Parted code we need and stuff it into one # object file along with our code that uses it. libstore.so-LDFLAGS += $(PARTED_LIBS) +endif + parted.o: part.o $(..)config.make $(CC) -nostdlib -r -o $@ $< $(PARTED_LIBS) @@ -62,5 +58,3 @@ parted_p.o: part_p.o $(..)config.make parted_pic.o: part_pic.o ln -f $< $@ - -endif Index: part.c =================================================================== RCS file: /cvsroot/hurd/hurd/libstore/part.c,v retrieving revision 1.2 diff -u -p -r1.2 part.c --- part.c 2001/10/01 18:46:38 1.2 +++ part.c 2001/10/07 18:53:52 @@ -23,12 +23,15 @@ #include <errno.h> #include <assert.h> #include <cthreads.h> -#include <hurd/store.h> +#include <string.h> +#include <error.h> +#ifdef HAVE_LIBPARTED #include <parted/parted.h> #include <parted/device_gnu.h> -#include <string.h> -#include <error.h> +#endif + +#include "store.h" #define NEED_PARTED_VERSION "1.5.4" @@ -38,6 +41,9 @@ error_t store_part_create (struct store *source, int index, int flags, struct store **store) { +#ifndef HAVE_LIBPARTED + return EINVAL; +#else static struct mutex parted_lock = MUTEX_INITIALIZER; static int version_check; error_t err = 0; @@ -153,6 +159,7 @@ out: err = store_remap (source, &run, 1, store); return err; +#endif /* HAVE_LIBPARTED */ } /* Open the part NAME. NAME consists of a partition number, a ':', a another @@ -166,6 +173,9 @@ store_part_open (const char *name, int f const struct store_class *const *classes, struct store **store) { +#ifndef HAVE_LIBPARTED + return EINVAL; +#else int part; char *endp; struct store *source; @@ -188,6 +198,7 @@ store_part_open (const char *name, int f } return err; +#endif /* HAVE_LIBPARTED */ } const struct store_class Index: libstore/std.c =================================================================== RCS file: /cvsroot/hurd/hurd/libstore/std.c,v retrieving revision 1.8 diff -u -p -r1.8 std.c --- libstore/std.c 2001/09/28 06:12:38 1.8 +++ libstore/std.c 2001/10/07 15:40:13 @@ -24,9 +24,7 @@ const struct store_class *const store_std_classes[] = { &store_device_class, -#if HAVE_PARTED_PARTED_H &store_part_class, -#endif &store_file_class, &store_zero_class, &store_task_class, _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd