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 /lib/paths.c | |
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.
Diffstat (limited to 'lib/paths.c')
-rw-r--r-- | lib/paths.c | 65 |
1 files changed, 65 insertions, 0 deletions
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; +} + |