specifier.c revision 5430f7f2bc7330f3088b894166bf3524a067e3d8
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering This file is part of systemd.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Copyright 2010 Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering systemd is free software; you can redistribute it and/or modify it
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering under the terms of the GNU Lesser General Public License as published by
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering (at your option) any later version.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering systemd is distributed in the hope that it will be useful, but
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Lesser General Public License for more details.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering You should have received a copy of the GNU Lesser General Public License
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek * Generic infrastructure for replacing %x style specifiers in
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * strings. Will call a callback for each replacement.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poetteringchar *specifier_printf(const char *text, const Specifier table[], void *userdata) {
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering const char *f;
f8294e4175918117ca6c131720bcf287eadcd029Josh Triplett for (f = text; *f; f++, l--) {
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering if (*f == '%')
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering if (!(w = i->lookup(i->specifier, i->data, userdata))) {
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering t = n + j + k;
ccf23ad5faf228d450d263d7291156a948b61af2Christian Seiler *(t++) = '%';
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering } else if (*f == '%')
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering/* Generic handler for simple string replacements */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poetteringchar* specifier_string(char specifier, void *data, void *userdata) {