diff options
author | Kay Sievers <kay@vrfy.org> | 2012-04-12 01:51:49 +0200 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2012-04-12 02:39:37 +0200 |
commit | f33d3ec1d7521c91da8b30ad5cb345d6416bb07d (patch) | |
tree | 8f0d1b16753d3370ea6223f0f10da1625c12c681 /src/specifier.c | |
parent | 5e6f883dfcd2befce26102eba972d4c1d814dfdf (diff) |
move more common files to shared/ and add them to shared.la
Diffstat (limited to 'src/specifier.c')
-rw-r--r-- | src/specifier.c | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/src/specifier.c b/src/specifier.c deleted file mode 100644 index ae00ae10bb..0000000000 --- a/src/specifier.c +++ /dev/null @@ -1,108 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -/*** - This file is part of systemd. - - Copyright 2010 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include <string.h> - -#include "macro.h" -#include "util.h" -#include "specifier.h" - -/* - * Generic infrastructure for replacing %x style specifiers in - * strings. Will call a callback for each replacement. - * - */ - -char *specifier_printf(const char *text, const Specifier table[], void *userdata) { - char *r, *t; - const char *f; - bool percent = false; - size_t l; - - assert(text); - assert(table); - - l = strlen(text); - if (!(r = new(char, l+1))) - return NULL; - - t = r; - - for (f = text; *f; f++, l--) { - - if (percent) { - if (*f == '%') - *(t++) = '%'; - else { - const Specifier *i; - - for (i = table; i->specifier; i++) - if (i->specifier == *f) - break; - - if (i->lookup) { - char *n, *w; - size_t k, j; - - if (!(w = i->lookup(i->specifier, i->data, userdata))) { - free(r); - return NULL; - } - - j = t - r; - k = strlen(w); - - if (!(n = new(char, j + k + l + 1))) { - free(r); - free(w); - return NULL; - } - - memcpy(n, r, j); - memcpy(n + j, w, k); - - free(r); - free(w); - - r = n; - t = n + j + k; - } else { - *(t++) = '%'; - *(t++) = *f; - } - } - - percent = false; - } else if (*f == '%') - percent = true; - else - *(t++) = *f; - } - - *t = 0; - return r; -} - -/* Generic handler for simple string replacements */ - -char* specifier_string(char specifier, void *data, void *userdata) { - return strdup(strempty(data)); -} |