diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-05-07 14:36:56 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-05-07 14:36:56 -0300 |
commit | dea6b6da9422f34ad91c8f6ad9ad3ed650e95713 (patch) | |
tree | 3016b2fbcd67d75c71ee1b190aff2c24ada9b168 /lauxlib.c | |
parent | 71144e3ff0cb81bd9b8bb56d94dc76074c638c64 (diff) | |
download | lua-dea6b6da9422f34ad91c8f6ad9ad3ed650e95713.tar.gz lua-dea6b6da9422f34ad91c8f6ad9ad3ed650e95713.tar.bz2 lua-dea6b6da9422f34ad91c8f6ad9ad3ed650e95713.zip |
new function `lua_vpushstr' to replace uses of `sprintf'
Diffstat (limited to 'lauxlib.c')
-rw-r--r-- | lauxlib.c | 34 |
1 files changed, 3 insertions, 31 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lauxlib.c,v 1.67 2002/05/01 20:40:42 roberto Exp roberto $ | 2 | ** $Id: lauxlib.c,v 1.68 2002/05/06 19:05:10 roberto Exp roberto $ |
3 | ** Auxiliary functions for building Lua libraries | 3 | ** Auxiliary functions for building Lua libraries |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -142,38 +142,10 @@ LUALIB_API void luaL_opennamedlib (lua_State *L, const char *libname, | |||
142 | } | 142 | } |
143 | 143 | ||
144 | 144 | ||
145 | static void vstr (lua_State *L, const char *fmt, va_list argp) { | ||
146 | luaL_Buffer b; | ||
147 | luaL_buffinit(L, &b); | ||
148 | for (;;) { | ||
149 | const char *e = strchr(fmt, '%'); | ||
150 | if (e == NULL) break; | ||
151 | luaL_addlstring(&b, fmt, e-fmt); | ||
152 | switch (*(e+1)) { | ||
153 | case 's': | ||
154 | luaL_addstring(&b, va_arg(argp, char *)); | ||
155 | break; | ||
156 | case 'd': | ||
157 | lua_pushnumber(L, va_arg(argp, int)); | ||
158 | luaL_addvalue (&b); | ||
159 | break; | ||
160 | case '%': | ||
161 | luaL_putchar(&b, '%'); | ||
162 | break; | ||
163 | default: | ||
164 | lua_error(L, "invalid format option"); | ||
165 | } | ||
166 | fmt = e+2; | ||
167 | } | ||
168 | luaL_addstring(&b, fmt); | ||
169 | luaL_pushresult(&b); | ||
170 | } | ||
171 | |||
172 | |||
173 | LUALIB_API void luaL_vstr (lua_State *L, const char *fmt, ...) { | 145 | LUALIB_API void luaL_vstr (lua_State *L, const char *fmt, ...) { |
174 | va_list argp; | 146 | va_list argp; |
175 | va_start(argp, fmt); | 147 | va_start(argp, fmt); |
176 | vstr(L, fmt, argp); | 148 | lua_vpushstr(L, fmt, argp); |
177 | va_end(argp); | 149 | va_end(argp); |
178 | } | 150 | } |
179 | 151 | ||
@@ -181,7 +153,7 @@ LUALIB_API void luaL_vstr (lua_State *L, const char *fmt, ...) { | |||
181 | LUALIB_API int luaL_verror (lua_State *L, const char *fmt, ...) { | 153 | LUALIB_API int luaL_verror (lua_State *L, const char *fmt, ...) { |
182 | va_list argp; | 154 | va_list argp; |
183 | va_start(argp, fmt); | 155 | va_start(argp, fmt); |
184 | vstr(L, fmt, argp); | 156 | lua_vpushstr(L, fmt, argp); |
185 | va_end(argp); | 157 | va_end(argp); |
186 | return lua_errorobj(L); | 158 | return lua_errorobj(L); |
187 | } | 159 | } |