From 166e0683c0d45a79716d8913ec9ecaf3177343fa Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Sat, 7 Nov 2009 12:34:19 +0200 Subject: Added error handling for my_seek() & my_tell() failures mysys/my_seek.c: Give error if MY_WME is used sql/sql_insert.cc: Fixed compiler warning storage/maria/ha_maria.cc: Changed driver of Maria storage engine project --- include/mysys_err.h | 5 +++-- mysys/errors.c | 2 ++ mysys/my_seek.c | 16 +++++++++++----- sql/sql_insert.cc | 2 ++ storage/maria/ha_maria.cc | 2 +- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/mysys_err.h b/include/mysys_err.h index 754ae5d12ec..defdaa71fa3 100644 --- a/include/mysys_err.h +++ b/include/mysys_err.h @@ -63,8 +63,9 @@ extern const char * NEAR globerrs[]; /* my_error_messages is here */ #define EE_FILENOTFOUND 29 #define EE_FILE_NOT_CLOSED 30 #define EE_CANT_CHMOD 31 -#define EE_CANT_COPY_OWNERSHIP 32 -#define EE_ERROR_LAST 32 /* Copy last error nr */ +#define EE_CANT_SEEK 32 +#define EE_CANT_COPY_OWNERSHIP 33 +#define EE_ERROR_LAST 33 /* Copy last error nr */ /* Add error numbers before EE_ERROR_LAST and change it accordingly. */ /* exit codes for all MySQL programs */ diff --git a/mysys/errors.c b/mysys/errors.c index 7c80fc0f89f..fc63ac9d936 100644 --- a/mysys/errors.c +++ b/mysys/errors.c @@ -51,6 +51,7 @@ const char * NEAR globerrs[GLOBERRS]= "File '%s' not found (Errcode: %d)", "File '%s' (fileno: %d) was not closed", "Can't change mode for file '%s' to 0x%lx (Error: %d)", + "Can't do seek on file '%s' (Errcode: %d)", "Warning: Can't copy ownership for file '%s' (Error: %d)" }; @@ -93,6 +94,7 @@ void init_glob_errs() EE(EE_FILENOTFOUND) = "File '%s' not found (Errcode: %d)"; EE(EE_FILE_NOT_CLOSED) = "File '%s' (fileno: %d) was not closed"; EE(EE_CANT_CHMOD) = "Can't change mode for file '%s' to 0x%lx (Error: %d)"; + EE(EE_CANT_SEEK) = "Can't do seek on file '%s' (Errcode: %d)"; EE(EE_CANT_COPY_OWNERSHIP)= "Warning: Can't copy ownership for file '%s' (Error: %d)"; } #endif diff --git a/mysys/my_seek.c b/mysys/my_seek.c index 4e18b510a1e..4ca5393e640 100644 --- a/mysys/my_seek.c +++ b/mysys/my_seek.c @@ -14,6 +14,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "mysys_priv.h" +#include "mysys_err.h" /* Seek to a position in a file. @@ -42,8 +43,7 @@ actual error. */ -my_off_t my_seek(File fd, my_off_t pos, int whence, - myf MyFlags __attribute__((unused))) +my_off_t my_seek(File fd, my_off_t pos, int whence, myf MyFlags) { reg1 os_off_t newpos= -1; DBUG_ENTER("my_seek"); @@ -68,7 +68,9 @@ my_off_t my_seek(File fd, my_off_t pos, int whence, newpos= lseek(fd, pos, whence); if (newpos == (os_off_t) -1) { - my_errno=errno; + my_errno= errno; + if (MyFlags & MY_WME) + my_error(EE_CANT_SEEK, MYF(0), my_filename(fd), my_errno); DBUG_PRINT("error",("lseek: %lu errno: %d", (ulong) newpos,errno)); DBUG_RETURN(MY_FILEPOS_ERROR); } @@ -83,7 +85,7 @@ my_off_t my_seek(File fd, my_off_t pos, int whence, /* Tell current position of file */ /* ARGSUSED */ -my_off_t my_tell(File fd, myf MyFlags __attribute__((unused))) +my_off_t my_tell(File fd, myf MyFlags) { os_off_t pos; DBUG_ENTER("my_tell"); @@ -95,7 +97,11 @@ my_off_t my_tell(File fd, myf MyFlags __attribute__((unused))) pos=lseek(fd, 0L, MY_SEEK_CUR); #endif if (pos == (os_off_t) -1) - my_errno=errno; + { + my_errno= errno; + if (MyFlags & MY_WME) + my_error(EE_CANT_SEEK, MYF(0), my_filename(fd), my_errno); + } DBUG_PRINT("exit",("pos: %lu", (ulong) pos)); DBUG_RETURN((my_off_t) pos); } /* my_tell */ diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 85b77bbb326..0cd67a16a25 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -3437,10 +3437,12 @@ static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, Create_field *cr_field; Field *field, *def_field; if (item->type() == Item::FUNC_ITEM) + { if (item->result_type() != STRING_RESULT) field= item->tmp_table_field(&tmp_table); else field= item->tmp_table_field_from_field_type(&tmp_table, 0); + } else field= create_tmp_field(thd, &tmp_table, item, item->type(), (Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0, diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 1b583353126..8719cbd114d 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -3341,7 +3341,7 @@ mysql_declare_plugin(maria) MYSQL_STORAGE_ENGINE_PLUGIN, &maria_storage_engine, "MARIA", - "MySQL AB", + "Monty Program Ab", "Crash-safe tables with MyISAM heritage", PLUGIN_LICENSE_GPL, ha_maria_init, /* Plugin Init */ -- cgit v1.2.1