diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 8de95ff3ca..2f31235b04 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,9 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2007/09/24 + * Limited manual detection of data truncation to string/enum/blob columns. + * Renamed conf-tmpl to conf. [FlavioJS] 2007/09/23 * Added flag svn:executable to the configure script. * Added code for MySQL versions (below 5.0) that don't have diff --git a/Makefile.in b/Makefile.in index c2c5efc2d5..61a4a5e2f7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -2,15 +2,15 @@ HAVE_MYSQL=@HAVE_MYSQL@ ifeq ($(HAVE_MYSQL),yes) - ALL_DEPENDS=common common_sql login login_sql char char_sql map map_sql ladmin tools converters plugins conf - SQL_DEPENDS=common_sql login_sql char_sql map_sql conf + ALL_DEPENDS=common common_sql login login_sql char char_sql map map_sql ladmin tools converters plugins save + SQL_DEPENDS=common_sql login_sql char_sql map_sql COMMON_SQL_DEPENDS= LOGIN_SQL_DEPENDS=common_sql CHAR_SQL_DEPENDS=common_sql MAP_SQL_DEPENDS=common_sql CONVERTERS_DEPENDS=common_sql else - ALL_DEPENDS=common login char map ladmin tools plugins conf + ALL_DEPENDS=common login char map ladmin tools plugins save SQL_DEPENDS=needs_mysql COMMON_SQL_DEPENDS=needs_mysql LOGIN_SQL_DEPENDS=needs_mysql @@ -21,7 +21,7 @@ endif ##################################################################### .PHONY: txt sql common common_sql login login_sql char char_sql map map_sql \ - ladmin tools converters plugins addons conf clean help depend + ladmin tools converters plugins addons save clean help depend all: $(ALL_DEPENDS) @@ -65,19 +65,7 @@ converters: $(CONVERTERS_DEPENDS) plugins addons: common @$(MAKE) -C src/plugins -conf: -# conf: -# 1) create conf and conf/import folders -# 2) add missing import files -# 3) copy the rest of the files and folders -# 4) remove remaining .svn folders - @echo "building conf folder..." - @if test ! -d conf ; then mkdir conf ; fi - @if test ! -d conf/import ; then mkdir conf/import ; fi - @for f in $$(ls conf-tmpl/import) ; do if test ! -e conf/import/$$f ; then cp conf-tmpl/import/$$f conf/import ; fi ; done - @for f in $$(ls conf-tmpl) ; do if test "$$f" != "import" ; then cp -rf conf-tmpl/$$f conf ; fi ; done - @rm -rf conf/*/.svn -# save: +save: # 1) create save folder # 2) add missing files # 3) remove remaining .svn folder @@ -114,12 +102,12 @@ help: @echo "'converters' - builds the login/char converters" @echo "'plugins' - builds all the plugins in src/plugins" @echo "'addons'" - @echo "'conf' - builds conf and save folders from the templates" + @echo "'save' - builds save folder from the template" @echo "'all' - builds all above targets" @echo "'txt' - builds txt servers (targets 'common' 'login' 'char' 'map' and" - @echo " 'conf')" + @echo " 'save')" @echo "'sql' - builds sql servers (targets 'common_sql' 'login_sql' 'char_sql'" - @echo " 'map_sql' and 'conf')" + @echo " and 'map_sql')" @echo "'clean' - cleans builds and objects" @echo "'help' - outputs this message" diff --git a/conf-tmpl/Changelog.txt b/conf/Changelog.txt similarity index 100% rename from conf-tmpl/Changelog.txt rename to conf/Changelog.txt diff --git a/conf-tmpl/GM_account.txt b/conf/GM_account.txt similarity index 100% rename from conf-tmpl/GM_account.txt rename to conf/GM_account.txt diff --git a/conf-tmpl/atcommand_athena.conf b/conf/atcommand_athena.conf similarity index 100% rename from conf-tmpl/atcommand_athena.conf rename to conf/atcommand_athena.conf diff --git a/conf-tmpl/battle/battle.conf b/conf/battle/battle.conf similarity index 100% rename from conf-tmpl/battle/battle.conf rename to conf/battle/battle.conf diff --git a/conf-tmpl/battle/client.conf b/conf/battle/client.conf similarity index 100% rename from conf-tmpl/battle/client.conf rename to conf/battle/client.conf diff --git a/conf-tmpl/battle/drops.conf b/conf/battle/drops.conf similarity index 100% rename from conf-tmpl/battle/drops.conf rename to conf/battle/drops.conf diff --git a/conf-tmpl/battle/exp.conf b/conf/battle/exp.conf similarity index 100% rename from conf-tmpl/battle/exp.conf rename to conf/battle/exp.conf diff --git a/conf-tmpl/battle/gm.conf b/conf/battle/gm.conf similarity index 100% rename from conf-tmpl/battle/gm.conf rename to conf/battle/gm.conf diff --git a/conf-tmpl/battle/guild.conf b/conf/battle/guild.conf similarity index 100% rename from conf-tmpl/battle/guild.conf rename to conf/battle/guild.conf diff --git a/conf-tmpl/battle/homunc.conf b/conf/battle/homunc.conf similarity index 100% rename from conf-tmpl/battle/homunc.conf rename to conf/battle/homunc.conf diff --git a/conf-tmpl/battle/items.conf b/conf/battle/items.conf similarity index 100% rename from conf-tmpl/battle/items.conf rename to conf/battle/items.conf diff --git a/conf-tmpl/battle/misc.conf b/conf/battle/misc.conf similarity index 100% rename from conf-tmpl/battle/misc.conf rename to conf/battle/misc.conf diff --git a/conf-tmpl/battle/monster.conf b/conf/battle/monster.conf similarity index 100% rename from conf-tmpl/battle/monster.conf rename to conf/battle/monster.conf diff --git a/conf-tmpl/battle/party.conf b/conf/battle/party.conf similarity index 100% rename from conf-tmpl/battle/party.conf rename to conf/battle/party.conf diff --git a/conf-tmpl/battle/pet.conf b/conf/battle/pet.conf similarity index 100% rename from conf-tmpl/battle/pet.conf rename to conf/battle/pet.conf diff --git a/conf-tmpl/battle/player.conf b/conf/battle/player.conf similarity index 100% rename from conf-tmpl/battle/player.conf rename to conf/battle/player.conf diff --git a/conf-tmpl/battle/skill.conf b/conf/battle/skill.conf similarity index 100% rename from conf-tmpl/battle/skill.conf rename to conf/battle/skill.conf diff --git a/conf-tmpl/battle/status.conf b/conf/battle/status.conf similarity index 100% rename from conf-tmpl/battle/status.conf rename to conf/battle/status.conf diff --git a/conf-tmpl/battle_athena.conf b/conf/battle_athena.conf similarity index 100% rename from conf-tmpl/battle_athena.conf rename to conf/battle_athena.conf diff --git a/conf-tmpl/char_athena.conf b/conf/char_athena.conf similarity index 100% rename from conf-tmpl/char_athena.conf rename to conf/char_athena.conf diff --git a/conf-tmpl/charcommand_athena.conf b/conf/charcommand_athena.conf similarity index 100% rename from conf-tmpl/charcommand_athena.conf rename to conf/charcommand_athena.conf diff --git a/conf-tmpl/charhelp.txt b/conf/charhelp.txt similarity index 100% rename from conf-tmpl/charhelp.txt rename to conf/charhelp.txt diff --git a/conf-tmpl/grf-files.txt b/conf/grf-files.txt similarity index 100% rename from conf-tmpl/grf-files.txt rename to conf/grf-files.txt diff --git a/conf-tmpl/help.txt b/conf/help.txt similarity index 100% rename from conf-tmpl/help.txt rename to conf/help.txt diff --git a/conf-tmpl/help2.txt b/conf/help2.txt similarity index 100% rename from conf-tmpl/help2.txt rename to conf/help2.txt diff --git a/conf-tmpl/import/atcommand_conf.txt b/conf/import/atcommand_conf.txt similarity index 100% rename from conf-tmpl/import/atcommand_conf.txt rename to conf/import/atcommand_conf.txt diff --git a/conf-tmpl/import/battle_conf.txt b/conf/import/battle_conf.txt similarity index 100% rename from conf-tmpl/import/battle_conf.txt rename to conf/import/battle_conf.txt diff --git a/conf-tmpl/import/char_conf.txt b/conf/import/char_conf.txt similarity index 100% rename from conf-tmpl/import/char_conf.txt rename to conf/import/char_conf.txt diff --git a/conf-tmpl/import/charcommand_conf.txt b/conf/import/charcommand_conf.txt similarity index 100% rename from conf-tmpl/import/charcommand_conf.txt rename to conf/import/charcommand_conf.txt diff --git a/conf-tmpl/import/inter_conf.txt b/conf/import/inter_conf.txt similarity index 100% rename from conf-tmpl/import/inter_conf.txt rename to conf/import/inter_conf.txt diff --git a/conf-tmpl/import/ladmin_conf.txt b/conf/import/ladmin_conf.txt similarity index 100% rename from conf-tmpl/import/ladmin_conf.txt rename to conf/import/ladmin_conf.txt diff --git a/conf-tmpl/import/log_conf.txt b/conf/import/log_conf.txt similarity index 100% rename from conf-tmpl/import/log_conf.txt rename to conf/import/log_conf.txt diff --git a/conf-tmpl/import/login_conf.txt b/conf/import/login_conf.txt similarity index 100% rename from conf-tmpl/import/login_conf.txt rename to conf/import/login_conf.txt diff --git a/conf-tmpl/import/map_conf.txt b/conf/import/map_conf.txt similarity index 100% rename from conf-tmpl/import/map_conf.txt rename to conf/import/map_conf.txt diff --git a/conf-tmpl/import/msg_conf.txt b/conf/import/msg_conf.txt similarity index 100% rename from conf-tmpl/import/msg_conf.txt rename to conf/import/msg_conf.txt diff --git a/conf-tmpl/import/packet_conf.txt b/conf/import/packet_conf.txt similarity index 100% rename from conf-tmpl/import/packet_conf.txt rename to conf/import/packet_conf.txt diff --git a/conf-tmpl/import/script_conf.txt b/conf/import/script_conf.txt similarity index 100% rename from conf-tmpl/import/script_conf.txt rename to conf/import/script_conf.txt diff --git a/conf-tmpl/inter_athena.conf b/conf/inter_athena.conf similarity index 100% rename from conf-tmpl/inter_athena.conf rename to conf/inter_athena.conf diff --git a/conf-tmpl/irc_athena.conf b/conf/irc_athena.conf similarity index 100% rename from conf-tmpl/irc_athena.conf rename to conf/irc_athena.conf diff --git a/conf-tmpl/ladmin_athena.conf b/conf/ladmin_athena.conf similarity index 100% rename from conf-tmpl/ladmin_athena.conf rename to conf/ladmin_athena.conf diff --git a/conf-tmpl/log_athena.conf b/conf/log_athena.conf similarity index 100% rename from conf-tmpl/log_athena.conf rename to conf/log_athena.conf diff --git a/conf-tmpl/login_athena.conf b/conf/login_athena.conf similarity index 100% rename from conf-tmpl/login_athena.conf rename to conf/login_athena.conf diff --git a/conf-tmpl/map_athena.conf b/conf/map_athena.conf similarity index 100% rename from conf-tmpl/map_athena.conf rename to conf/map_athena.conf diff --git a/conf-tmpl/mapflag/gvg.txt b/conf/mapflag/gvg.txt similarity index 100% rename from conf-tmpl/mapflag/gvg.txt rename to conf/mapflag/gvg.txt diff --git a/conf-tmpl/mapflag/indoors.txt b/conf/mapflag/indoors.txt similarity index 100% rename from conf-tmpl/mapflag/indoors.txt rename to conf/mapflag/indoors.txt diff --git a/conf-tmpl/mapflag/jail.txt b/conf/mapflag/jail.txt similarity index 100% rename from conf-tmpl/mapflag/jail.txt rename to conf/mapflag/jail.txt diff --git a/conf-tmpl/mapflag/night.txt b/conf/mapflag/night.txt similarity index 100% rename from conf-tmpl/mapflag/night.txt rename to conf/mapflag/night.txt diff --git a/conf-tmpl/mapflag/nightmare.txt b/conf/mapflag/nightmare.txt similarity index 100% rename from conf-tmpl/mapflag/nightmare.txt rename to conf/mapflag/nightmare.txt diff --git a/conf-tmpl/mapflag/nobranch.txt b/conf/mapflag/nobranch.txt similarity index 100% rename from conf-tmpl/mapflag/nobranch.txt rename to conf/mapflag/nobranch.txt diff --git a/conf-tmpl/mapflag/noexp.txt b/conf/mapflag/noexp.txt similarity index 100% rename from conf-tmpl/mapflag/noexp.txt rename to conf/mapflag/noexp.txt diff --git a/conf-tmpl/mapflag/noicewall.txt b/conf/mapflag/noicewall.txt similarity index 100% rename from conf-tmpl/mapflag/noicewall.txt rename to conf/mapflag/noicewall.txt diff --git a/conf-tmpl/mapflag/noloot.txt b/conf/mapflag/noloot.txt similarity index 100% rename from conf-tmpl/mapflag/noloot.txt rename to conf/mapflag/noloot.txt diff --git a/conf-tmpl/mapflag/nomemo.txt b/conf/mapflag/nomemo.txt similarity index 100% rename from conf-tmpl/mapflag/nomemo.txt rename to conf/mapflag/nomemo.txt diff --git a/conf-tmpl/mapflag/nopenalty.txt b/conf/mapflag/nopenalty.txt similarity index 100% rename from conf-tmpl/mapflag/nopenalty.txt rename to conf/mapflag/nopenalty.txt diff --git a/conf-tmpl/mapflag/nopvp.txt b/conf/mapflag/nopvp.txt similarity index 100% rename from conf-tmpl/mapflag/nopvp.txt rename to conf/mapflag/nopvp.txt diff --git a/conf-tmpl/mapflag/noreturn.txt b/conf/mapflag/noreturn.txt similarity index 100% rename from conf-tmpl/mapflag/noreturn.txt rename to conf/mapflag/noreturn.txt diff --git a/conf-tmpl/mapflag/nosave.txt b/conf/mapflag/nosave.txt similarity index 100% rename from conf-tmpl/mapflag/nosave.txt rename to conf/mapflag/nosave.txt diff --git a/conf-tmpl/mapflag/noteleport.txt b/conf/mapflag/noteleport.txt similarity index 100% rename from conf-tmpl/mapflag/noteleport.txt rename to conf/mapflag/noteleport.txt diff --git a/conf-tmpl/mapflag/nowarp.txt b/conf/mapflag/nowarp.txt similarity index 100% rename from conf-tmpl/mapflag/nowarp.txt rename to conf/mapflag/nowarp.txt diff --git a/conf-tmpl/mapflag/nowarpto.txt b/conf/mapflag/nowarpto.txt similarity index 100% rename from conf-tmpl/mapflag/nowarpto.txt rename to conf/mapflag/nowarpto.txt diff --git a/conf-tmpl/mapflag/pvp.txt b/conf/mapflag/pvp.txt similarity index 100% rename from conf-tmpl/mapflag/pvp.txt rename to conf/mapflag/pvp.txt diff --git a/conf-tmpl/mapflag/pvp_noguild.txt b/conf/mapflag/pvp_noguild.txt similarity index 100% rename from conf-tmpl/mapflag/pvp_noguild.txt rename to conf/mapflag/pvp_noguild.txt diff --git a/conf-tmpl/mapflag/pvp_noparty.txt b/conf/mapflag/pvp_noparty.txt similarity index 100% rename from conf-tmpl/mapflag/pvp_noparty.txt rename to conf/mapflag/pvp_noparty.txt diff --git a/conf-tmpl/mapflag/restricted.txt b/conf/mapflag/restricted.txt similarity index 100% rename from conf-tmpl/mapflag/restricted.txt rename to conf/mapflag/restricted.txt diff --git a/conf-tmpl/maps_athena.conf b/conf/maps_athena.conf similarity index 100% rename from conf-tmpl/maps_athena.conf rename to conf/maps_athena.conf diff --git a/conf-tmpl/motd.txt b/conf/motd.txt similarity index 100% rename from conf-tmpl/motd.txt rename to conf/motd.txt diff --git a/conf-tmpl/msg_athena.conf b/conf/msg_athena.conf similarity index 100% rename from conf-tmpl/msg_athena.conf rename to conf/msg_athena.conf diff --git a/conf-tmpl/packet_athena.conf b/conf/packet_athena.conf similarity index 100% rename from conf-tmpl/packet_athena.conf rename to conf/packet_athena.conf diff --git a/conf-tmpl/plugin_athena.conf b/conf/plugin_athena.conf similarity index 100% rename from conf-tmpl/plugin_athena.conf rename to conf/plugin_athena.conf diff --git a/conf-tmpl/readme.txt b/conf/readme.txt similarity index 100% rename from conf-tmpl/readme.txt rename to conf/readme.txt diff --git a/conf-tmpl/script_athena.conf b/conf/script_athena.conf similarity index 100% rename from conf-tmpl/script_athena.conf rename to conf/script_athena.conf diff --git a/conf-tmpl/subnet_athena.conf b/conf/subnet_athena.conf similarity index 100% rename from conf-tmpl/subnet_athena.conf rename to conf/subnet_athena.conf diff --git a/src/common/sql.c b/src/common/sql.c index 6b69c8ce49..5df7516435 100644 --- a/src/common/sql.c +++ b/src/common/sql.c @@ -394,40 +394,52 @@ static int Sql_P_BindSqlDataType(MYSQL_BIND* bind, enum SqlDataType buffer_type, switch( buffer_type ) { case SQLDT_NULL: bind->buffer_type = MYSQL_TYPE_NULL; + buffer_len = 0;// FIXME length = ? [FlavioJS] break; // fixed size case SQLDT_UINT8: bind->is_unsigned = 1; case SQLDT_INT8: bind->buffer_type = MYSQL_TYPE_TINY; + buffer_len = 1; break; case SQLDT_UINT16: bind->is_unsigned = 1; case SQLDT_INT16: bind->buffer_type = MYSQL_TYPE_SHORT; + buffer_len = 2; break; case SQLDT_UINT32: bind->is_unsigned = 1; case SQLDT_INT32: bind->buffer_type = MYSQL_TYPE_LONG; + buffer_len = 4; break; case SQLDT_UINT64: bind->is_unsigned = 1; case SQLDT_INT64: bind->buffer_type = MYSQL_TYPE_LONGLONG; + buffer_len = 8; break; // platform dependent size case SQLDT_UCHAR: bind->is_unsigned = 1; case SQLDT_CHAR: bind->buffer_type = Sql_P_SizeToMysqlIntType(sizeof(char)); + buffer_len = sizeof(char); break; case SQLDT_USHORT: bind->is_unsigned = 1; case SQLDT_SHORT: bind->buffer_type = Sql_P_SizeToMysqlIntType(sizeof(short)); + buffer_len = sizeof(short); break; case SQLDT_UINT: bind->is_unsigned = 1; case SQLDT_INT: bind->buffer_type = Sql_P_SizeToMysqlIntType(sizeof(int)); + buffer_len = sizeof(int); break; case SQLDT_ULONG: bind->is_unsigned = 1; case SQLDT_LONG: bind->buffer_type = Sql_P_SizeToMysqlIntType(sizeof(long)); + buffer_len = sizeof(long); break; case SQLDT_ULONGLONG: bind->is_unsigned = 1; case SQLDT_LONGLONG: bind->buffer_type = Sql_P_SizeToMysqlIntType(sizeof(long long)); + buffer_len = sizeof(long long); break; // floating point case SQLDT_FLOAT: bind->buffer_type = MYSQL_TYPE_FLOAT; + buffer_len = 4; break; case SQLDT_DOUBLE: bind->buffer_type = MYSQL_TYPE_DOUBLE; + buffer_len = 8; break; // other case SQLDT_STRING: @@ -806,17 +818,21 @@ int SqlStmt_NextRow(SqlStmt* self) for( i = 0; i < cols; ++i ) { length = self->column_lengths[i].length; + column = &self->columns[i]; #if !defined(MYSQL_DATA_TRUNCATED) // MySQL 4.1/(below?) returns success even if data is truncated, so we test truncation manually [FlavioJS] - if( self->columns[i].buffer_length < length ) + if( column->buffer_length < length ) {// report truncated column - SqlStmt_P_ShowDebugTruncatedColumn(self, i); - return SQL_ERROR; + if( column->buffer_type == MYSQL_TYPE_STRING || column->buffer_type == MYSQL_TYPE_BLOB ) + {// string/enum/blob column + SqlStmt_P_ShowDebugTruncatedColumn(self, i); + return SQL_ERROR; + } + // FIXME numeric types and null [FlavioJS] } #endif if( self->column_lengths[i].out_length ) *self->column_lengths[i].out_length = (uint32)length; - column = &self->columns[i]; if( column->buffer_type == MYSQL_TYPE_STRING ) {// clear unused part of the string/enum buffer (and nul-terminate) memset((char*)column->buffer + length, 0, column->buffer_length - length + 1);