Fix for bug#48451: my_seek and my_tell ignore MY_WME flag
my_seek() and my_tell() functions now honour MY_WME flag.
This commit is contained in:
parent
a9d18aaf3e
commit
cc1288349f
@ -64,7 +64,8 @@ extern const char * NEAR globerrs[]; /* my_error_messages is here */
|
||||
#define EE_FILE_NOT_CLOSED 30
|
||||
#define EE_CHANGE_OWNERSHIP 31
|
||||
#define EE_CHANGE_PERMISSIONS 32
|
||||
#define EE_ERROR_LAST 32 /* Copy last error nr */
|
||||
#define EE_CANT_SEEK 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 */
|
||||
|
@ -52,6 +52,7 @@ const char * NEAR globerrs[GLOBERRS]=
|
||||
"File '%s' (fileno: %d) was not closed",
|
||||
"Can't change ownership of the file '%s' (Errcode: %d)",
|
||||
"Can't change permissions of the file '%s' (Errcode: %d)",
|
||||
"Can't seek in file '%s' (Errcode: %d)"
|
||||
};
|
||||
|
||||
void init_glob_errs(void)
|
||||
@ -94,6 +95,7 @@ void init_glob_errs()
|
||||
EE(EE_FILE_NOT_CLOSED) = "File '%s' (fileno: %d) was not closed";
|
||||
EE(EE_CHANGE_OWNERSHIP) = "Can't change ownership of the file '%s' (Errcode: %d)";
|
||||
EE(EE_CHANGE_PERMISSIONS) = "Can't change permissions of the file '%s' (Errcode: %d)";
|
||||
EE(EE_CANT_SEEK) = "Can't seek in file '%s' (Errcode: %d)";
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -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");
|
||||
@ -69,6 +69,8 @@ my_off_t my_seek(File fd, my_off_t pos, int whence,
|
||||
if (newpos == (os_off_t) -1)
|
||||
{
|
||||
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,12 @@ 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;
|
||||
if (MyFlags & MY_WME)
|
||||
my_error(EE_CANT_SEEK, MYF(0), my_filename(fd), my_errno);
|
||||
DBUG_PRINT("error", ("tell: %lu errno: %d", (ulong) pos, my_errno));
|
||||
}
|
||||
DBUG_PRINT("exit",("pos: %lu", (ulong) pos));
|
||||
DBUG_RETURN((my_off_t) pos);
|
||||
} /* my_tell */
|
||||
|
@ -118,8 +118,7 @@ int my_is_symlink(const char *filename __attribute__((unused)))
|
||||
'to' may be equal to 'filename'
|
||||
*/
|
||||
|
||||
int my_realpath(char *to, const char *filename,
|
||||
myf MyFlags __attribute__((unused)))
|
||||
int my_realpath(char *to, const char *filename, myf MyFlags)
|
||||
{
|
||||
#if defined(HAVE_REALPATH) && !defined(HAVE_BROKEN_REALPATH)
|
||||
int result=0;
|
||||
|
@ -590,7 +590,11 @@ int ha_myisam::net_read_dump(NET* net)
|
||||
int data_fd = file->dfile;
|
||||
int error = 0;
|
||||
|
||||
my_seek(data_fd, 0L, MY_SEEK_SET, MYF(MY_WME));
|
||||
if (my_seek(data_fd, 0L, MY_SEEK_SET, MYF(MY_WME)) == MY_FILEPOS_ERROR)
|
||||
{
|
||||
error= my_errno;
|
||||
goto err;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
ulong packet_len = my_net_read(net);
|
||||
@ -626,7 +630,11 @@ int ha_myisam::dump(THD* thd, int fd)
|
||||
return ENOMEM;
|
||||
|
||||
int error = 0;
|
||||
my_seek(data_fd, 0L, MY_SEEK_SET, MYF(MY_WME));
|
||||
if (my_seek(data_fd, 0L, MY_SEEK_SET, MYF(MY_WME)) == MY_FILEPOS_ERROR)
|
||||
{
|
||||
error= my_errno;
|
||||
goto err;
|
||||
}
|
||||
for (; bytes_to_read > 0;)
|
||||
{
|
||||
size_t bytes = my_read(data_fd, buf, blocksize, MYF(MY_WME));
|
||||
|
Loading…
x
Reference in New Issue
Block a user