diff options
author | David Lamparter <equinox@diac24.net> | 2009-10-24 15:18:58 +0200 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2010-02-04 02:53:48 +0100 |
commit | f99eea6053507e6dbd5ad22f4c7ba80c5a981651 (patch) | |
tree | eaa126d5b5f4f125c70e262755db3038bb89b3a7 | |
parent | 762fdc882e51b6836fd7b66cbcef0b3634353092 (diff) | |
download | quagga-f99eea6053507e6dbd5ad22f4c7ba80c5a981651.tar.bz2 quagga-f99eea6053507e6dbd5ad22f4c7ba80c5a981651.tar.xz |
lib: fs namespacing 1/5: add path_* helpers
path_state and path_config return full path names to configuration /
state files. path_set_namespace can be used to include a namespace part
into the paths returned.
-rwxr-xr-x | configure.ac | 1 | ||||
-rw-r--r-- | lib/Makefile.am | 6 | ||||
-rw-r--r-- | lib/paths.c | 65 | ||||
-rw-r--r-- | lib/paths.h | 34 |
4 files changed, 103 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac index 71f1c1bf..9ccefafa 100755 --- a/configure.ac +++ b/configure.ac @@ -1492,6 +1492,7 @@ fi AC_MSG_RESULT(${quagga_statedir}) AC_SUBST(quagga_statedir) +AC_DEFINE_UNQUOTED(PATH_STATE, "$quagga_statedir",zebra state path) AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID) AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID) AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID) diff --git a/lib/Makefile.am b/lib/Makefile.am index 7f3a9747..1b4134dc 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to produce Makefile.in. INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib @SNMP_INCLUDES@ -DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" +DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" -DPATH_CONFIG=\"$(sysconfdir)\" lib_LTLIBRARIES = libzebra.la libzebra_la_LDFLAGS = -version-info 0:0:0 @@ -12,7 +12,7 @@ libzebra_la_SOURCES = \ sockunion.c prefix.c thread.c if.c memory.c buffer.c table.c hash.c \ filter.c routemap.c distribute.c stream.c str.c log.c plist.c \ zclient.c sockopt.c smux.c md5.c if_rmap.c keychain.c privs.c \ - sigevent.c pqueue.c jhash.c memtypes.c workqueue.c + sigevent.c pqueue.c jhash.c memtypes.c workqueue.c paths.c BUILT_SOURCES = memtypes.h route_types.h @@ -27,7 +27,7 @@ pkginclude_HEADERS = \ str.h stream.h table.h thread.h vector.h version.h vty.h zebra.h \ plist.h zclient.h sockopt.h smux.h md5.h if_rmap.h keychain.h \ privs.h sigevent.h pqueue.h jhash.h zassert.h memtypes.h \ - workqueue.h route_types.h + workqueue.h route_types.h paths.h EXTRA_DIST = regex.c regex-gnu.h memtypes.awk route_types.pl route_types.txt diff --git a/lib/paths.c b/lib/paths.c new file mode 100644 index 00000000..5678b873 --- /dev/null +++ b/lib/paths.c @@ -0,0 +1,65 @@ +/* + * Path helper functions (for namespaces) + * Copyright (C) 2009 David Lamparter + * + * This file is part of GNU Zebra. + * + * GNU Zebra 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, or (at your + * option) any later version. + * + * GNU Zebra 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 GNU Zebra; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <zebra.h> +#include <log.h> +#include <paths.h> + +static char *namespace = ""; + +void path_set_namespace(const char *ns) +{ + size_t len; + + if (*namespace) + free(namespace); + if (!ns || !*ns) { + namespace = ""; + return; + } + + len = strlen(ns); + namespace = malloc(len + 2); + if (!namespace) { /* ugh... */ + namespace = ""; + return; + }; + namespace[0] = '/'; + memcpy(namespace + 1, ns, len + 1); +} + +const char *path_state(const char *filename) +{ + static char buf[MAXPATHLEN]; + snprintf(buf, sizeof(buf), "%s%s/%s", + PATH_STATE, namespace, filename); + return buf; +} + +const char *path_config(const char *filename) +{ + static char buf[MAXPATHLEN]; + snprintf(buf, sizeof(buf), "%s%s/%s", + PATH_CONFIG, namespace, filename); + return buf; +} + diff --git a/lib/paths.h b/lib/paths.h new file mode 100644 index 00000000..1f697855 --- /dev/null +++ b/lib/paths.h @@ -0,0 +1,34 @@ +/* + * Path helper functions (for namespaces) + * Copyright (C) 2009 David Lamparter + * + * This file is part of GNU Zebra. + * + * GNU Zebra 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, or (at your + * option) any later version. + * + * GNU Zebra 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 GNU Zebra; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _ZEBRA_PATHS_H +#define _ZEBRA_PATHS_H + +extern void path_set_namespace(const char *ns); + +/* the following two functions return pointers to a _static_ buffer! + * if you need to keep a reference to the values, do a strdup + */ +extern const char *path_state(const char *filename); +extern const char *path_config(const char *filename); + +#endif /* _ZEBRA_PATHS_H */ |