void cql_load_db(){
MYSQL_RES *res;
MYSQL_ROW row;
int i = 0,finished = false,status;
for(int n = 0;n < MAX_GUILD;n++)
init_blankguild(n);
log_f("Loading dbs.");
if(mysql_query(db,"SELECT * FROM houses; SELECT * FROM house_ranks;")){
//change the above line to if(mysql_query(db,"SELECT * FROM houses;")){
//and it all works fine
log_f("cql_load_db() Error: %s",mysql_error(db));
return;
}
do{
log_f("1");
res = mysql_store_result(db);
if(res){
cql_process_set(res);
mysql_free_result(res);
}
else{
if(!mysql_field_count(db))
log_f("cql_load_db() : Number of rows affected: %lu\n",(unsigned long)mysql_affected_rows(db));
else{
log_f("cql_load_db() : Could not retrieve result set.");
finished = true;
}
}
status = mysql_next_result(db);
if(status != 0){
finished = true;
if(status > 0)
log_f("cql_load_db() : Could not execute statement.");
}
}while(!finished);
}
void cql_init(){
int opt_flags;
opt_flags |= CLIENT_MULTI_STATEMENTS;
db = mysql_init(NULL);
if(!mysql_real_connect(db,NULL,"root","password","wake",0,NULL,opt_flags)){
log_f("cql_init() Error: %s", mysql_error(db));
return;
}
}
void cql_process_ranks(MYSQL_RES *res,MYSQL_FIELD *field){
MYSQL_ROW row;
int i,hid,rid;
while((row = mysql_fetch_row(res))){
hid = atoi(row[0]);
rid = atoi(row[1]);
guilds[hid].rank[rid].name = str_dup(row[2]);
guilds[hid].rank[rid].recruit = atoi(row[3]);
guilds[hid].rank[rid].expel = atoi(row[4]);
guilds[hid].rank[rid].promote = atoi(row[5]);
guilds[hid].rank[rid].demote = atoi(row[6]);
}
if(mysql_errno(db) != 0)
log_f("mysql_fetch_row() failed");
}
void cql_process_houses(MYSQL_RES *res,MYSQL_FIELD *field){
MYSQL_ROW row;
unsigned int i = 0;
while((row = mysql_fetch_row(res))){
log_f("'%s' '%s' '%s' '%d' '%d' '%d' '%d' '%d' '%d' '%d'",row[1],row[2],row[3],atoi(row[4]),atoi(row[5]),atoi(row[6]),atoi(row[7]),atoi(row[8]),atoi(row[9]),atoi(row[10]));
guilds[i].name = str_dup(row[1]);
guilds[i].who_name = str_dup(row[2]);
guilds[i].keywords = str_dup(row[3]);
guilds[i].active = atoi(row[4]);
guilds[i].index = atoi(row[5]);
guilds[i].type = atoi(row[6]);
guilds[i].hidden = atoi(row[7]);
guilds[i].recall = atoi(row[8]);
guilds[i].respawn = atoi(row[9]);
guilds[i].area = atoi(row[10]);
i++;
}
if(mysql_errno(db) != 0)
log_f("mysql_fetch_row() failed");
}
void cql_process_set(MYSQL_RES *res){
MYSQL_FIELD *field = mysql_fetch_field(res);
log_f(" >Loading table %s",field->table);
if(!str_cmp(field->table,"houses"))
cql_process_houses(res,field);
else if(!str_cmp(field->table,"house_ranks"))
cql_process_ranks(res,field);
}
#4 0x000000000042fb3f in do_guildstat (ch=0x7f05a9941cc0,
argument=0x7fffb412469a "skoth") at act_util.c:1130
1130 printf_to_char(ch,"(#%d)Guild Name: '%s%s{x'\n\rWho Title: '{g%s{x'\n\r",guilds[i].index,guilds[i].active ? "{G" : "{R",guilds[i].name,guilds[i].who_name);
(gdb) p i
$1 = 2
(gdb) p guilds[i].name
$2 = 0x7f05abf9a844 "The Kingdom of Skothgard"
(gdb) p guilds[i].active
$3 = false
(gdb) p guilds[i].index
$4 = 0
(gdb) p guilds[i].who_name
$5 = 0x7f0501010101 <Address 0x7f0501010101 out of bounds>
(gdb)
char *str_dup(const char *str){
char *str_new;
if (!str[0])
return &str_empty[0];
if (str >= string_space && str < top_string)
return (char*) str;
str_new = (char*) alloc_mem(strlen(str) + 1);
strcpy(str_new,str);
return str_new;
}
Anyone familiar with MySQL C API, or what could be causing this problem?