SQL_QuoteString can now be used without a DB handle (bug 3427, r=sawce).
This commit is contained in:
@ -519,47 +519,69 @@ static cell AMX_NATIVE_CALL SQL_NextResultSet(AMX *amx, cell *params)
|
||||
|
||||
static cell AMX_NATIVE_CALL SQL_QuoteString(AMX *amx, cell *params)
|
||||
{
|
||||
IDatabase *pDb = (IDatabase *)GetHandle(params[1], Handle_Database);
|
||||
if (!pDb)
|
||||
{
|
||||
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid database handle: %d", params[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int len;
|
||||
char *str = MF_GetAmxString(amx, params[4], 0, &len);
|
||||
size_t newsize;
|
||||
static char buffer[8192];
|
||||
|
||||
if (pDb->QuoteString(str, buffer, sizeof(buffer)-1, &newsize) == 0)
|
||||
if (params[1] != 0)
|
||||
{
|
||||
MF_SetAmxString(amx, params[2], buffer, params[3]);
|
||||
return newsize;
|
||||
IDatabase *pDb = (IDatabase *)GetHandle(params[1], Handle_Database);
|
||||
if (!pDb)
|
||||
{
|
||||
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid database handle: %d", params[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (pDb->QuoteString(str, buffer, sizeof(buffer)-1, &newsize) == 0)
|
||||
{
|
||||
MF_SetAmxString(amx, params[2], buffer, params[3]);
|
||||
return newsize;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
if (g_Sqlite.QuoteString(str, buffer, sizeof(buffer)-1, &newsize) == 0)
|
||||
{
|
||||
MF_SetAmxString(amx, params[2], buffer, params[3]);
|
||||
return newsize;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static cell AMX_NATIVE_CALL SQL_QuoteStringFmt(AMX *amx, cell *params)
|
||||
{
|
||||
IDatabase *pDb = (IDatabase *)GetHandle(params[1], Handle_Database);
|
||||
if (!pDb)
|
||||
{
|
||||
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid database handle: %d", params[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int len;
|
||||
char *str = MF_FormatAmxString(amx, params, 4, &len);
|
||||
size_t newsize;
|
||||
static char buffer[8192];
|
||||
|
||||
if (pDb->QuoteString(str, buffer, sizeof(buffer)-1, &newsize) == 0)
|
||||
if (params[1] != 0)
|
||||
{
|
||||
MF_SetAmxString(amx, params[2], buffer, params[3]);
|
||||
return newsize;
|
||||
IDatabase *pDb = (IDatabase *)GetHandle(params[1], Handle_Database);
|
||||
if (!pDb)
|
||||
{
|
||||
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid database handle: %d", params[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (pDb->QuoteString(str, buffer, sizeof(buffer)-1, &newsize) == 0)
|
||||
{
|
||||
MF_SetAmxString(amx, params[2], buffer, params[3]);
|
||||
return newsize;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
if (g_Sqlite.QuoteString(str, buffer, sizeof(buffer)-1, &newsize) == 0)
|
||||
{
|
||||
MF_SetAmxString(amx, params[2], buffer, params[3]);
|
||||
return newsize;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,3 +77,4 @@ int SqliteDatabase::QuoteString(const char *str, char buffer[], size_t maxlen, s
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -63,3 +63,15 @@ IDatabase *SqliteDriver::Connect(DatabaseInfo *info, int *errcode, char *error,
|
||||
}
|
||||
}
|
||||
|
||||
int SqliteDriver::QuoteString(const char *str, char buffer[], size_t maxlen, size_t *newsize)
|
||||
{
|
||||
char *res = sqlite3_snprintf(static_cast<int>(maxlen), buffer, "%q", str);
|
||||
|
||||
if (res != NULL && newsize != NULL)
|
||||
{
|
||||
*newsize = strlen(buffer);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@ namespace SourceMod
|
||||
IDatabase *Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength);
|
||||
const char *NameString();
|
||||
bool IsCompatDriver(const char *namestr);
|
||||
int QuoteString(const char *str, char buffer[], size_t maxlen, size_t *newsize);
|
||||
};
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user