From 6a38db0b72a0913508dbdddca6d87c2fc279bac4 Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Tue, 21 Sep 2010 10:16:00 +0200 Subject: [PATCH] Added toupper function --- src/main/xlat.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/main/xlat.c b/src/main/xlat.c index 9c32288..e53300a 100644 --- a/src/main/xlat.c +++ b/src/main/xlat.c @@ -510,6 +510,8 @@ static size_t xlat_lc(UNUSED void *instance, REQUEST *request, char *p, *q; char buffer[1024]; + if (outlen <= 1) return 0; + if (!radius_xlat(buffer, sizeof(buffer), fmt, request, func)) { *out = '\0'; return 0; @@ -527,6 +529,34 @@ static size_t xlat_lc(UNUSED void *instance, REQUEST *request, } +/* + * Convert a string to uppercase + */ +static size_t xlat_uc(UNUSED void *instance, REQUEST *request, + char *fmt, char *out, size_t outlen, + UNUSED RADIUS_ESCAPE_STRING func) +{ + char *p, *q; + char buffer[1024]; + + if (outlen <= 1) return 0; + + if (!radius_xlat(buffer, sizeof(buffer), fmt, request, func)) { + *out = '\0'; + return 0; + } + + for (p = buffer, q = out; *p != '\0'; p++, outlen--) { + if (outlen <= 1) break; + + *(q++) = toupper((int) *p); + } + + *q = '\0'; + + return strlen(out); +} + /* * Compare two xlat_t structs, based ONLY on the module name. @@ -643,6 +673,11 @@ int xlat_register(const char *module, RAD_XLAT_FUNC func, void *instance) c = xlat_find("tolower"); rad_assert(c != NULL); c->internal = TRUE; + + xlat_register("toupper", xlat_uc, &xlat_inst[0]); + c = xlat_find("toupper"); + rad_assert(c != NULL); + c->internal = TRUE; } /* -- 2.1.4