diff --git a/Makefile b/Makefile index b7e5716..7b7ce01 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ # USA.
# Get the information from under /usr. -prefix = /usr/ +prefix = /usr CPP = gcc -E -x c MIGCOM = mig -cc cat - /dev/null @@ -30,8 +30,8 @@ CFLAGS += -Wall -g -O2 -D_FILE_OFFSET_BITS=64 -std=gnu99 \ -DDEBUG LDFLAGS += -lnetfs -lfshelp -liohelp -lthreads \ -lports -lihash -lshouldbeinlibc -OBJS = main.o node.o lnode.o ulfs.o ncache.o netfs.o \ - lib.o options.o pattern.o stow.o update.o +OBJS = main.o node.o lnode.o ulfs.o ncache.o netfs.o lib.o options.o \ + pattern.o stow.o update.o unionmount.o MIGCOMSFLAGS = -prefix stow_ fs_notify-MIGSFLAGS = -imacros ./stow-mutations.h diff --git a/main.c b/main.c index e407926..43e4846 100644 --- a/main.c +++ b/main.c @@ -36,6 +36,7 @@ #include "options.h" #include "stow.h" #include "update.h" +#include "unionmount.h" char *netfs_server_name = "unionfs"; char *netfs_server_version = HURD_VERSION; diff --git a/options.c b/options.c index beed9f4..c12974c 100644 --- a/options.c +++ b/options.c @@ -6,12 +6,12 @@ modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 @@ -22,6 +22,7 @@ #define _GNU_SOURCE #include <argp.h> +#include <argz.h> #include <error.h> #include "options.h" @@ -33,6 +34,7 @@ #include "pattern.h" #include "stow.h" #include "update.h" +#include "unionmount.h" /* This variable is set to a non-zero value after parsing of the startup options. Whenever the argument parser is later called to @@ -78,7 +80,7 @@ argp_parse_common_options (int key, char *arg, struct argp_state *state) static int ulfs_flags = 0, ulfs_mode = 0, ulfs_modified = 0, ulfs_match = 0, ulfs_priority = 0; static struct patternlist ulfs_patternlist = - { + { .lock = MUTEX_INITIALIZER, .head = NULL }; @@ -103,7 +105,7 @@ argp_parse_common_options (int key, char *arg, struct argp_state *state) break; /* --add */ - /*case OPT_ADD: + /*case OPT_ADD: ulfs_mode = ULFS_MODE_ADD; break;*/ @@ -128,19 +130,17 @@ argp_parse_common_options (int key, char *arg, struct argp_state *state) /*case OPT_UNDERLYING:*/ /* --underlying */ case ARGP_KEY_ARG: - - if (ulfs_mode == ULFS_MODE_REMOVE) - { - err = ulfs_unregister (arg); - if (err == ENOENT) - /* It is not a fatal error, when the user tries to remove - a filesystem, which is not used by unionfs. */ - err = 0; - } - else - err = ulfs_register (arg, ulfs_flags, ulfs_priority); + /* We've reached the translator command, hence the remaining + part of the command line should be fed to the + translator. */ + err = argz_create + (state->argv + state->next - 1, &trans_argz, &trans_argz_len); if (err) - error (EXIT_FAILURE, err, "ulfs_register"); + error (EXIT_FAILURE, err, + "argz_create: Could not create options vector"); + + state->next = state->argc; /* stop parsing */ + ulfs_modified = 1; ulfs_flags = ulfs_mode = ulfs_priority = 0; ulfs_match = 0; @@ -182,7 +182,7 @@ argp_parse_startup_options (int key, char *arg, struct argp_state *state) err = ARGP_ERR_UNKNOWN; break; } - + return err; } @@ -212,7 +212,7 @@ const struct argp_child argp_children_startup[] = }; const char *argp_program_version = STANDARD_HURD_VERSION (unionfs); -const char *argp_program_bug_address = +const char *argp_program_bug_address = "Gianluca Guida <glgu...@gmail.com>"; #define ARGS_DOC "FILESYSTEMS ..." diff --git a/unionmount.c b/unionmount.c new file mode 100644 index 0000000..a8939f8 --- /dev/null +++ b/unionmount.c @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*/ +/* Hurd unionmount */ +/* The core of unionmount functionality. */ +/*---------------------------------------------------------------------------*/ +/* Copyright (C) 2009 Free Software Foundation, Inc. Written by + Sergiu Ivanov <unlimitedscol...@gmail.com>. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or * (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +#include "unionmount.h" +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/*---------Global Variables--------------------------------------------------*/ +/*The command line for starting the translator. */ +char * trans_argz; +size_t trans_argz_len; +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ diff --git a/unionmount.h b/unionmount.h new file mode 100644 index 0000000..7e4481b --- /dev/null +++ b/unionmount.h @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*/ +/* Hurd unionmount */ +/* General information and properties for unionmount/unionfs. */ +/*---------------------------------------------------------------------------*/ +/* Copyright (C) 2009 Free Software Foundation, Inc. Written by + Sergiu Ivanov <unlimitedscol...@gmail.com>. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or * (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. */ +/*---------------------------------------------------------------------------*/ +#ifndef INCLUDED_UNIONMOUNT_H +#define INCLUDED_UNIONMOUNT_H + +/*---------------------------------------------------------------------------*/ +#include <unistd.h> +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/*---------Global Variables--------------------------------------------------*/ +/*The command line for starting the translator. */ +extern char * trans_argz; +extern size_t trans_argz_len; +/*---------------------------------------------------------------------------*/ + +#endif /*INCLUDED_UNIONMOUNT_H*/ -- 1.5.2.4