#include "net.h"
#include "string.h"
-extern struct gengetopt_args_info conf;
/** pointer to the shared memory area */
extern struct misc_meta_data *mmd;
return ret;
}
-static char *escape_blob(char* old, int size)
+static char *escape_blob(const char* old, int size)
{
char *new;
return new;
}
-static char *escape_str(char* old)
+static char *escape_str(const char* old)
{
return escape_blob(old, strlen(old));
}
char *select_clause = NULL;
if (!streamname)
tmp = get_current_stream();
- else
+ else {
tmp = escape_str(streamname);
+ if (!tmp)
+ return NULL;
+ }
if (!strcmp(tmp, "(none)")) {
free(tmp);
if (filename) {
char *ret, *ebn = escaped_basename(filename);
+ if (!ebn)
+ return NULL;
ret = make_message("select to_days(now()) - "
"to_days(lastplayed) from data "
"where name = '%s'", ebn);
goto out;
ret = -E_MYSQL_SYNTAX;
if (!strcmp(ebn1, ebn2))
- goto out;
+ goto update_dir;
remove_entry(argv[2]); /* no need to escape, ignore error */
q = make_message("update data set name = '%s' where name = '%s'",
ebn2, ebn1);
free(q);
if (ret < 0)
goto out;
+update_dir:
ret = 1;
dn = para_dirname(argv[2]);
if (!dn)
num = atoi(argv[1]);
if (!num)
return -E_MYSQL_SYNTAX;
- stream = (argc == 2)? get_current_stream() : escape_str(argv[2]);
+ if (argc == 2) {
+ stream = get_current_stream();
+ if (!stream)
+ return -E_GET_STREAM;
+ } else {
+ stream = escape_str(argv[2]);
+ if (!stream)
+ return -E_ESCAPE;
+ }
tmp = get_query(stream, NULL, 0);
+ free(stream);
+ if (!tmp)
+ return -E_GET_QUERY;
query = make_message("%s limit %d", tmp, num);
free(tmp);
- ret = -E_GET_QUERY;
- free(stream);
- if (!query)
- goto out;
ret = -E_NORESULT;
result = get_result(query);
free(query);
{
int ret = -E_TMPFILE;
char *msg = make_message("%s\t%s\n", dir, name);
-
if (fputs(msg, out_file) != EOF)
ret = 1;
free(msg);
goto out;
if ((ret = real_query("delete from dir")) < 0)
goto out;
- query = make_message("load data infile '%s' into table dir "
+ query = make_message("load data infile '%s' ignore into table dir "
"fields terminated by '\t' lines terminated by '\n' "
"(dir, name)", tempname);
ret = real_query(query);
goto out;
}
while ((row = mysql_fetch_row(result))) {
+ char *erow;
ret = -E_NOROW;
if (!row[0])
goto out;
send_va_buffer(fd, "new entry: %s\n", row[0]);
+ erow = escape_str(row[0]);
+ if (!erow)
+ goto out;
query = make_message("insert into data (name, pic_id) values "
- "('%s','%s')", row[0], "1");
+ "('%s','%s')", erow, "1");
+ free(erow);
ret = real_query(query);
free(query);
if (ret < 0)
tmp = get_query(stream, NULL, 1);
free(stream);
+ if (!tmp)
+ goto err_out;
query = make_message("%s limit %d", tmp, num);
free(tmp);
result = get_result(query);
goto out;
if (argc < 2)
conf.mysql_database_arg = para_strdup("paraslash");
- else
+ else {
+ ret = -E_ESCAPE;
conf.mysql_database_arg = escape_str(argv[1]);
+ if (!conf.mysql_database_arg)
+ goto out;
+ }
query = make_message("create database %s", conf.mysql_database_arg);
ret = real_query(query);
free(query);