/* toUpper:
* Convert characters to uppercase
*/
-char *toUpper(Expr_t * pgm, char *s, Sfio_t* tmps)
-{
- int c;
+char *toUpper(Expr_t *pgm, char *src) {
+
+ const size_t len = strlen(src);
+ char *dst = exstralloc(pgm, len + 1);
+ if (UNLIKELY(dst == NULL)) {
+ return NULL;
+ }
- while ((c = *s++))
- sfputc (tmps, toupper (c));
+ for (size_t i = 0; i < len; ++i) {
+ dst[i] = (char)toupper((int)src[i]);
+ }
- return exstring(pgm, sfstruse(tmps));
+ dst[len] = '\0';
+ return dst;
}
/* toHtml:
extern char *canon(Expr_t * pgm, char *);
extern char *toHtml(Agraph_t*, char *);
extern char *toLower(Expr_t *pgm, char *src);
- extern char *toUpper(Expr_t * pgm, char *, Sfio_t*);
+ extern char *toUpper(Expr_t *pgm, char *src);
extern int deleteObj(Agraph_t * g, Agobj_t * obj);
extern char *colorx (Expr_t* ex, char* incolor, char* fmt, Sfio_t* fp);
extern void gvstart_timer(void);
v.integer = 0;
break;
case F_toupper:
- v.string = toUpper(pgm, args[0].string, state->tmp);
+ v.string = toUpper(pgm, args[0].string);
break;
case F_xof:
v.string = xyOf(pgm, args[0].string, true);