Mercurial > dovecot > core-2.2
changeset 1034:c077254cbe66 HEAD
Added var_expand()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 27 Jan 2003 03:27:51 +0200 |
parents | e37e626902c3 |
children | fe49ece0f3ea |
files | src/lib/Makefile.am src/lib/var-expand.c src/lib/var-expand.h |
diffstat | 3 files changed, 74 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/Makefile.am Mon Jan 27 02:46:55 2003 +0200 +++ b/src/lib/Makefile.am Mon Jan 27 03:27:51 2003 +0200 @@ -51,6 +51,7 @@ unlink-lockfiles.c \ utc-offset.c \ utc-mktime.c \ + var-expand.c \ write-full.c noinst_HEADERS = \ @@ -99,4 +100,5 @@ unlink-lockfiles.h \ utc-offset.h \ utc-mktime.h \ + var-expand.h \ write-full.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/var-expand.c Mon Jan 27 03:27:51 2003 +0200 @@ -0,0 +1,59 @@ +/* Copyright (C) 2003 Timo Sirainen */ + +#include "lib.h" +#include "str.h" +#include "var-expand.h" + +void var_expand(string_t *dest, const char *str, + const char *user, const char *home) +{ + const char *var; + unsigned int width; + + for (; *str != '\0'; str++) { + if (*str != '%') + str_append_c(dest, *str); + else { + width = 0; + while (str[1] >= '0' && str[1] <= '9') { + width = width*10 + (str[1] - '0'); + str++; + } + + switch (str[1]) { + case '%': + var = "%"; + break; + case 'u': + var = user; + break; + case 'h': + var = home; + break; + case 'n': + var = t_strcut(user, '@'); + break; + case 'd': + var = strchr(user, '@'); + if (var != NULL) var++; + break; + default: + str_append_c(dest, '%'); + if (str[1] != '\0') + str_append_c(dest, str[1]); + var = NULL; + break; + } + + if (str[1] != '\0') + str++; + + if (var != NULL) { + if (width == 0) + str_append(dest, var); + else + str_append_n(dest, var, width); + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/var-expand.h Mon Jan 27 03:27:51 2003 +0200 @@ -0,0 +1,13 @@ +#ifndef __VAR_EXPAND_H +#define __VAR_EXPAND_H + +/* Expand % variables in str: + + %u user or user@domain + %h home + %n user + %d domain */ +void var_expand(string_t *dest, const char *str, + const char *user, const char *home); + +#endif