Procházet zdrojové kódy

Replace printf hardcoded %d and add some text wrapping macros

mingodad před 6 roky
rodič
revize
85a487a593

+ 4 - 1
SquiLu-ext/sq_axtls.c

@@ -344,6 +344,7 @@ static SQRESULT sq_axtls_sha256(HSQUIRRELVM v)
     sq_pushstring(v, buf, -1);
     return 1;
 }
+
 static SQRESULT sq_axtls_rng_initialize(HSQUIRRELVM v)
 {
     RNG_initialize();
@@ -355,13 +356,14 @@ static SQRESULT sq_axtls_rng_terminate(HSQUIRRELVM v)
     RNG_terminate();
     return 0;
 }
+
 typedef int (*get_random_fptr_t)(int, uint8_t*);
 
 static SQRESULT sq_axtls_get_random0(HSQUIRRELVM v, get_random_fptr_t grf)
 {
 	SQ_FUNC_VARS_NO_TOP(v);
     SQ_GET_INTEGER(v, 2, length);
-    if(length < 1) return sq_throwerror(v, _SC("Minimun length error %d"), length);
+    if(length < 1) return sq_throwerror(v, _SC("Minimun length error " _PRINT_INT_FMT), length);
     if(!RNG_is_initialized()) return sq_throwerror(v, _SC("Need to call rng_initialize first"));
     SQChar *buff = sq_getscratchpad(v, length);
     (*grf)(length, buff);
@@ -378,6 +380,7 @@ static SQRESULT sq_axtls_get_random_nz(HSQUIRRELVM v)
 {
     return sq_axtls_get_random0(v, get_random_NZ);
 }
+
 #define _DECL_AXTLS_FUNC(name,nparams,pmask) {_SC(#name),sq_axtls_##name,nparams,pmask}
 static SQRegFunction axtls_obj_funcs[]={
 	_DECL_AXTLS_FUNC(get_config,2,_SC(".i")),

+ 18 - 18
SquiLu-ext/sq_fs.cpp

@@ -142,7 +142,7 @@ static SQRESULT sqfs_chdir (HSQUIRRELVM v) {
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_GET_STRING(v, 2, path);
 	if (chdir(path)) {
-	    return sq_throwerror(v, "Unable to change working directory to '%s'\n%s\n",
+	    return sq_throwerror(v, _SC("Unable to change working directory to '%s'\n%s\n"),
 				path, chdir_error);
 	} else {
 		sq_pushbool (v, SQTrue);
@@ -160,7 +160,7 @@ static SQRESULT sqfs_currentdir (HSQUIRRELVM v) {
   /* Passing (NULL, 0) is not guaranteed to work. Use a temp buffer and size instead. */
   char buf[LFS_MAXPATHLEN];
   if ((path = getcwd(buf, LFS_MAXPATHLEN)) == NULL) {
-    return sq_throwerror(v, getcwd_error);
+    return sq_throwerror(v, _SC("%s"), getcwd_error);
   }
   else {
     sq_pushstring(v, buf, -1);
@@ -184,7 +184,7 @@ static SQRESULT sqfs_lock_dir(HSQUIRRELVM v) {
   char *ln;
   const char *lockfile = "/lockfile.sqfs";
   ln = (char*)sq_malloc(path_size + strlen(lockfile) + 1);
-  if(!ln) return sq_throwerror(v, strerror(errno));
+  if(!ln) return sq_throwerror(v, _SC("%s"), strerror(errno));
 
   strcpy(ln, path); strcat(ln, lockfile);
   if((fd = CreateFile(ln, GENERIC_WRITE, 0, NULL, CREATE_NEW,
@@ -222,11 +222,11 @@ static SQRESULT sqfs_lock_dir(HSQUIRRELVM v) {
   const char *lockfile = "/lockfile.sqfs";
   lock = (lfs_Lock*)lua_newuserdata(L, sizeof(sqfs_Lock));
   ln = (char*)sq_malloc(path_size + strlen(lockfile) + 1);
-  if(!ln) return sq_throwerror(v, strerror(errno));
+  if(!ln) return sq_throwerror(v, _SC("%s"), strerror(errno));
   strcpy(ln, path); strcat(ln, lockfile);
   if(symlink("lock", ln) == -1) {
     free(ln);
-    return sq_throwerror(v, strerror(errno));
+    return sq_throwerror(v, _SC("%s"), strerror(errno));
   }
   lock->ln = ln;
   luaL_getmetatable (L, LOCK_METATABLE);
@@ -272,7 +272,7 @@ static int lfs_g_setmode (HSQUIRRELVM v, FILE *f, int arg) {
 }
 #else
 static int lfs_g_setmode (HSQUIRRELVM v, FILE *f, int arg) {
-  return sq_throwerror(v, "setmode not supported on this platform");
+  return sq_throwerror(v, _SC("setmode not supported on this platform"));
 }
 #endif
 
@@ -304,7 +304,7 @@ static int _file_lock (HSQUIRRELVM v, FILE *fp, const char *mode, const long sta
 		case 'r': lkmode = LK_NBLCK; break;
 		case 'w': lkmode = LK_NBLCK; break;
 		case 'u': lkmode = LK_UNLCK; break;
-		default : return sq_throwerror (v, "%s: invalid mode", funcname);
+		default : return sq_throwerror (v, _SC("%s: invalid mode"), funcname);
 	}
 	if (!len) {
 		fseek (fp, 0L, SEEK_END);
@@ -319,7 +319,7 @@ static int _file_lock (HSQUIRRELVM v, FILE *fp, const char *mode, const long sta
 		case 'w': f.l_type = F_WRLCK; break;
 		case 'r': f.l_type = F_RDLCK; break;
 		case 'u': f.l_type = F_UNLCK; break;
-		default : return sq_throwerror(v, "%s: invalid mode", funcname);
+		default : return sq_throwerror(v, _SC("%s: invalid mode"), funcname);
 	}
 	f.l_whence = SEEK_SET;
 	f.l_start = (off_t)start;
@@ -399,7 +399,7 @@ static SQRESULT sqfs_link(HSQUIRRELVM v)
     sq_pushinteger(v, (bsym ? symlink : link)(oldpath, newpath));
     return 1;
 #else
-    return sq_throwerror(v, "make_link is not supported on Windows");
+    return sq_throwerror(v, _SC("make_link is not supported on Windows"));
 #endif
 }
 
@@ -418,7 +418,7 @@ static SQRESULT sqfs_mkdir (HSQUIRRELVM v) {
 	                     S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH );
 #endif
 	if (fail) {
-        return sq_throwerror (v, "%s", strerror(errno));
+        return sq_throwerror (v, _SC("%s"), strerror(errno));
 	}
 #ifndef _WIN32_WCE
 	umask (oldmask);
@@ -439,7 +439,7 @@ static SQRESULT sqfs_rmdir (HSQUIRRELVM v) {
 	fail = rmdir (path);
 
 	if (fail) {
-		return sq_throwerror (v, "%s", strerror(errno));
+		return sq_throwerror (v, _SC("%s"), strerror(errno));
 	}
 	sq_pushbool (v, SQTrue);
 	return 1;
@@ -479,13 +479,13 @@ static SQRESULT _dir_constructor(HSQUIRRELVM v)
 #ifdef _WIN32
     dir->hFile = 0L;
     if (strlen(path) > MAX_PATH-2)
-      return sq_throwerror(v, "path too long: %s", path);
+      return sq_throwerror(v, _SC("path too long: %s"), path);
     else
       scsprintf (dir->pattern, sizeof(dir->pattern), "%s/*", path);
 #else
     dir->dir = opendir (path);
     if (dir->dir == NULL)
-      return sq_throwerror(v, "cannot open %s: %s", path, strerror (errno));
+      return sq_throwerror(v, _SC("cannot open %s: %s"), path, strerror (errno));
 #endif
     //sq_pushstring(v, currFileName_key, sizeof(currFileName_key)-1); //store file name between iterations
     //sq_pushliteral(v, _SC(""));
@@ -529,12 +529,12 @@ static SQRESULT _dir__nexti(HSQUIRRELVM v)
     struct dirent *entry;
 #endif
     const char *fname;
-    if(self->closed) return sq_throwerror(v, "closed directory");
+    if(self->closed) return sq_throwerror(v, _SC("closed directory"));
 #ifdef _WIN32
     if (self->hFile == 0L) { /* first entry */
         if ((self->hFile = _findfirst (self->pattern, &c_file)) == -1L) {
                 self->closed = 1;
-                return sq_throwerror(v, strerror (errno));
+                return sq_throwerror(v, _SC("%s"), strerror (errno));
         }
     } else { /* next entry */
         if (_findnext (self->hFile, &c_file) == -1L) {
@@ -642,7 +642,7 @@ static SQRESULT sqfs_touch (HSQUIRRELVM v) {
 		buf = &utb;
 	}
 	if (utime (file, buf)) {
-		return sq_throwerror(v, "%s", strerror (errno));
+		return sq_throwerror(v, _SC("%s"), strerror (errno));
 	}
 	sq_pushbool (v, SQTrue);
 	return 1;
@@ -704,7 +704,7 @@ static void push_st_blksize (HSQUIRRELVM v, STAT_STRUCT *info) {
 }
 #endif
 static void push_invalid (HSQUIRRELVM v, STAT_STRUCT *info) {
-  sq_throwerror(v, "invalid attribute name");
+  sq_throwerror(v, _SC("invalid attribute name"));
 #ifndef _WIN32
   info->st_blksize = 0; /* never reached */
 #endif
@@ -746,7 +746,7 @@ static int _file_info_ (HSQUIRRELVM v, int (*st)(const SQChar*, STAT_STRUCT*)) {
 	STAT_STRUCT info;
 
 	if (st(file, &info)) {
-		return sq_throwerror(v, "cannot obtain information from file `%s'", file);
+		return sq_throwerror(v, _SC("cannot obtain information from file `%s'"), file);
 	}
 	if(_top_ > 2){
 	    int ptype = sq_gettype(v, 3);

+ 3 - 1
SquiLu-ext/sq_gumbo.cpp

@@ -93,6 +93,7 @@ static SQRESULT build_element(HSQUIRRELVM v, GumboElement *element) {
     sq_newarray(v, element->children.length);
     if(add_children(v, &element->children) == SQ_ERROR) return SQ_ERROR;
     sq_rawset(v, -3);
+
     sq_pushliteral(v, _SC("start_pos"));
     sq_pushinteger(v, element->start_pos.offset);
     sq_rawset(v, -3);
@@ -100,6 +101,7 @@ static SQRESULT build_element(HSQUIRRELVM v, GumboElement *element) {
     sq_pushliteral(v, _SC("end_pos"));
     sq_pushinteger(v, element->end_pos.offset);
     sq_rawset(v, -3);
+
     return SQ_OK;
 }
 
@@ -190,7 +192,7 @@ static SQRESULT gumbo_parse_file(HSQUIRRELVM v)		/** parse_file(s) */
   error: // Return nil and an error message if an assertion fails
     if (file) fclose(file);
     if (input) sq_free(input, len+1);
-    return sq_throwerror(v, strerror(errno));
+    return sq_throwerror(v, _SC("%s"), strerror(errno));
 }
 
 #define _DECL_FUNC(name,nparams,tycheck) {_SC(#name),gumbo_##name,nparams,tycheck}

+ 2 - 2
SquiLu-ext/sq_markdown.cpp

@@ -3,7 +3,7 @@
 #include <string.h>
 #include <stdio.h>
 #include "sqstdblobimpl.h"
-extern "C" {
+extern "C" {
 #include "render_html.h"
 }
 
@@ -20,7 +20,7 @@ static SQRESULT sq_markdown2html(HSQUIRRELVM v)
     SQ_OPT_INTEGER(v, 3, len, str_size);
     SQ_OPT_INTEGER(v, 4, parser_flags, MD_DIALECT_GITHUB | MD_FLAG_PERMISSIVEATXHEADERS);
     SQ_OPT_INTEGER(v, 5, renderer_flags, 0);
-    if(len > str_size || len < 0) return sq_throwerror(v, _SC("invalid parameter value (%d)"), len);
+    if(len > str_size || len < 0) return sq_throwerror(v, _SC("invalid parameter value (" _PRINT_INT_FMT ")"), len);
     /* Input size is good estimation of output size. Add some more reserve to
      * deal with the HTML header/footer and tags. */
     SQBlob b(0, len + (len/8 + 64));

+ 2 - 2
SquiLu-ext/sq_mix.cpp

@@ -25,7 +25,7 @@ static SQRESULT mix_loadbuffer(HSQUIRRELVM sqvm, mix_state_t *S, const SQChar *n
 	    MixInteger ch;
 	    while((ch = sq_mix_reader_char(S))) blob.WriteChar(ch);
         if (S->error != NULL) {
-            return sq_throwerror(sqvm, S->error);
+            return sq_throwerror(sqvm, _SC("%s"), S->error);
         }
         sq_pushstring(sqvm, (const SQChar*)blob.GetBuf(), blob.Len());
 	}
@@ -33,7 +33,7 @@ static SQRESULT mix_loadbuffer(HSQUIRRELVM sqvm, mix_state_t *S, const SQChar *n
 	{
         res = sq_compile(sqvm, sq_mix_reader_char, S, name, SQTrue, SQTrue, SQ_MAX_INCLUDE_FILES);
         if (S->error != NULL) {
-            return sq_throwerror(sqvm, S->error);
+            return sq_throwerror(sqvm, _SC("%s"), S->error);
         } else if (res != 0) {
             sq_pushnull(sqvm);
         }

+ 1 - 1
SquiLu-ext/sq_mongoose.cpp

@@ -150,7 +150,7 @@ sq_http_request_read(HSQUIRRELVM v)
     SQ_FUNC_VARS(v);
     GET_http_request_INSTANCE();
     SQ_OPT_INTEGER(v, 2, n, 1024*2000);
-    if(n <= 0) return sq_throwerror(v, _SC("invalid size to read (%d)"), n);
+    if(n <= 0) return sq_throwerror(v, _SC("invalid size to read (" _PRINT_INT_FMT ")"), n);
     size_t rlen;  /* how much to read */
     size_t nr;  /* number of chars actually read */
     rlen = 8192;  /* try to read that much each time */

+ 16 - 7
SquiLu-ext/sq_mysql.cpp

@@ -146,10 +146,10 @@ static mysql_stmt_error_t dlmysql_stmt_error = 0;
 
 static const char *dynamicLibName = DYNLIB_FOR_OS(libmysqlclient);
 
-static bool load_libmysqlclient()
+static bool load_libmysqlclient(const char *libName)
 {
     if(dlmysql_init) return true;
-    if(libmysqlclient.open(dynamicLibName))
+    if(libmysqlclient.open(libName))
     {
         //@write_mysql_functions_load();
 // generated-code:begin
@@ -285,7 +285,7 @@ static SQRESULT sq_mysql_result_col_name(HSQUIRRELVM v){
 	GET_mysql_result_INSTANCE();
 	SQ_GET_INTEGER(v, 2, col);
 	if(col < 0 || col > dlmysql_num_fields(self)-1)
-		return sq_throwerror(v, _SC("invalid col number (%d)"), col);
+		return sq_throwerror(v, _SC("invalid col number (" _PRINT_INT_FMT ")"), col);
 	MYSQL_FIELD *fields = dlmysql_fetch_fields(self);
 	sq_pushstring(v, fields[col].name, -1);
 	return 1;
@@ -382,7 +382,7 @@ static SQRESULT sq_mysql_result_row_as_array(HSQUIRRELVM v){
         }
     }
     int row_count = dlmysql_num_rows(self);
-    if(row < 0 || row >= row_count) return sq_throwerror(v, _SC("invalid row (%d)"), row);
+    if(row < 0 || row >= row_count) return sq_throwerror(v, _SC("invalid row (" _PRINT_INT_FMT ")"), row);
 
     int col_count = dlmysql_num_fields(self);
     sq_newarray(v, col_count);
@@ -408,7 +408,7 @@ static SQRESULT sq_mysql_result_row_as_table(HSQUIRRELVM v){
         }
     }
     int row_count = dlmysql_num_rows(self);
-    if(row < 0 || row >= row_count) return sq_throwerror(v, _SC("invalid row (%d)"), row);
+    if(row < 0 || row >= row_count) return sq_throwerror(v, _SC("invalid row (" _PRINT_INT_FMT ")"), row);
 
     int col_count = dlmysql_num_fields(self);
     sq_newtableex(v, col_count);
@@ -489,7 +489,7 @@ static SQRESULT sq_mysql_statement_bind_base(HSQUIRRELVM v, SQInteger top, SQ_My
 
     SQRESULT _rc_;
 	if((top - 1) != self->param_count){
-		return sq_throwerror(v, "Expect %d params but got %d !", self->param_count, top-1);
+		return sq_throwerror(v, "Expect %d params but got %d !", (int)self->param_count, (int)top-1);
 	}
 
     memset(self->bind_data_buffer, 0, self->bind_data_buffer_size);
@@ -654,7 +654,7 @@ static SQRESULT sq_mysql_constructor(HSQUIRRELVM v)
     SQ_OPT_INTEGER(v, 8, optflags, 0);
     MYSQL *self=0;
 
-    if(load_libmysqlclient())
+    if(load_libmysqlclient(dynamicLibName))
     {
         self = dlmysql_init(NULL);
 		if (!self) return sq_throwerror(v, _SC("error connecting: Out of memory."));
@@ -834,6 +834,14 @@ static SQRESULT sq_mysql_escape_string(HSQUIRRELVM v){
 	return sq_throwerror(v, _SC("could not allocate escaped string"));
 }
 
+static SQRESULT sq_mysql_loadlib(HSQUIRRELVM v)
+{
+	SQ_FUNC_VARS(v);
+    SQ_OPT_STRING(v, 2, libname, dynamicLibName);
+    sq_pushbool(v, load_libmysqlclient(libname));
+	return 1;
+}
+
 #define _DECL_FUNC(name,nparams,tycheck) {_SC(#name),  sq_mysql_##name,nparams,tycheck}
 static SQRegFunction sq_mysql_methods[] =
 {
@@ -848,6 +856,7 @@ static SQRegFunction sq_mysql_methods[] =
 	_DECL_FUNC(version,  1, _SC("x")),
 	_DECL_FUNC(last_insert_id,  1, _SC("x")),
 	_DECL_FUNC(escape_string,  2, _SC("xs")),
+	_DECL_FUNC(loadlib,-1,_SC(".s")),
 	{0,0}
 };
 #undef _DECL_FUNC

+ 1 - 1
SquiLu-ext/sq_pack.cpp

@@ -41,7 +41,7 @@ static SQRESULT badcode(HSQUIRRELVM v, int c)
 {
 	SQChar s[]=_SC("bad code '?'");
 	s[sizeof(s)-(3*sizeof(SQChar))]=c;
-	return sq_throwerror(v,s);
+	return sq_throwerror(v,_SC("%s"),s);
 }
 
 static int doendian(int c)

+ 1 - 1
SquiLu-ext/sq_pcre.cpp

@@ -460,7 +460,7 @@ static SQRESULT sq_pcre_gsub(HSQUIRRELVM v)
                             }
                             if(idx != match_idx)
                             {
-                                return sq_throwerror(v, _SC("there is no match for replacement $%d"), idx);
+                                return sq_throwerror(v, _SC("there is no match for replacement $" _PRINT_INT_FMT), idx);
                             }
                             continue;
                         }

+ 1 - 1
SquiLu-ext/sq_pcre2.cpp

@@ -540,7 +540,7 @@ static SQRESULT sq_pcre2_gsub(HSQUIRRELVM v)
                             }
                             if(idx != match_idx)
                             {
-                                return sq_throwerror(v, _SC("there is no match for replacement $%d"), idx);
+                                return sq_throwerror(v, _SC("there is no match for replacement $" _PRINT_INT_FMT), idx);
                             }
                             continue;
                         }

+ 13 - 12
SquiLu-ext/sq_slave_vm.cpp

@@ -120,7 +120,7 @@ static const SQChar sq_slave_vm_TAG[] = _SC("SlaveVM");
 static SQRESULT get_slave_vm_instance(HSQUIRRELVM v, SQInteger idx, SlaveVM_st **svm_st)
 {
     if(sq_getinstanceup(v, idx, (SQUserPointer*)svm_st, (void*)sq_slave_vm_TAG) != SQ_OK) return SQ_ERROR;
-    if(!*svm_st) return sq_throwerror(v, _SC("slave vm already closed"));
+    if(!*svm_st) return sq_throwerror(v, _SC("%s"), _SC("slave vm already closed"));
     return SQ_OK;
 }
 
@@ -167,7 +167,7 @@ static SQRESULT sq_slave_vm_release_hook(SQUserPointer p, SQInteger size, void *
 
 #define SQ_getforeignptr_slave(v) \
     SlaveVM_st *self = (SlaveVM_st*)sq_getforeignptr(v);\
-    if(!self) return sq_throwerror(v, _SC("No slavevm foreignptr found"));
+    if(!self) return sq_throwerror(v, _SC("%s"), _SC("No slavevm foreignptr found"));
 
 static SQRESULT sq_vm_thread_lock(HSQUIRRELVM v)
 {
@@ -291,7 +291,7 @@ static SQRESULT checkTryLock(HSQUIRRELVM v, SlaveVM_st *self)
 {
     if(self->isRunningAsThread && mg_thread_mutex_trylock(&self->mutex))
     {
-        return sq_throwerror(v, _SC("Could not aquire slave lock"));
+        return sq_throwerror(v, _SC("%s"), _SC("Could not aquire slave lock"));
     }
     return SQ_OK;
 }
@@ -335,6 +335,7 @@ static SQRESULT sq_slave_vm_get_include_path(HSQUIRRELVM v)
     else sq_pushnull(v);
     return 1;
 }
+
 static SQRESULT sq_slave_vm_call(HSQUIRRELVM v)
 {
     SQ_FUNC_VARS_NO_TOP(v);
@@ -360,12 +361,12 @@ static SQRESULT sq_slave_vm_call(HSQUIRRELVM v)
             int argc = sq_gettop(v) - 3;
             if(argc && copy_values_between_vms(svm, v, argc, 4) != SQ_OK)
             {
-                result = sq_throwerror(v, sq_getlasterror_str(svm));
+                result = sq_throwerror(v, _SC("%s"), sq_getlasterror_str(svm));
                 goto cleanup;
             }
             if(sq_call(svm, argc+1, has_ret_val, SQFalse) != SQ_OK)
             {
-                result = sq_throwerror(v, sq_getlasterror_str(svm));
+                result = sq_throwerror(v, _SC("%s"), sq_getlasterror_str(svm));
                 goto cleanup;
             }
             if(has_ret_val)
@@ -378,7 +379,7 @@ static SQRESULT sq_slave_vm_call(HSQUIRRELVM v)
     }
     else
     {
-        result = sq_throwerror(v, sq_getlasterror_str(svm));
+        result = sq_throwerror(v, _SC("%s"), sq_getlasterror_str(svm));
     }
 cleanup:
     sq_settop(svm, top);
@@ -401,7 +402,7 @@ static SQRESULT sq_slave_vm_set(HSQUIRRELVM v)
             && copy_values_between_vms(svm, v, 1, 3) == SQ_OK)
     {
         result = sq_newslot(svm, -3, SQFalse);
-        if(result == SQ_ERROR) sq_throwerror(v, sq_getlasterror_str(svm));
+        if(result == SQ_ERROR) sq_throwerror(v, _SC("%s"), sq_getlasterror_str(svm));
     }
     else result = SQ_ERROR;
     sq_settop(svm, top);
@@ -430,7 +431,7 @@ static SQRESULT sq_slave_vm_get(HSQUIRRELVM v)
         else
         {
             if(sq_gettop(v) == 3) result = 1; //we have a default value
-            else sq_throwerror(v, sq_getlasterror_str(svm));
+            else sq_throwerror(v, _SC("%s"), sq_getlasterror_str(svm));
         }
     }
     sq_settop(svm, top);
@@ -462,7 +463,7 @@ static SQRESULT sq_slave_vm_dofile(HSQUIRRELVM v)
         }
         else result = SQ_OK;
     }
-    else sq_throwerror(v, sq_getlasterror_str(svm));
+    else sq_throwerror(v, _SC("%s"), sq_getlasterror_str(svm));
     sq_settop(svm, top);
 #ifdef SLAVE_VM_WITH_OS_THREADS
     if(self->isRunningAsThread) mg_thread_mutex_unlock(&self->mutex);
@@ -522,7 +523,7 @@ static SQRESULT sq_slave_vm_compilestring(HSQUIRRELVM v)
         if(last_error) {
             SQInteger line, column;
             sq_getlasterror_line_col(svm, &line, &column);
-            result = sq_throwerror(v, _SC("compilestring %s %d:%d: %s"), func_name, line, column, last_error);
+            result = sq_throwerror(v, _SC("compilestring %s %d:%d: %s"), func_name, (int)line, (int)column, last_error);
         }
     }
     sq_settop(svm, top);
@@ -582,7 +583,7 @@ static SQRESULT sq_slave_vm_is_runing_as_thread(HSQUIRRELVM v)
 #ifdef SLAVE_VM_WITH_OS_THREADS
 
 #define check_run_as_thread(v) \
-    if(!self->isRunningAsThread) return sq_throwerror(v, _SC("Slave VM not running as thread"))
+    if(!self->isRunningAsThread) return sq_throwerror(v, _SC("%s"), _SC("Slave VM not running as thread"))
 
 static void *slaveThreadTask(void *p)
 {
@@ -618,7 +619,7 @@ static SQRESULT sq_slave_vm_thread_run(HSQUIRRELVM v)
     int rc;
     const SQChar *func_name;
     SQInteger func_name_size;
-    if(self->thread_id) return sq_throwerror(v, _SC("slavevm already running in a thread"));
+    if(self->thread_id) return sq_throwerror(v, _SC("%s"), _SC("slavevm already running in a thread"));
     SQInteger top = sq_gettop(svm);
     rc = mg_thread_mutex_trylock(&self->mutex) == 0;
     if(rc)

+ 24 - 23
SquiLu-ext/sq_socket.cpp

@@ -14,6 +14,7 @@ SQ_OPT_STRING_STRLEN();
 #include <sys/time.h>
 #endif
 
+
 /* option registry */
 typedef struct t_opt {
   const char *name;
@@ -385,7 +386,7 @@ static SQRESULT inet_global_tohostname(HSQUIRRELVM v) {
     SQ_GET_STRING(v, 2, address);
     struct hostent *hp = NULL;
     int err = inet_gethost(address, &hp);
-    if (err != IO_DONE) return sq_throwerror(v, lua_socket_hoststrerror(err));
+    if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), lua_socket_hoststrerror(err));
     sq_newtable(v);
     sq_pushliteral(v, _SC("name"));
     sq_pushstring(v, hp->h_name, -1);
@@ -406,7 +407,7 @@ static SQRESULT inet_global_toip(HSQUIRRELVM v)
     SQ_GET_STRING(v, 2, address);
     struct hostent *hp = NULL;
     int err = inet_gethost(address, &hp);
-    if (err != IO_DONE) return sq_throwerror(v, lua_socket_hoststrerror(err));
+    if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), lua_socket_hoststrerror(err));
     sq_newtable(v);
     sq_pushliteral(v, _SC("address"));
     sq_pushstring(v, inet_ntoa(*((struct in_addr *) hp->h_addr)), -1);
@@ -657,7 +658,7 @@ static int buffer_meth_send(HSQUIRRELVM v, p_buffer buf) {
     if (start <= end) err = sendraw(buf, data+start, end-start, &sent);
     /* check if there was an error */
     if (err != IO_DONE) {
-        return sq_throwerror(v, buf->io->error(buf->io->ctx, err));
+        return sq_throwerror(v, _SC("%s"), buf->io->error(buf->io->ctx, err));
     } else {
         sq_pushinteger(v, sent+start);
     }
@@ -708,7 +709,7 @@ static int buffer_meth_receive(HSQUIRRELVM v, p_buffer buf) {
     sq_pushinteger(v, err);
     sq_rawset(v, -3);
     /* check if there was an error */
-    //if (err != IO_DONE) return sq_throwerror(v, buf->io->error(buf->io->ctx, err));
+    //if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), buf->io->error(buf->io->ctx, err));
 #ifdef LUASOCKET_DEBUG
     /* push time elapsed during operation as the last return value */
     buf->elapsed = timeout_gettime() - timeout_getstart(tm);
@@ -988,7 +989,7 @@ static SQRESULT tcp_constructor(HSQUIRRELVM v)
     if (!err) {
         return tcp_constructor_for_socket(v, 1, sock, TCP_TYPE_MASTER);
     }
-    return sq_throwerror(v, err);
+    return sq_throwerror(v, _SC("%s"), err);
 }
 
 /*-------------------------------------------------------------------------*\
@@ -1014,7 +1015,7 @@ static SQRESULT tcp_meth_accept(HSQUIRRELVM v)
         if(rc < 0) return rc;
         tcp_constructor_for_socket(v, sq_gettop(v), sock, TCP_TYPE_CLIENT);
     } else {
-        return sq_throwerror(v, lua_socket_strerror(err));
+        return sq_throwerror(v, _SC("%s"), lua_socket_strerror(err));
     }
     return 1;
 }
@@ -1029,7 +1030,7 @@ static SQRESULT tcp_meth_bind(HSQUIRRELVM v)
     SQ_GET_STRING(v, 2, address);
     SQ_GET_INTEGER(v, 3, port);
     const char *err = inet_trybind(&tcp->sock, address, port);
-    if (err) return sq_throwerror(v, err);
+    if (err) return sq_throwerror(v, _SC("%s"), err);
     return 0;
 }
 
@@ -1045,7 +1046,7 @@ static SQRESULT tcp_meth_connect(HSQUIRRELVM v)
     p_timeout tm = lua_timeout_markstart(&tcp->tm);
     const char *err = inet_tryconnect(&tcp->sock, address, port, tm);
     /* have to set the class even if it failed due to non-blocking connects */
-    if (err) return sq_throwerror(v, err);
+    if (err) return sq_throwerror(v, _SC("%s"), err);
     tcp->type = TCP_TYPE_CLIENT;
     return 0;
 }
@@ -1070,7 +1071,7 @@ static SQRESULT tcp_meth_listen(HSQUIRRELVM v)
     GET_tcp_master_INSTANCE_AT(v, 1);
     SQ_OPT_INTEGER(v, 2, backlog, 32);
     int err = lua_socket_listen(&tcp->sock, backlog);
-    if (err != IO_DONE) return sq_throwerror(v, lua_socket_strerror(err));
+    if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), lua_socket_strerror(err));
     /* turn master object into a server object */
     tcp->type = TCP_TYPE_SERVER;
     return 0;
@@ -1192,7 +1193,7 @@ static SQRESULT udp_meth_send(HSQUIRRELVM v) {
     SQ_GET_STRING(v, 2, data);
     lua_timeout_markstart(tm);
     err = lua_socket_send(&udp->sock, data, data_size, &sent, tm);
-    if (err != IO_DONE) return sq_throwerror(v, udp_strerror(err));
+    if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), udp_strerror(err));
     sq_pushinteger(v, sent);
     return 1;
 }
@@ -1218,7 +1219,7 @@ static SQRESULT udp_meth_sendto(HSQUIRRELVM v) {
     lua_timeout_markstart(tm);
     err = lua_socket_sendto(&udp->sock, data, data_size, &sent,
             (SA *) &addr, sizeof(addr), tm);
-    if (err != IO_DONE) return sq_throwerror(v, udp_strerror(err));
+    if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), udp_strerror(err));
     sq_pushinteger(v, sent);
     return 1;
 }
@@ -1231,14 +1232,14 @@ static SQRESULT udp_meth_receive(HSQUIRRELVM v) {
     GET_udp_INSTANCE_AT(v, 1);
     char buffer[UDP_DATAGRAMSIZE];
     SQ_OPT_INTEGER(v, 2, count, sizeof(buffer));
-    if(count <= 0) return sq_throwerror(v, _SC("invalid size for receive (%d)"), count);
+    if(count <= 0) return sq_throwerror(v, _SC("invalid size for receive (" _PRINT_INT_FMT ")"), count);
     size_t got;
     int err;
     p_timeout tm = &udp->tm;
     count = MIN(count, sizeof(buffer));
     lua_timeout_markstart(tm);
     err = lua_socket_recv(&udp->sock, buffer, count, &got, tm);
-    if (err != IO_DONE) return sq_throwerror(v, udp_strerror(err));
+    if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), udp_strerror(err));
     sq_pushstring(v, buffer, got);
     return 1;
 }
@@ -1254,7 +1255,7 @@ static SQRESULT udp_meth_receivefrom(HSQUIRRELVM v) {
     char buffer[UDP_DATAGRAMSIZE];
     size_t got;
     SQ_OPT_INTEGER(v, 2, count, sizeof(buffer));
-    if(count <= 0) return sq_throwerror(v, _SC("invalid size for receive (%d)"), count);
+    if(count <= 0) return sq_throwerror(v, _SC("invalid size for receive (" _PRINT_INT_FMT ")"), count);
     int err;
     p_timeout tm = &udp->tm;
     lua_timeout_markstart(tm);
@@ -1274,7 +1275,7 @@ static SQRESULT udp_meth_receivefrom(HSQUIRRELVM v) {
         sq_rawset(v, -3);
         return 1;
     }
-    else return sq_throwerror(v, udp_strerror(err));
+    else return sq_throwerror(v, _SC("%s"), udp_strerror(err));
 }
 
 /*-------------------------------------------------------------------------*\
@@ -1350,7 +1351,7 @@ static SQRESULT udp_meth_setpeername(HSQUIRRELVM v) {
     if(connecting) sq_getinteger(v, 3, &port);
     else sq_optinteger(v, 3, &port, 0);
     const char *err = inet_tryconnect(&udp->sock, address, port, tm);
-    if (err) return sq_throwerror(v,  err);
+    if (err) return sq_throwerror(v, _SC("%s"),  err);
     /* change class to connected or unconnected depending on address */
     if (connecting)
     udp->type = connecting ? UDP_TYPE_CONNECTED : UDP_TYPE_UNCONNECTED;
@@ -1376,7 +1377,7 @@ static SQRESULT udp_meth_setsockname(HSQUIRRELVM v) {
     SQ_GET_STRING(v, 2, address);
     SQ_GET_INTEGER(v, 3, port);
     const char *err = inet_trybind(&udp->sock, address, port);
-    if (err) return sq_throwerror(v, err);
+    if (err) return sq_throwerror(v, _SC("%s"), err);
     return 0;
 }
 
@@ -1413,7 +1414,7 @@ static SQRESULT udp_constructor(HSQUIRRELVM v) {
         sq_setreleasehook(v, 1, udp_releasehook);
         return 1;
     }
-    return sq_throwerror(v, err);
+    return sq_throwerror(v, _SC("%s"), err);
 }
 
 #ifdef HAS_UNIX_DOMAIN_SOCKETS
@@ -1599,7 +1600,7 @@ static SQRESULT unix_meth_accept(HSQUIRRELVM v)
         if(rc < 0) return rc;
         unix_constructor_for_socket(v, sq_gettop(v), sock, UNIX_TYPE_CLIENT);
     } else {
-        return sq_throwerror(v, lua_socket_strerror(err));
+        return sq_throwerror(v, _SC("%s"), lua_socket_strerror(err));
     }
     return 1;
 }
@@ -1634,7 +1635,7 @@ static SQRESULT unix_meth_bind(HSQUIRRELVM v)
     GET_unix_master_INSTANCE_AT(v, 1);
     SQ_GET_STRING(v, 2, path);
     const char *err = unix_trybind(unix_sock, path);
-    if (err) return sq_throwerror(v, err);
+    if (err) return sq_throwerror(v, _SC("%s"), err);
     return 0;
 }
 
@@ -1669,7 +1670,7 @@ static SQRESULT unix_meth_connect(HSQUIRRELVM v)
     GET_unix_INSTANCE_AT(v, 1);
     SQ_GET_STRING(v, 2, path);
     const char *err = unix_tryconnect(unix_sock, path);
-    if (err) return sq_throwerror(v, err);
+    if (err) return sq_throwerror(v, _SC("%s"), err);
     unix_sock->type = UNIX_TYPE_CLIENT;
     return 0;
 }
@@ -1693,7 +1694,7 @@ static SQRESULT unix_meth_listen(HSQUIRRELVM v) {
     GET_unix_master_INSTANCE_AT(v, 1);
     SQ_OPT_INTEGER(v, 2, backlog, 32);
     int err = lua_socket_listen(&unix_sock->sock, backlog);
-    if (err != IO_DONE) return sq_throwerror(v, lua_socket_strerror(err));
+    if (err != IO_DONE) return sq_throwerror(v, _SC("%s"), lua_socket_strerror(err));
     /* turn master object into a server object */
     unix_sock->type = UNIX_TYPE_SERVER;
     return 0;
@@ -1748,7 +1749,7 @@ static SQRESULT unix_constructor(HSQUIRRELVM v) {
     if (!err) {
         return unix_constructor_for_socket(v, 1, sock, UNIX_TYPE_MASTER);
     }
-    return sq_throwerror(v, err);
+    return sq_throwerror(v, _SC("%s"), err);
 }
 
 #endif //HAS_UNIX_DOMAIN_SOCKETS

+ 13 - 13
SquiLu-ext/sq_sqlite3.cpp

@@ -267,7 +267,7 @@ static SQRESULT sqlite3_stmt_bind_value(HSQUIRRELVM v, sqlite3_stmt *stmt, int n
     if(_rc_ != SQLITE_OK)
     {
         sqlite3 *db = sqlite3_db_handle(stmt);
-        return sq_throwerror(v, sqlite3_errmsg(db));
+        return sq_throwerror(v, _SC("%s"), sqlite3_errmsg(db));
     }
     return SQ_OK;
 }
@@ -300,7 +300,7 @@ static SQRESULT sq_sqlite3_stmt_prepare_aux(HSQUIRRELVM v, sqlite3 *db, sqlite3_
     SQ_GET_STRING(v, params_start, szSQL);
     if(sqlite3_prepare_v2(db, szSQL, szSQL_size, stmt, 0) != SQLITE_OK)
     {
-        return sq_throwerror(v, sqlite3_errmsg(db));
+        return sq_throwerror(v, _SC("%s"), sqlite3_errmsg(db));
     }
 
     return sq_sqlite3_stmt_bind_vargv(v, db, *stmt, params_start);
@@ -327,7 +327,7 @@ static SQRESULT sq_sqlite3_stmt_constructor(HSQUIRRELVM v)
     {
         if(sqlite3_prepare_v2(self, "select 'statement not prepared';", -1, &stmt, 0) != SQLITE_OK)
         {
-            _rc_ = sq_throwerror(v, sqlite3_errmsg(self));
+            _rc_ = sq_throwerror(v, _SC("%s"), sqlite3_errmsg(self));
         }
         else _rc_ = SQ_OK;
     }
@@ -458,7 +458,7 @@ static SQRESULT sq_sqlite3_stmt_bind_blob(HSQUIRRELVM v)
     if(sqlite3_bind_blob(self, npar, blob, blob_size, SQLITE_TRANSIENT) != SQLITE_OK)
     {
         sqlite3 *db = sqlite3_db_handle(self);
-        return sq_throwerror(v, sqlite3_errmsg(db));
+        return sq_throwerror(v, _SC("%s"), sqlite3_errmsg(db));
     }
     return SQ_OK;
 }
@@ -472,7 +472,7 @@ static SQRESULT sq_sqlite3_stmt_bind_zeroblob(HSQUIRRELVM v)
     if(sqlite3_bind_zeroblob(self, npar, nsize))
     {
         sqlite3 *db = sqlite3_db_handle(self);
-        return sq_throwerror(v, sqlite3_errmsg(db));
+        return sq_throwerror(v, _SC("%s"), sqlite3_errmsg(db));
     }
     return SQ_OK;
 }
@@ -485,7 +485,7 @@ static SQRESULT sq_sqlite3_stmt_bind_values0(HSQUIRRELVM v, int isExec)
     if (_top_ - 1 != sqlite3_bind_parameter_count(self))
         return sq_throwerror(v,
                              _SC("incorrect number of parameters to bind (%d given, %d to bind)"),
-                             _top_ - 1,
+                             (int)_top_ - 1,
                              sqlite3_bind_parameter_count(self));
 
     for (int n = 2; n <= _top_; ++n)
@@ -1272,7 +1272,7 @@ static SQRESULT sq_sle2vecOfvec(HSQUIRRELVM v)
         return sq_throwerror(v,_SC("invalid parameter 2 of type %s"), sq_gettypename(v, 3));
 
     SQ_OPT_INTEGER(v, 4, start, 0);
-    if(start < 0) return sq_throwerror(v, _SC("invalid start position (%d)"), start);
+    if(start < 0) return sq_throwerror(v, _SC("invalid start position (" _PRINT_INT_FMT ")"), start);
     sq_push(v, 3);
 
     int rc, data_count = 1;
@@ -1385,7 +1385,7 @@ static SQRESULT sq_add2sle(HSQUIRRELVM v)
     SQ_GET_INSTANCE_VAR(v, 2, SQBlob, blob, SQBlob::SQBlob_TAG);
     SQ_GET_STRING(v, 3, str);
     SQ_OPT_INTEGER(v, 4, size, str_size);
-    if(size < 0) return sq_throwerror(v, _SC("invalid size value (%d)"), size);
+    if(size < 0) return sq_throwerror(v, _SC("invalid size value (" _PRINT_INT_FMT ")"), size);
     sq_pushinteger(v, add2sle(*blob, str, size));
     return 1;
 }
@@ -1578,7 +1578,7 @@ static SQRESULT sq_sqlite3_transaction_exec_sq(sq_sqlite3_sdb *sdb, const char *
 {
     char *errmsg;
     if(sqlite3_exec(sdb->db, sql, NULL, NULL, &errmsg) != SQLITE_OK){
-        sq_throwerror(sdb->v, errmsg);
+        sq_throwerror(sdb->v, _SC("%s"), errmsg);
         sqlite3_free(errmsg);
         return SQ_ERROR;
     }
@@ -1703,7 +1703,7 @@ static SQRESULT sq_sqlite3_session_constructor(HSQUIRRELVM v)
     sqlite3_session *session = 0;
     if(sqlite3session_create(self, dbname, &session) != SQLITE_OK)
     {
-        _rc_ = sq_throwerror(v, sqlite3_errmsg(self));
+        _rc_ = sq_throwerror(v, _SC("%s"), sqlite3_errmsg(self));
     }
     else _rc_ = SQ_OK;
     sq_setinstanceup(v, 1, session); //replace self for this instance with this new sqlite3_stmt
@@ -1858,7 +1858,7 @@ static SQRESULT sq_sqlite3_session_iterator_constructor(HSQUIRRELVM v)
     sqlite3_changeset_iter *pIter = 0;
     if(sqlite3changeset_start(&pIter, changeset_size, changeset) != SQLITE_OK)
     {
-        _rc_ = sq_throwerror(v, _SC("sqlite3_changeset_iter error %d"), _rc_);
+        _rc_ = sq_throwerror(v, _SC("sqlite3_changeset_iter error %d"), (int)_rc_);
     }
     else _rc_ = SQ_OK;
     sq_setinstanceup(v, 1, pIter); //replace self for this instance with this new sqlite3_stmt
@@ -2211,7 +2211,7 @@ static SQRESULT sq_sqlite3_close_release(HSQUIRRELVM v, sq_sqlite3_sdb *sdb)
         }
         else
         {
-            if(v) return sq_throwerror(v, sqlite3_errmsg(db));
+            if(v) return sq_throwerror(v, _SC("%s"), sqlite3_errmsg(db));
         }
     }
     return rc;
@@ -2321,7 +2321,7 @@ static SQRESULT sq_sqlite3_exec_dml(HSQUIRRELVM v)
 	SQ_GET_STRING(v, 2, szSQL);
 	char *errmsg;
 	if(sqlite3_exec(self, szSQL, NULL, NULL, &errmsg) != SQLITE_OK){
-		sq_throwerror(v, errmsg);
+		sq_throwerror(v, _SC("%s"), errmsg);
 		sqlite3_free(errmsg);
 		return SQ_ERROR;
 	}

+ 6 - 4
SquiLu-ext/sq_tre.cpp

@@ -139,7 +139,6 @@ if(!dltre_version) return false;
 
 #endif // SQ_USE_TRE_STATIC
 
-
 struct sqtre_st {
     regex_t re;
     regamatch_t amatch;
@@ -225,6 +224,7 @@ static SQRESULT sq_tre_constructor(HSQUIRRELVM v)
     if(subject_str_size < 0) return sq_throwerror(v, _SC("str size - start_offset can't be negative")); \
     const SQChar *subject_str = subject + start_offset; \
     if(max_len && (max_len < subject_str_size)) subject_str_size = max_len;
+
 static SQRESULT sq_tre_exec(HSQUIRRELVM v)
 {
 	SQ_FUNC_VARS(v);
@@ -306,7 +306,6 @@ static SQRESULT sq_tre_gmatch(HSQUIRRELVM v)
     SQInteger rc;
     bool isFirst = true;
 
-
     regmatch_t *pmatch = self->amatch.pmatch;
     SQInteger nmatch = self->amatch.nmatch;
 
@@ -465,7 +464,7 @@ static SQRESULT sq_tre_gsub(HSQUIRRELVM v)
                             }
                             if(idx != match_idx)
                             {
-                                return sq_throwerror(v, _SC("there is no match for replacement $%d"), idx);
+                                return sq_throwerror(v, _SC("there is no match for replacement $" _PRINT_INT_FMT), idx);
                             }
                             continue;
                         }
@@ -491,6 +490,7 @@ static SQRESULT sq_tre_gsub(HSQUIRRELVM v)
 	        default:
                 return sq_throwerror(v, _SC("gsub only works with closure, array, table for replacement"));
 	    }
+
         end_pos = pmatch[0].rm_eo;
         subject_size -= end_pos;
         if(subject_size <= 0) break;
@@ -499,6 +499,7 @@ static SQRESULT sq_tre_gsub(HSQUIRRELVM v)
         {
             if(--max_sub == 0) break;
         }
+
 	}
 
     if(rc == REG_ESPACE) //only no matching errore
@@ -624,10 +625,11 @@ static SQRESULT sq_tre_config(HSQUIRRELVM v)
             sq_pushstring(v, (const SQChar*)config_result, -1);
             break;
         default:
-            return sq_throwerror(v, _SC("unknown config option '%d'"), option);
+            return sq_throwerror(v, _SC("unknown config option '" _PRINT_INT_FMT "')"), option);
     }
 	return 1;
 }
+
 #define _DECL_FUNC(name,nparams,tycheck) {_SC(#name),sq_tre_##name,nparams,tycheck}
 static SQRegFunction sq_tre_methods[] =
 {