#include <stdio.h>
#include <ctype.h>
#include <cgraph/agxbuf.h>
+#include <cgraph/likely.h>
#include <cgraph/strcasecmp.h>
#include <cgraph/unreachable.h>
/* toLower:
* Convert characters to lowercase
*/
-char *toLower(Expr_t * pgm, char *s, Sfio_t* tmps)
-{
- int c;
+char *toLower(Expr_t *pgm, char *src) {
- while ((c = *s++))
- sfputc (tmps, tolower (c));
+ const size_t len = strlen(src);
+ char *dst = exstralloc(pgm, len + 1);
+ if (UNLIKELY(dst == NULL)) {
+ return NULL;
+ }
- return exstring(pgm, sfstruse(tmps));
+ for (size_t i = 0; i < len; ++i) {
+ dst[i] = (char)tolower((int)src[i]);
+ }
+
+ dst[len] = '\0';
+ return dst;
}
/* toUpper:
extern char *readLine(Expr_t *, int);
extern char *canon(Expr_t * pgm, char *);
extern char *toHtml(Agraph_t*, char *);
- extern char *toLower(Expr_t * pgm, char *, Sfio_t*);
+ extern char *toLower(Expr_t *pgm, char *src);
extern char *toUpper(Expr_t * pgm, char *, Sfio_t*);
extern int deleteObj(Agraph_t * g, Agobj_t * obj);
extern char *colorx (Expr_t* ex, char* incolor, char* fmt, Sfio_t* fp);
}
break;
case F_tolower:
- v.string = toLower(pgm, args[0].string, state->tmp);
+ v.string = toLower(pgm, args[0].string);
break;
case F_colorx:
v.string = colorx(pgm, args[0].string, args[1].string, state->tmp);