aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2007-02-07 15:53:08 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2007-02-07 15:53:08 -0200
commitd62a21b9d379a576bae7426c80039ca1a4d2bb07 (patch)
tree9c18a6666e02097898e51efdba68640c9327434c
parentcf86576a838dbe7a11f64116bdc9b1942d233ff8 (diff)
downloadlua-d62a21b9d379a576bae7426c80039ca1a4d2bb07.tar.gz
lua-d62a21b9d379a576bae7426c80039ca1a4d2bb07.tar.bz2
lua-d62a21b9d379a576bae7426c80039ca1a4d2bb07.zip
when formatting with '%q', all control characters are coded
as \nnn.
-rw-r--r--lstrlib.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/lstrlib.c b/lstrlib.c
index bcc1f7a8..96160867 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstrlib.c,v 1.134 2006/09/11 14:07:24 roberto Exp roberto $ 2** $Id: lstrlib.c,v 1.135 2006/09/18 16:33:14 roberto Exp roberto $
3** Standard library for string operations and pattern-matching 3** Standard library for string operations and pattern-matching
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -697,25 +697,20 @@ static void addquoted (lua_State *L, luaL_Buffer *b, int arg) {
697 const char *s = luaL_checklstring(L, arg, &l); 697 const char *s = luaL_checklstring(L, arg, &l);
698 luaL_addchar(b, '"'); 698 luaL_addchar(b, '"');
699 while (l--) { 699 while (l--) {
700 switch (*s) { 700 if (*s == '"' || *s == '\\' || *s == '\n') {
701 case '"': case '\\': case '\n': { 701 luaL_addchar(b, '\\');
702 luaL_addchar(b, '\\'); 702 luaL_addchar(b, *s);
703 luaL_addchar(b, *s);
704 break;
705 }
706 case '\r': {
707 luaL_addlstring(b, "\\r", 2);
708 break;
709 }
710 case '\0': {
711 luaL_addlstring(b, "\\000", 4);
712 break;
713 }
714 default: {
715 luaL_addchar(b, *s);
716 break;
717 }
718 } 703 }
704 else if (*s == '\0' || iscntrl(uchar(*s))) {
705 char buff[10];
706 if (*s != '\0' && !isdigit(uchar(*(s+1))))
707 sprintf(buff, "\\%d", uchar(*s));
708 else
709 sprintf(buff, "\\%03d", uchar(*s));
710 luaL_addstring(b, buff);
711 }
712 else
713 luaL_addchar(b, *s);
719 s++; 714 s++;
720 } 715 }
721 luaL_addchar(b, '"'); 716 luaL_addchar(b, '"');