Restructured code for better readability

This commit is contained in:
Gergely Polonkai 2013-01-02 02:04:53 +01:00
parent f71ff426e5
commit 78b21fdb1a
11 changed files with 291 additions and 484 deletions

View File

@ -98,8 +98,7 @@ wmud_config_init(ConfigData **config_data, GError **err)
if (!config_data)
return FALSE;
if (*config_data)
{
if (*config_data) {
g_clear_error(err);
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_REUSE, "Configuration pointer reuse. Please file a bug report!");
return FALSE;
@ -113,8 +112,7 @@ wmud_config_init(ConfigData **config_data, GError **err)
/* TODO: Error checking */
g_key_file_load_from_file(config, config_file->str, 0, &in_err);
if (!g_key_file_has_group(config, "global"))
{
if (!g_key_file_has_group(config, "global")) {
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOGLOBAL, "Config file (%s) does not contain a [global] group", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
@ -122,8 +120,7 @@ wmud_config_init(ConfigData **config_data, GError **err)
return FALSE;
}
if (!g_key_file_has_group(config, "smtp"))
{
if (!g_key_file_has_group(config, "smtp")) {
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOSMTP, "Config file (%s) does not contain an [smtp] group", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
@ -135,12 +132,9 @@ wmud_config_init(ConfigData **config_data, GError **err)
(*config_data)->port = g_key_file_get_integer(config, "global", "port", &in_err);
if (in_err)
{
if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
{
if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
(*config_data)->port = DEFAULT_PORT;
}
else if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE))
{
} else if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE)) {
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_BADPORT, "Config file (%s) contains an invalid port number", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
@ -154,62 +148,46 @@ wmud_config_init(ConfigData **config_data, GError **err)
g_clear_error(&in_err);
(*config_data)->database_file = g_key_file_get_string(config, "global", "world file", &in_err);
if (in_err)
{
if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
{
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOWORLD, "Config file (%s) does not contain a world file path", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
if (in_err && g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOWORLD, "Config file (%s) does not contain a world file path", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
return FALSE;
}
return FALSE;
}
g_clear_error(&in_err);
(*config_data)->admin_email = g_key_file_get_string(config, "global", "admin email", &in_err);
if (in_err)
{
if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
{
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOEMAIL, "Config file (%s) does not contain an admin e-mail address", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
if (in_err && g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOEMAIL, "Config file (%s) does not contain an admin e-mail address", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
return FALSE;
}
return FALSE;
}
g_clear_error(&in_err);
(*config_data)->smtp_server = g_key_file_get_string(config, "smtp", "smtp server", &in_err);
if (in_err)
{
if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
{
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOSMTPSERVER, "Config file (%s) does not contain an smtp server address", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
if (in_err && g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOSMTPSERVER, "Config file (%s) does not contain an smtp server address", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
return FALSE;
}
return FALSE;
}
g_clear_error(&in_err);
(*config_data)->smtp_sender = g_key_file_get_string(config, "smtp", "smtp sender", &in_err);
if (in_err)
{
if (g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
{
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOSMTPSENDER, "Config file (%s) does not contain an smtp sender name", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
if (in_err && g_error_matches(in_err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
g_set_error(err, WMUD_CONFIG_ERROR, WMUD_CONFIG_ERROR_NOSMTPSENDER, "Config file (%s) does not contain an smtp sender name", config_file->str);
g_key_file_free(config);
g_string_free(config_file, TRUE);
wmud_configdata_free(config_data);
return FALSE;
}
return FALSE;
}
g_key_file_free(config);
@ -217,4 +195,3 @@ wmud_config_init(ConfigData **config_data, GError **err)
return TRUE;
}

201
wmud/db.c
View File

@ -59,8 +59,7 @@ wmud_db_init(GError **err)
g_string_append_printf(db_file, "/%s", active_config->database_file);
if ((sqlite_code = sqlite3_open(db_file->str, &dbh)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_open(db_file->str, &dbh)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_CANTOPEN, "Can not open databsae file (%s): %s", db_file->str, sqlite3_errmsg(dbh));
return FALSE;
@ -89,18 +88,15 @@ wmud_db_load_players(GError **err)
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, login, password, email FROM players", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, login, password, email FROM players", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_players(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudPlayer *player = g_new0(wmudPlayer, 1);
player->id = sqlite3_column_int(sth, 0);
player->player_name = g_strdup((gchar *)sqlite3_column_text(sth, 1));
@ -110,13 +106,9 @@ wmud_db_load_players(GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded player _%s_", player->player_name);
players = g_slist_prepend(players, player);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_players(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
@ -144,37 +136,32 @@ wmud_db_save_player(wmudPlayer *player, GError **err)
sqlite3_stmt *sth = NULL;
int sqlite_code;
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "INSERT INTO players (id, login, password, email) VALUES (NULL, ?, NULL, ?)", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "INSERT INTO players (id, login, password, email) VALUES (NULL, ?, NULL, ?)", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_save_player(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
if ((sqlite_code = sqlite3_bind_text(sth, 1, player->player_name, -1, SQLITE_STATIC)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_bind_text(sth, 1, player->player_name, -1, SQLITE_STATIC)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad parameter in wmud_db_save_player(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
if ((sqlite_code = sqlite3_bind_text(sth, 2, player->email, -1, SQLITE_STATIC)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_bind_text(sth, 2, player->email, -1, SQLITE_STATIC)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad parameter in wmud_db_save_player(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
if ((sqlite_code = sqlite3_step(sth)) != SQLITE_DONE)
{
if ((sqlite_code = sqlite3_step(sth)) != SQLITE_DONE) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Statement cannot be executed in wmud_db_save_player(): %s", sqlite3_errmsg(dbh));
return FALSE;
@ -191,26 +178,22 @@ wmud_db_load_planes(GSList **planes, GError **err)
int sqlite_code;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading planes");
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, name FROM planes", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, name FROM planes", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_planes(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudPlane *plane = g_new0(wmudPlane, 1);
plane->id = sqlite3_column_int(sth, 0);
plane->name = g_strdup((gchar *)sqlite3_column_text(sth, 1));
@ -218,13 +201,9 @@ wmud_db_load_planes(GSList **planes, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded plane _%s_", plane->name);
*planes = g_slist_prepend(*planes, plane);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_planes(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
@ -243,26 +222,22 @@ wmud_db_load_planets(GSList **planets, GError **err)
int sqlite_code;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading planets");
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, name FROM planets", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, name FROM planets", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_planets(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudPlanet *planet = g_new0(wmudPlanet, 1);
planet->id = sqlite3_column_int(sth, 0);
planet->name = g_strdup((gchar *)sqlite3_column_text(sth, 1));
@ -270,15 +245,12 @@ wmud_db_load_planets(GSList **planets, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded planet _%s_", planet->name);
*planets = g_slist_prepend(*planets, planet);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_planets(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
}
}
@ -294,26 +266,22 @@ wmud_db_load_directions(GSList **directions, GError **err)
sqlite3_stmt *sth = NULL;
int sqlite_code;
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, short_name, name FROM directions", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, short_name, name FROM directions", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_directions(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudDirection *dir = g_new0(wmudDirection, 1);
dir->id = sqlite3_column_int(sth, 0);
dir->short_name = g_strdup((gchar *)sqlite3_column_text(sth, 1));
@ -322,13 +290,9 @@ wmud_db_load_directions(GSList **directions, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded direction _%s_", dir->name);
*directions = g_slist_prepend(*directions, dir);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_directions(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
@ -346,26 +310,22 @@ wmud_db_load_areas(GSList **areas, GError **err)
int sqlite_code;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading areas");
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, name FROM areas", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, name FROM areas", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_areas(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudArea *area = g_new0(wmudArea, 1);
area->id = sqlite3_column_int(sth, 0);
area->name = g_strdup((gchar *)sqlite3_column_text(sth, 1));
@ -373,13 +333,9 @@ wmud_db_load_areas(GSList **areas, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded area _%s_", area->name);
*areas = g_slist_prepend(*areas, area);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_areas(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
@ -398,26 +354,22 @@ wmud_db_load_rooms(GSList **rooms, GError **err)
int sqlite_code;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading rooms");
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, area, name, distant_description, close_description FROM rooms", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, area, name, distant_description, close_description FROM rooms", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_rooms(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudRoom *room = g_new0(wmudRoom, 1);
room->id = sqlite3_column_int(sth, 0);
room->area_id = sqlite3_column_int(sth, 1);
@ -428,13 +380,9 @@ wmud_db_load_rooms(GSList **rooms, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded room %d/_%s_", room->area_id, room->name);
*rooms = g_slist_prepend(*rooms, room);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_rooms(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
@ -453,26 +401,22 @@ wmud_db_load_exits(GSList **exits, GError **err)
int sqlite_code;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading rooms");
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT room_id, direction, other_side FROM room_exits", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT room_id, direction, other_side FROM room_exits", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_exits(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudExit *room_exit = g_new0(wmudExit, 1);
room_exit->source_room_id = sqlite3_column_int(sth, 0);
room_exit->direction_id = sqlite3_column_int(sth, 1);
@ -481,15 +425,12 @@ wmud_db_load_exits(GSList **exits, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded exit %d =%d=> %d", room_exit->source_room_id, room_exit->direction_id, room_exit->destination_room_id);
*exits = g_slist_prepend(*exits, room_exit);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_exits(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
}
}
@ -506,26 +447,23 @@ wmud_db_load_planet_planes(GSList **planet_planes, GError **err)
int sqlite_code;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading rooms");
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT planet_id, plane_id FROM planet_planes", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT planet_id, plane_id FROM planet_planes", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_planet_planes(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudPlanetPlaneAssoc *planet_plane = g_new0(wmudPlanetPlaneAssoc, 1);
planet_plane->planet_id = sqlite3_column_int(sth, 0);
planet_plane->plane_id = sqlite3_column_int(sth, 1);
@ -533,15 +471,12 @@ wmud_db_load_planet_planes(GSList **planet_planes, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded planet-plane association %d <> %d", planet_plane->planet_id, planet_plane->plane_id);
*planet_planes = g_slist_prepend(*planet_planes, planet_plane);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_exits(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
}
}
@ -558,26 +493,22 @@ wmud_db_load_menu(GSList **menu_items, GError **err)
int sqlite_code;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loading menu items");
if (dbh == NULL)
{
if (dbh == NULL) {
if (err)
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_NOINIT, "Database backend not initialized");
return FALSE;
}
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, menuchar, need_active_char, placement, display_text, fnctn FROM menu ORDER BY placement", -1, &sth, NULL)) != SQLITE_OK)
{
if ((sqlite_code = sqlite3_prepare_v2(dbh, "SELECT id, menuchar, need_active_char, placement, display_text, fnctn FROM menu ORDER BY placement", -1, &sth, NULL)) != SQLITE_OK) {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Bad query in wmud_db_load_menu(): %s", sqlite3_errmsg(dbh));
return FALSE;
}
while (1)
{
while (1) {
sqlite_code = sqlite3_step(sth);
if (sqlite_code == SQLITE_ROW)
{
if (sqlite_code == SQLITE_ROW) {
wmudMenu *menu_item = g_new0(wmudMenu, 1);
menu_item->id = sqlite3_column_int(sth, 0);
menu_item->menuchar = *(sqlite3_column_text(sth, 1));
@ -589,15 +520,12 @@ wmud_db_load_menu(GSList **menu_items, GError **err)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Loaded menu item %d: %s", menu_item->id, menu_item->text);
*menu_items = g_slist_prepend(*menu_items, menu_item);
}
else if (sqlite_code == SQLITE_DONE)
{
} else if (sqlite_code == SQLITE_DONE) {
break;
}
else
{
} else {
g_set_error(err, WMUD_DB_ERROR, WMUD_DB_ERROR_BADQUERY, "Query error in wmud_db_load_menu_items(): %s", sqlite3_errmsg(dbh));
sqlite3_finalize(sth);
return FALSE;
}
}
@ -605,5 +533,4 @@ wmud_db_load_menu(GSList **menu_items, GError **err)
sqlite3_finalize(sth);
return TRUE;
return FALSE;
}

View File

@ -82,11 +82,13 @@ wmud_client_close(wmudClient *client, gboolean send_goodbye)
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "Connection closed.");
g_socket_shutdown(client->socket, TRUE, TRUE, NULL);
clients = g_slist_remove(clients, client);
if (client->player)
if (!client->player->registered)
wmud_player_free(&(client->player));
if (client->player && !client->player->registered)
wmud_player_free(&(client->player));
if (client->buffer)
g_string_free(client->buffer, TRUE);
g_source_destroy(client->socket_source);
g_free(client);
}
@ -114,19 +116,16 @@ wmud_client_callback(GSocket *client_socket, GIOCondition condition, wmudClient
{
GError *err = NULL;
if (condition & G_IO_HUP)
{
if (condition & G_IO_HUP) {
wmud_client_close(client, FALSE);
return FALSE;
}
else if ((condition & G_IO_IN) || (condition & G_IO_PRI))
{
} else if ((condition & G_IO_IN) || (condition & G_IO_PRI)) {
gssize len;
gchar *buf2;
gchar *buf = g_malloc0(sizeof(gchar) * (MAX_RECV_LEN + 1));
if ((len = g_socket_receive(client_socket, buf, MAX_RECV_LEN, NULL, &err)) == 0)
{
if ((len = g_socket_receive(client_socket, buf, MAX_RECV_LEN, NULL, &err)) == 0) {
g_free(buf);
wmud_client_close(client, FALSE);
@ -134,26 +133,21 @@ wmud_client_callback(GSocket *client_socket, GIOCondition condition, wmudClient
}
buf2 = buf;
while (TRUE)
{
while (TRUE) {
char *r = strchr((char *)buf2, '\r'),
*n = strchr((char *)buf2, '\n');
if (r || n)
{
if (r || n) {
gint i,
sloc = -1;
if ((r < n) && r)
{
if ((r < n) && r) {
if (client->buffer->len > 0)
g_string_append_len(client->buffer, buf2, (r - buf2));
else
g_string_overwrite_len(client->buffer, 0, buf2, (r - buf2));
buf2 = r;
}
else if (n)
{
} else if (n) {
if (client->buffer->len > 0)
g_string_append_len(client->buffer, buf2, (n - buf2));
else
@ -162,28 +156,22 @@ wmud_client_callback(GSocket *client_socket, GIOCondition condition, wmudClient
}
/* Remove telnet codes from the string */
for (i = 0; i < client->buffer->len; i++)
{
for (i = 0; i < client->buffer->len; i++) {
guchar c = (client->buffer->str)[i];
if ((c >= 240) || (c == 1))
{
if ((c >= 240) || (c == 1)) {
if (sloc == -1)
sloc = i;
}
else
{
if (sloc != -1)
{
} else {
if (sloc != -1) {
g_string_erase(client->buffer, sloc, i - sloc);
sloc = -1;
}
}
}
if (sloc != -1)
{
g_string_erase(client->buffer, sloc, -1);
}
switch (client->state)
{
@ -349,11 +337,10 @@ wmud_client_callback(GSocket *client_socket, GIOCondition condition, wmudClient
g_string_erase(client->buffer, 0, -1);
for (; ((*buf2 == '\r') || (*buf2 == '\n')) && *buf2; buf2++);
if (!*buf2)
break;
}
else
{
} else {
if (client->buffer->len > 0)
g_string_append(client->buffer, buf2);
else
@ -405,8 +392,8 @@ game_source_callback(GSocket *socket, GIOCondition condition, struct AcceptData
g_source_attach(client_source, accept_data->context);
g_clear_error(&err);
if ((remote_addr = g_socket_get_remote_address(client_socket, &err)) != NULL)
{
if ((remote_addr = g_socket_get_remote_address(client_socket, &err)) != NULL) {
GInetAddress *addr;
gchar *ip_addr;
@ -416,18 +403,13 @@ game_source_callback(GSocket *socket, GIOCondition condition, struct AcceptData
g_free(ip_addr);
g_object_unref(addr);
g_object_unref(remote_addr);
}
else
{
} else {
if (err)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "New game connection. The remote address is unknown. This is a bug. Message from upper level: %s", err->message);
}
else
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "New game connection. The remote address is unknown. This is a bug.");
}
}
g_clear_error(&err);
wmud_client_send(client, "By what name shall we call you? ");
@ -452,10 +434,10 @@ wmud_networking_init(guint port_number, GMainContext *game_context, GSList *menu
GSocketListener *game_listener;
gboolean need_ipv4_socket = TRUE;
GSocket *game_socket6,
*game_socket4;
*game_socket4;
GError *in_err = NULL;
GSource *game_net_source4 = NULL,
*game_net_source6 = NULL;
*game_net_source6 = NULL;
clients = NULL;
game_listener = g_socket_listener_new();
@ -463,8 +445,7 @@ wmud_networking_init(guint port_number, GMainContext *game_context, GSList *menu
/* The following snippet is borrowed from GLib 2.30's gsocketlistener.c
* code, to create the necessary sockets to listen on both IPv4 and
* IPv6 address */
if ((game_socket6 = g_socket_new(G_SOCKET_FAMILY_IPV6, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL)) != NULL)
{
if ((game_socket6 = g_socket_new(G_SOCKET_FAMILY_IPV6, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL)) != NULL) {
GInetAddress *inet_address;
GSocketAddress *address;
gboolean result;
@ -475,15 +456,16 @@ wmud_networking_init(guint port_number, GMainContext *game_context, GSList *menu
g_socket_set_listen_backlog(game_socket6, 10);
result = g_socket_bind(game_socket6, address, TRUE, NULL)
&& g_socket_listen(game_socket6, NULL);
result =
g_socket_bind(game_socket6, address, TRUE, NULL)
&& g_socket_listen(game_socket6, NULL);
g_object_unref(address);
if (!result)
{
if (!result) {
g_object_unref(game_socket6);
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "Unable to create listener IPv6 socket");
return FALSE;
}
@ -491,14 +473,14 @@ wmud_networking_init(guint port_number, GMainContext *game_context, GSList *menu
need_ipv4_socket = FALSE;
game_net_source6 = g_socket_create_source(game_socket6, G_IO_IN, NULL);
/* This function should never return error. If so, that would be a really big bug which will trigger a higher level problem for sure */
/* This function should never return error. If so, that would be a
* really big bug which will trigger a higher level problem for sure */
g_socket_listener_add_socket(game_listener, game_socket6, NULL, NULL);
}
if (need_ipv4_socket)
{
if ((game_socket4 = g_socket_new(G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL)) != NULL)
{
if (need_ipv4_socket) {
if ((game_socket4 = g_socket_new(G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL)) != NULL) {
GInetAddress *inet_address;
GSocketAddress *address;
gboolean result;
@ -514,22 +496,21 @@ wmud_networking_init(guint port_number, GMainContext *game_context, GSList *menu
g_object_unref(address);
if (!result)
{
if (!result) {
g_object_unref(game_socket4);
if (!game_socket6)
g_object_unref(game_socket6);
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "Unable to create listener IPv4 socket!\n");
return FALSE;
}
game_net_source4 = g_socket_create_source(game_socket4, G_IO_IN, NULL);
g_socket_listener_add_socket(game_listener, game_socket4, NULL, NULL);
}
}
else
{
} else {
if (game_socket6 != NULL)
g_clear_error(&in_err);
else
@ -540,13 +521,12 @@ wmud_networking_init(guint port_number, GMainContext *game_context, GSList *menu
accept_data->listener = game_listener;
accept_data->context = game_context;
if (game_net_source6)
{
if (game_net_source6) {
g_source_set_callback(game_net_source6, (GSourceFunc)game_source_callback, (gpointer)accept_data, NULL);
g_source_attach(game_net_source6, game_context);
}
if (game_net_source4)
{
if (game_net_source4) {
g_source_set_callback(game_net_source4, (GSourceFunc)game_source_callback, (gpointer)accept_data, NULL);
g_source_attach(game_net_source4, game_context);
}
@ -554,6 +534,7 @@ wmud_networking_init(guint port_number, GMainContext *game_context, GSList *menu
game_menu = menu_items;
email_regex = g_regex_new("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", G_REGEX_CASELESS, 0, NULL);
return TRUE;
}
@ -583,12 +564,9 @@ wmud_client_send(wmudClient *client, const gchar *fmt, ...)
void
wmud_client_quitanswer(wmudClient *client, gboolean answer)
{
if (answer)
{
if (answer) {
wmud_client_close(client, TRUE);
}
else
{
} else {
wmud_client_send(client, "Good boy!\r\n");
client->state = WMUD_CLIENT_STATE_MENU;
}
@ -597,14 +575,11 @@ wmud_client_quitanswer(wmudClient *client, gboolean answer)
void
wmud_client_newchar_answer(wmudClient *client, gboolean answer)
{
if (answer)
{
if (answer) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Creating new player\n");
wmud_client_send(client, "Welcome to this MUD!\r\nPlease enter your e-mail address: ");
client->state = WMUD_CLIENT_STATE_REGISTERING;
}
else
{
} else {
wmud_client_send(client, "What is your player-name, then? ");
client->state = WMUD_CLIENT_STATE_FRESH;
}

View File

@ -66,14 +66,12 @@ gboolean
rl_sec_elapsed(gpointer user_data)
{
elapsed_seconds++;
if (elapsed_seconds == G_MAXUINT32)
{
if (elapsed_seconds == G_MAXUINT32) {
elapsed_seconds = 0;
elapsed_cycle++;
}
if (elapsed_seconds % 30 == 0)
{
if (elapsed_seconds % 30 == 0) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, "Heartbeat");
}
@ -116,7 +114,7 @@ wmud_game_init(GThread **game_thread, GMainContext **game_context)
g_source_unref(timeout_source);
g_clear_error(&err);
#if GLIB_CHECK_VERSION(2,32,0)
#if GLIB_CHECK_VERSION(2, 32, 0)
*game_thread = g_thread_new("game", (GThreadFunc)game_thread_func, game_loop);
#else
*game_thread = g_thread_create((GThreadFunc)game_thread_func, game_loop, TRUE, &err);
@ -124,4 +122,3 @@ wmud_game_init(GThread **game_thread, GMainContext **game_context)
return TRUE;
}

View File

@ -83,8 +83,7 @@ check_direction_dups2(wmudDirection *dir1, wmudDirection *dir2)
static void
check_direction_dups1(wmudDirection *dir, struct findData *find_data)
{
if (find_data->last != dir->name)
{
if (find_data->last != dir->name) {
find_data->found = (find_data->found > 1) ? find_data->found : 0;
find_data->last = dir->name;
}
@ -98,17 +97,16 @@ check_direction_command(wmudDirection *dir, gboolean *found)
{
wmudCommand *cmd;
for (cmd = command_list; cmd->command; cmd++)
{
if (g_ascii_strcasecmp(dir->short_name, cmd->command) == 0)
{
for (cmd = command_list; cmd->command; cmd++) {
if (g_ascii_strcasecmp(dir->short_name, cmd->command) == 0) {
*found = TRUE;
return;
}
if (g_ascii_strcasecmp(dir->name, cmd->command) == 0)
{
if (g_ascii_strcasecmp(dir->name, cmd->command) == 0) {
*found = TRUE;
return;
}
}
@ -131,16 +129,14 @@ wmud_interpreter_check_directions(GSList *directions, GError **err)
g_slist_foreach(directions, (GFunc)check_direction_command, &command_found);
if (command_found)
{
if (command_found) {
g_set_error(err, WMUD_INTERPRETER_ERROR, WMUD_INTERPRETER_ERROR_DUPCMD, "Direction commands are not unique. Please check the database!");
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Direction command are not unique. Please check the database!");
}
g_slist_foreach(directions, (GFunc)check_direction_dups1, &find_data);
if (find_data.found > 1)
{
if (find_data.found > 1) {
g_set_error(err, WMUD_INTERPRETER_ERROR, WMUD_INTERPRETER_ERROR_DUPCMD, "Direction commands defined in the database are not unique!");
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Direction commands defined in the databsae are not unique.");
@ -170,9 +166,10 @@ wmud_interpret_game_command(wmudClient *client)
match_count = 0;
GSList *matches = NULL;
if (strchr(client->buffer->str, '\r') || strchr(client->buffer->str, '\n'))
{
/* TODO: We should NEVER reach this point! */
if (strchr(client->buffer->str, '\r') || strchr(client->buffer->str, '\n')) {
/* We should NEVER reach this point! */
g_assert_not_reached();
return;
}
@ -180,44 +177,33 @@ wmud_interpret_game_command(wmudClient *client)
GString *token;
while (*a)
{
for (start = a; *start; start++)
{
if (!str_delim)
{
if ((*start == '"') || (*start == '\''))
{
while (*a) {
for (start = a; *start; start++) {
if (!str_delim) {
if ((*start == '"') || (*start == '\'')) {
str_delim = *start;
start++;
break;
}
else if (g_ascii_isspace(*start) || (!*start))
{
} else if (g_ascii_isspace(*start) || (!*start)) {
break;
}
}
}
for (end = start; *end; end++)
{
if (!str_delim && strchr("'\" \t", *end))
{
for (end = start; *end; end++) {
if (!str_delim && strchr("'\" \t", *end)) {
break;
}
else if (str_delim && (*end == str_delim))
{
} else if (str_delim && (*end == str_delim)) {
str_delim = 0;
break;
}
else if (!*end)
{
} else if (!*end) {
break;
}
}
if (*start)
{
if (*start) {
token = g_string_new_len(start, end - start);
command_parts = g_slist_prepend(command_parts, token);
command_parts_count++;
@ -228,8 +214,7 @@ wmud_interpret_game_command(wmudClient *client)
a++;
}
if (str_delim)
{
if (str_delim) {
wmud_client_send(client, "You should close quotes of any kind, like %c, shouldn't you?\r\n", str_delim);
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(command_parts, (GDestroyNotify)destroy_string);
@ -240,29 +225,26 @@ wmud_interpret_game_command(wmudClient *client)
return;
}
if (command_parts_count == 0)
{
if (command_parts_count == 0) {
/* TODO: handle empty command */
return;
}
command_parts = g_slist_reverse(command_parts);
for (cmd = command_list; cmd->command; cmd++)
{
for (cmd = command_list; cmd->command; cmd++) {
GString *input = (GString *)(command_parts->data);
gint cmp;
if (((cmp = g_ascii_strncasecmp(input->str, cmd->command, input->len)) == 0) && !cmd->command[input->len])
{
if (((cmp = g_ascii_strncasecmp(input->str, cmd->command, input->len)) == 0) && !cmd->command[input->len]) {
g_slist_free(matches);
match_count = 1;
matches = NULL;
matches = g_slist_prepend(matches, cmd);
break;
}
else if (cmp == 0)
{
} else if (cmp == 0) {
matches = g_slist_prepend(matches, cmd);
match_count++;
}
@ -305,4 +287,3 @@ WMUD_COMMAND(quit)
client->state = WMUD_CLIENT_STATE_YESNO;
client->yesNoCallback = wmud_client_quitanswer;
}

View File

@ -68,8 +68,7 @@ wmud_random_string(gint len)
gchar *ret = g_malloc0(len + 1);
gint i;
for (i = 0; i < len; i++)
{
for (i = 0; i < len; i++) {
gchar c = 0;
/* Include only printable characters, but exclude $ because of
* salt generation, and space to avoid misunderstanding in the
@ -177,31 +176,21 @@ main(int argc, char **argv)
/* TODO: Command line parsing */
/* TODO: Create signal handlers! */
if (!wmud_config_init(&active_config, &err))
{
if (!wmud_config_init(&active_config, &err)) {
if (err)
{
g_critical("Config file parsing error: %s", err->message);
}
else
{
g_critical("Config file parsing error!");
}
return 1;
}
g_clear_error(&err);
if (!wmud_db_init(&err))
{
if (!wmud_db_init(&err)) {
if (err)
{
g_critical("Database initialization error: %s", err->message);
}
else
{
g_critical("Database initialization error!");
}
return 1;
}
@ -209,13 +198,9 @@ main(int argc, char **argv)
g_clear_error(&err);
wmud_db_load_players(&err);
if (!wmud_world_load(&err))
{
/* TODO: Send some kind of an error? */
return 1;
}
if (!wmud_menu_init(&game_menu))
{
if (!wmud_menu_init(&game_menu)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "An error occured during menu loading.");
return 1;
@ -228,16 +213,11 @@ main(int argc, char **argv)
wmud_game_init(&game_thread, &game_context);
g_clear_error(&err);
if (!wmud_networking_init(active_config->port, game_context, game_menu, &err))
{
if (!wmud_networking_init(active_config->port, game_context, game_menu, &err)) {
if (err)
{
g_critical("Database initialization error: %s", err->message);
}
else
{
g_critical("Database initialization error: unknown error!");
}
return 1;
}

View File

@ -51,8 +51,7 @@
void
wmud_maintenance_check_players(wmudPlayer *player, gpointer user_data)
{
if (player->cpassword == NULL)
{
if (player->cpassword == NULL) {
gchar *pw,
*salt,
*cpw;
@ -68,8 +67,8 @@ wmud_maintenance_check_players(wmudPlayer *player, gpointer user_data)
" password set", player->player_name);
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "New password will be %s", pw);
player->cpassword = cpw;
/* TODO: Send e-mail about the new password. Upon completion,
* set it in the database */
/* TODO: Send e-mail about the new password. Upon completion, set it in
* the database */
g_free(pw);
g_free(salt);
@ -130,14 +129,11 @@ wmud_smtp_read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
const char *data;
if (size * nmemb < 1)
{
return 0;
}
data = text[pooh->counter];
if (data)
{
if (data) {
size_t len = strlen(data);
memcpy(ptr, data, len);
pooh->counter++;
@ -161,26 +157,25 @@ wmud_maintenance_init(void)
curl_global_init(CURL_GLOBAL_DEFAULT);
if (!(curl = curl_easy_init()))
{
g_error("Could not initialize the CURL library!");
}
if (!(mcurl = curl_multi_init()))
{
g_error("Could not initialize the CURL library!");
}
smtp_server_real = g_strconcat("smtp://", active_config->smtp_server, NULL);
curl_easy_setopt(curl, CURLOPT_URL, smtp_server_real);
g_free(smtp_server_real);
if (active_config->smtp_username && active_config->smtp_password)
{
if (active_config->smtp_username && active_config->smtp_password) {
curl_easy_setopt(curl, CURLOPT_USERNAME, active_config->smtp_username);
curl_easy_setopt(curl, CURLOPT_PASSWORD, active_config->smtp_password);
}
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, active_config->smtp_sender);
curl_easy_setopt(curl, CURLOPT_USE_SSL, (CURLUSESSL_ALL && active_config->smtp_tls));
/* TODO: Maybe these could go into the configuration as well */
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_SSLVERSION, 0L);
@ -204,10 +199,9 @@ wmud_maintenance_init(void)
g_source_attach(timeout_source, maint_context);
g_source_unref(timeout_source);
#if GLIB_CHECK_VERSION(2,32,0)
#if GLIB_CHECK_VERSION(2, 32, 0)
g_thread_new("maintenance", (GThreadFunc)maint_thread_func, maint_loop);
#else
g_thread_create((GThreadFunc)maint_thread_func, maint_loop, TRUE, NULL);
#endif
}

View File

@ -48,6 +48,7 @@ wmud_menu_items_check(GSList *menu_items, GError **err)
/* TODO: Check for duplicate menuchars */
/* TODO: Check for duplicate menu texts */
/* TODO: Check for duplicate placements */
return TRUE;
}
@ -56,10 +57,13 @@ menu_item_free(wmudMenu *menu_item)
{
if (menu_item->text)
g_free(menu_item->text);
if (menu_item->display_text)
g_free(menu_item->display_text);
if (menu_item->display_text_ansi)
g_free(menu_item->display_text_ansi);
if (menu_item->func)
g_free(menu_item->func);
@ -77,6 +81,7 @@ wmud_menu_items_free(GSList **menu_items)
g_slist_foreach(*menu_items, (GFunc)menu_item_free, NULL);
g_slist_free(*menu_items);
#endif
*menu_items = NULL;
}
}
@ -93,14 +98,12 @@ menu_item_prepare(wmudMenu *item, GHashTable *cmdtable)
m1 = g_ascii_tolower(item->menuchar);
m2 = g_ascii_toupper(item->menuchar);
for (a = item->text; *a; a++)
if ((*a == m1) || (*a == m2))
{
if ((*a == m1) || (*a == m2)) {
found = a;
break;
}
if (found)
{
if (found) {
gchar *tmp;
tmp = g_ascii_strdown(item->text, -1);
@ -110,9 +113,7 @@ menu_item_prepare(wmudMenu *item, GHashTable *cmdtable)
ds->str[found - item->text] = g_ascii_toupper(item->menuchar);
dsa->str[found - item->text] = g_ascii_toupper(item->menuchar);
}
else
{
} else {
found = item->text;
ds = g_string_new(item->text);
dsa = g_string_new(item->text);
@ -130,7 +131,6 @@ menu_item_prepare(wmudMenu *item, GHashTable *cmdtable)
g_string_insert(dsa, found - item->text + 8, "\x1b[0m");
item->display_text = g_string_free(ds, FALSE);
item->display_text_ansi = g_string_free(dsa, FALSE);
}
WMUD_MENU_COMMAND(enter_world)
@ -199,23 +199,20 @@ wmud_menu_init(GSList **menu)
GError *in_err = NULL;
GHashTable *cmdtable;
if (!wmud_db_load_menu(&menu_items, &in_err))
{
if (!wmud_db_load_menu(&menu_items, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Unable to load menu items from the database: %s", in_err->message);
wmud_menu_items_free(&menu_items);
return FALSE;
}
if (!menu_items)
{
if (!menu_items) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No menu items were found in the database!");
return FALSE;
}
if (!wmud_menu_items_check(menu_items, &in_err))
{
if (!wmud_menu_items_check(menu_items, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Menu items pre-flight check error: %s", in_err->message);
wmud_menu_items_free(&menu_items);
@ -223,9 +220,8 @@ wmud_menu_init(GSList **menu)
}
if (*menu)
{
wmud_menu_items_free(menu_items);
}
*menu = menu_items;
cmdtable = g_hash_table_new(g_str_hash, g_str_equal);
@ -257,9 +253,7 @@ static gint
find_by_menuchar(wmudMenu *item, gchar *menuchar)
{
if (g_ascii_toupper(*menuchar) == g_ascii_toupper(item->menuchar))
{
return 0;
}
return 1;
}
@ -270,9 +264,7 @@ wmud_menu_get_command_by_menuchar(gchar menuchar, GSList *game_menu)
GSList *item;
if ((item = g_slist_find_custom(game_menu, &menuchar, (GCompareFunc)find_by_menuchar)) != NULL)
{
return ((wmudMenu *)(item->data))->func;
}
return NULL;
}
@ -283,12 +275,7 @@ wmud_menu_execute_command(wmudClient *client, gchar *command)
wmudMenuCommandFunc func;
if ((func = g_hash_table_lookup(mcmd_table, command)) == NULL)
{
wmud_client_send(client, "Unknown menu command.\r\n");
}
else
{
func(client);
}
}

View File

@ -125,13 +125,16 @@ wmud_player_free(wmudPlayer **player)
{
if (!*player)
return;
if ((*player)->player_name)
g_free((*player)->player_name);
if ((*player)->cpassword)
g_free((*player)->cpassword);
if ((*player)->email)
g_free((*player)->email);
g_free(*player);
*player = NULL;
}

View File

@ -37,8 +37,7 @@ wmud_texts_init(void)
text_table = g_hash_table_new(g_str_hash, g_str_equal);
for (i = 0; i < g_strv_length((gchar **)text_files); i++)
{
for (i = 0; i < g_strv_length((gchar **)text_files); i++) {
GFile *tf;
GFileInfo *tfi;
GError *err = NULL;
@ -56,12 +55,13 @@ wmud_texts_init(void)
contents = g_malloc0(tfs + 1);
g_clear_error(&err);
if (!g_file_load_contents(tf, NULL, &contents, &length, NULL, &err))
{
if (!g_file_load_contents(tf, NULL, &contents, &length, NULL, &err)) {
g_object_unref(tfi);
g_object_unref(tf);
continue;
}
g_hash_table_insert(text_table, (char *)text_files[i], contents);
g_object_unref(tfi);
@ -78,4 +78,3 @@ wmud_text_send_to_client(gchar *text_name, wmudClient *client)
gchar *text = g_hash_table_lookup(text_table, text_name);
wmud_client_send(client, "%s\r\n", text);
}

View File

@ -35,21 +35,25 @@ struct findData {
guint found;
gchar *last;
};
struct dirCheckData {
GSList *directions;
GSList *rooms;
gboolean sane;
};
struct assocPlanetPlanes {
GSList *planets;
GSList *planes;
gboolean bad_planet;
gboolean bad_plane;
};
struct assocRoomAreas {
GSList *areas;
gboolean found;
};
struct assocExitRooms {
GSList *rooms;
GSList *directions;
@ -70,8 +74,7 @@ check_plane_dups2(wmudPlane *plane, gchar *name)
static void
check_plane_dups1(wmudPlane *plane, struct findData *find_data)
{
if (find_data->last != plane->name)
{
if (find_data->last != plane->name) {
find_data->last = plane->name;
find_data->found = (find_data->found > 1) ? find_data->found : 0;
}
@ -113,8 +116,7 @@ check_planet_dups2(wmudPlanet *planet, gchar *name)
static void
check_planet_dups1(wmudPlanet *planet, struct findData *find_data)
{
if (find_data->last != planet->name)
{
if (find_data->last != planet->name) {
find_data->last = planet->name;
find_data->found = (find_data->found > 1) ? find_data->found : 0;
}
@ -156,8 +158,7 @@ check_area_dups2(wmudArea *area, gchar *name)
static void
check_area_dups1(wmudArea *area, struct findData *find_data)
{
if (find_data->last != area->name)
{
if (find_data->last != area->name) {
find_data->last = area->name;
find_data->found = (find_data->found > 1) ? find_data->found : 0;
}
@ -239,18 +240,13 @@ wmud_world_check_exits(GSList *exits, GSList *directions, GSList *rooms, GError
static gint
check_room_dups2(wmudRoom *room1, wmudRoom *room2)
{
if (room1->area_id == room2->area_id)
{
return g_ascii_strcasecmp(room1->name, room2->name);
}
return 1;
return (room1->area_id == room2->area_id) ? g_ascii_strcasecmp(room1->name, room2->name) : 1;
}
static void
check_room_dups1(wmudRoom *room, struct findData *find_data)
{
if (find_data->last != (gchar *)room)
{
if (find_data->last != (gchar *)room) {
find_data->last = (gchar *)room;
find_data->found = (find_data->found > 1) ? find_data->found : 0;
}
@ -307,15 +303,14 @@ planet_plane_assoc(wmudPlanetPlaneAssoc *association, struct assocPlanetPlanes *
GSList *planet,
*plane;
if ((planet = g_slist_find_custom(assoc_data->planets, &(association->planet_id), (GCompareFunc)find_planet_by_id)) == NULL)
{
if ((planet = g_slist_find_custom(assoc_data->planets, &(association->planet_id), (GCompareFunc)find_planet_by_id)) == NULL) {
g_debug("Planet: %d", association->planet_id);
assoc_data->bad_planet = TRUE;
return;
}
if ((plane = g_slist_find_custom(assoc_data->planes, &(association->plane_id), (GCompareFunc)find_plane_by_id)) == NULL)
{
if ((plane = g_slist_find_custom(assoc_data->planes, &(association->plane_id), (GCompareFunc)find_plane_by_id)) == NULL) {
g_debug("Plane: %d", association->plane_id);
assoc_data->bad_plane = TRUE;
@ -354,15 +349,13 @@ wmud_world_assoc_planets_planes(GSList *planets, GSList *planes, GSList *planet_
g_slist_foreach(planet_planes, (GFunc)planet_plane_assoc, &planet_plane_assoc_data);
if (planet_plane_assoc_data.bad_planet || planet_plane_assoc_data.bad_plane)
{
if (planet_plane_assoc_data.bad_planet || planet_plane_assoc_data.bad_plane) {
g_set_error(err, WMUD_WORLD_ERROR, WMUD_WORLD_ERROR_BADASSOC, "An illegal planet <-> plane association was found in the database!");
return FALSE;
}
if (g_slist_find_custom(planets, NULL, (GCompareFunc)find_noplane_planet) != NULL)
{
if (g_slist_find_custom(planets, NULL, (GCompareFunc)find_noplane_planet) != NULL) {
g_set_error(err, WMUD_WORLD_ERROR, WMUD_WORLD_ERROR_BADPLANET, "A planet with no planes associated was found in the database!");
return FALSE;
@ -385,12 +378,9 @@ assoc_room_area(wmudRoom *room, struct assocRoomAreas *find_data)
{
GSList *area_item;
if ((area_item = g_slist_find_custom(find_data->areas, &(room->area_id), (GCompareFunc)find_area_by_id)) == NULL)
{
if ((area_item = g_slist_find_custom(find_data->areas, &(room->area_id), (GCompareFunc)find_area_by_id)) == NULL) {
find_data->found = TRUE;
}
else
{
} else {
wmudArea *area = area_item->data;
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Associating room _%s_[%d] to area _%s_[%d]", room->name, room->id, area->name, area->id);
area->rooms = g_slist_append(area->rooms, room);
@ -416,8 +406,7 @@ wmud_world_assoc_rooms_areas(GSList *rooms, GSList *areas, GError **err)
g_slist_foreach(rooms, (GFunc)assoc_room_area, &find_data);
if (find_data.found)
{
if (find_data.found) {
g_set_error(err, WMUD_WORLD_ERROR, WMUD_WORLD_ERROR_BADASSOC, "Found a bad Area <-> Room association in the database!");
return FALSE;
@ -441,10 +430,7 @@ assoc_room_planets(wmudRoom *room, GSList *planets)
gint
find_noplane_room(wmudRoom *room, gconstpointer notused)
{
if (room->planes == NULL)
return 0;
return 1;
return (room->planes == NULL) ? 0 : 1;
}
/**
@ -511,6 +497,7 @@ void
wmud_world_assoc_exits_rooms(GSList *exits, GSList *directions, GSList *rooms, GError **err)
{
struct assocExitRooms assoc_data = {rooms, directions};
g_slist_foreach(exits, (GFunc)assoc_room_exit, &assoc_data);
}
@ -519,8 +506,10 @@ free_direction(wmudDirection *dir)
{
if (dir->short_name)
g_free(dir->short_name);
if (dir->name)
g_free(dir->name);
g_free(dir);
}
@ -529,8 +518,7 @@ wmud_world_free_directions(GSList *directions)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Freeing direction list");
if (directions)
{
if (directions) {
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(directions, (GDestroyNotify)free_direction);
#else
@ -554,8 +542,7 @@ wmud_world_free_planes(GSList *planes)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Freeing planes list");
if (planes)
{
if (planes) {
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(planes, (GDestroyNotify)free_plane);
#else
@ -579,8 +566,7 @@ wmud_world_free_planets(GSList *planets)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Freeing planets list");
if (planets)
{
if (planets) {
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(planets, (GDestroyNotify)free_planet);
#else
@ -604,8 +590,7 @@ wmud_world_free_areas(GSList *areas)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Freeing areas list");
if (areas)
{
if (areas) {
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(areas, (GDestroyNotify)free_area);
#else
@ -620,8 +605,10 @@ free_room(wmudRoom *room)
{
if (room->name)
g_free(room->name);
if (room->distant_description)
g_free(room->distant_description);
if (room->close_description)
g_free(room->close_description);
@ -633,8 +620,7 @@ wmud_world_free_rooms(GSList *rooms)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Freeing rooms list");
if (rooms)
{
if (rooms) {
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(rooms, (GDestroyNotify)free_room);
#else
@ -649,8 +635,7 @@ wmud_world_free_exits(GSList *exits)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Freeing exits list");
if (exits)
{
if (exits) {
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(exits, (GDestroyNotify)g_free);
#else
@ -665,8 +650,7 @@ wmud_world_free_planet_planes(GSList *planet_planes)
{
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Freeing planet <-> plane associations list");
if (planet_planes)
{
if (planet_planes) {
#if GLIB_CHECK_VERSION(2, 28, 0)
g_slist_free_full(planet_planes, (GDestroyNotify)g_free);
#else
@ -695,24 +679,24 @@ wmud_world_load(GError **err)
GError *in_err = NULL;
/* Load directions from the database and check them */
if (!wmud_db_load_directions(&directions, &in_err))
{
if (!wmud_db_load_directions(&directions, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Could not load directions from database: %s", in_err->message);
wmud_world_free_directions(directions);
g_clear_error(&in_err);
return FALSE;
}
if (!directions)
{
if (!directions) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No directions were found in the database!");
g_clear_error(&in_err);
return FALSE;
}
g_clear_error(&in_err);
if (!wmud_interpreter_check_directions(directions, &in_err))
{
if (!wmud_interpreter_check_directions(directions, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Direction list pre-flight check error: %s", in_err->message);
wmud_world_free_directions(directions);
g_clear_error(&in_err);
@ -722,8 +706,8 @@ wmud_world_load(GError **err)
/* Load planes from the database and check them */
g_clear_error(&in_err);
if (!wmud_db_load_planes(&planes, &in_err))
{
if (!wmud_db_load_planes(&planes, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Could not load planes from database: %s", in_err->message);
wmud_world_free_planes(planes);
wmud_world_free_directions(directions);
@ -731,17 +715,18 @@ wmud_world_load(GError **err)
return FALSE;
}
if (!planes)
{
if (!planes) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No planes were found in the database!");
wmud_world_free_directions(directions);
g_clear_error(&in_err);
return FALSE;
}
g_clear_error(&in_err);
if (!wmud_world_check_planes(planes, &in_err))
{
if (!wmud_world_check_planes(planes, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Plane list pre-flight check error: %s", in_err->message);
wmud_world_free_planes(planes);
wmud_world_free_directions(directions);
@ -752,8 +737,8 @@ wmud_world_load(GError **err)
/* Load planets from the database and check them */
g_clear_error(&in_err);
if (!wmud_db_load_planets(&planets, &in_err))
{
if (!wmud_db_load_planets(&planets, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Could not load planets from database: %s", in_err->message);
wmud_world_free_planets(planets);
wmud_world_free_planes(planes);
@ -762,8 +747,8 @@ wmud_world_load(GError **err)
return FALSE;
}
if (!planets)
{
if (!planets) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No planets were found in the database!");
wmud_world_free_planes(planes);
wmud_world_free_directions(directions);
@ -771,9 +756,10 @@ wmud_world_load(GError **err)
return FALSE;
}
g_clear_error(&in_err);
if (!wmud_world_check_planets(planets, &in_err))
{
if (!wmud_world_check_planets(planets, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Planet list pre-flight check error: %s", in_err->message);
wmud_world_free_planets(planets);
wmud_world_free_planes(planes);
@ -785,8 +771,8 @@ wmud_world_load(GError **err)
/* Load areas from the database and check them */
g_clear_error(&in_err);
if (!wmud_db_load_areas(&areas, &in_err))
{
if (!wmud_db_load_areas(&areas, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Could not load areas from database: %s", in_err->message);
wmud_world_free_areas(areas);
wmud_world_free_planets(planets);
@ -796,8 +782,8 @@ wmud_world_load(GError **err)
return FALSE;
}
if (!areas)
{
if (!areas) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No areas were found in the database!");
wmud_world_free_planets(planets);
wmud_world_free_planes(planes);
@ -806,9 +792,10 @@ wmud_world_load(GError **err)
return FALSE;
}
g_clear_error(&in_err);
if (!wmud_world_check_areas(areas, &in_err))
{
if (!wmud_world_check_areas(areas, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Area list pre-flight check error: %s", in_err->message);
wmud_world_free_areas(areas);
wmud_world_free_planets(planets);
@ -821,8 +808,8 @@ wmud_world_load(GError **err)
/* Load rooms from the database and check them */
g_clear_error(&in_err);
if (!wmud_db_load_rooms(&rooms, &in_err))
{
if (!wmud_db_load_rooms(&rooms, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Could not load areas from database: %s", in_err->message);
wmud_world_free_rooms(rooms);
wmud_world_free_areas(areas);
@ -833,8 +820,8 @@ wmud_world_load(GError **err)
return FALSE;
}
if (!rooms)
{
if (!rooms) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No rooms were found in the database!");
wmud_world_free_areas(areas);
wmud_world_free_planets(planets);
@ -844,9 +831,10 @@ wmud_world_load(GError **err)
return FALSE;
}
g_clear_error(&in_err);
if (!wmud_world_check_rooms(rooms, &in_err))
{
if (!wmud_world_check_rooms(rooms, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Room list pre-flight check error: %s", in_err->message);
wmud_world_free_rooms(rooms);
wmud_world_free_areas(areas);
@ -860,8 +848,8 @@ wmud_world_load(GError **err)
/* Load room exits from the database and check them */
g_clear_error(&in_err);
if (!wmud_db_load_exits(&exits, &in_err))
{
if (!wmud_db_load_exits(&exits, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Could not load exits from database: %s", in_err->message);
wmud_world_free_exits(exits);
wmud_world_free_rooms(rooms);
@ -873,8 +861,8 @@ wmud_world_load(GError **err)
return FALSE;
}
if (!exits)
{
if (!exits) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No exits were found in the database!");
wmud_world_free_rooms(rooms);
wmud_world_free_areas(areas);
@ -885,9 +873,10 @@ wmud_world_load(GError **err)
return FALSE;
}
g_clear_error(&in_err);
if (!wmud_world_check_exits(exits, directions, rooms, &in_err))
{
if (!wmud_world_check_exits(exits, directions, rooms, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Exit list pre-flight check error: %s", in_err->message);
wmud_world_free_rooms(rooms);
wmud_world_free_areas(areas);
@ -900,8 +889,7 @@ wmud_world_load(GError **err)
}
/* Load planet-plane associations from the database */
if (!wmud_db_load_planet_planes(&planet_planes, &in_err))
{
if (!wmud_db_load_planet_planes(&planet_planes, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Could not load exits from database: %s", in_err->message);
wmud_world_free_planet_planes(planet_planes);
wmud_world_free_exits(exits);
@ -914,8 +902,8 @@ wmud_world_load(GError **err)
return FALSE;
}
if (!planet_planes)
{
if (!planet_planes) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "No planet-plane associations were found in the database!");
wmud_world_free_exits(exits);
wmud_world_free_rooms(rooms);
@ -927,14 +915,15 @@ wmud_world_load(GError **err)
return FALSE;
}
g_clear_error(&in_err);
/* World loading finished. Now let's tie the parts together... */
/* Put the planets on the planes */
g_clear_error(&in_err);
if (!wmud_world_assoc_planets_planes(planets, planes, planet_planes, &in_err))
{
if (!wmud_world_assoc_planets_planes(planets, planes, planet_planes, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Planets <-> Planes association error: %s", in_err->message);
wmud_world_free_planet_planes(planet_planes);
wmud_world_free_exits(exits);
@ -949,8 +938,7 @@ wmud_world_load(GError **err)
/* Generate the areas */
g_clear_error(&in_err);
if (!wmud_world_assoc_rooms_areas(rooms, areas, &in_err))
{
if (!wmud_world_assoc_rooms_areas(rooms, areas, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Rooms <-> Areas association error: %s", in_err->message);
wmud_world_free_planet_planes(planet_planes);
wmud_world_free_exits(exits);
@ -965,8 +953,8 @@ wmud_world_load(GError **err)
/* Teleport the previously built areas to the planets */
g_clear_error(&in_err);
if (!wmud_world_assoc_rooms_planets(rooms, planets, &in_err))
{
if (!wmud_world_assoc_rooms_planets(rooms, planets, &in_err)) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "Rooms <-> Planets association error: %s", in_err->message);
wmud_world_free_planet_planes(planet_planes);
wmud_world_free_exits(exits);
@ -992,4 +980,3 @@ wmud_world_load(GError **err)
return TRUE;
}