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