diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test index 2a6eb46627c..4e8a46bd2e2 100644 --- a/mysql-test/t/mysql.test +++ b/mysql-test/t/mysql.test @@ -251,16 +251,22 @@ drop table t17583; # # This should work just fine... ---exec echo "DELIMITER /" > $MYSQLTEST_VARDIR/tmp/bug21412.sql ---exec echo "SELECT 1/" >> $MYSQLTEST_VARDIR/tmp/bug21412.sql +--write_file $MYSQLTEST_VARDIR/tmp/bug21412.sql +DELIMITER / +SELECT 1/ +EOF --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1 # This should give an error... ---exec echo "DELIMITER \\" > $MYSQLTEST_VARDIR/tmp/bug21412.sql +--write_file $MYSQLTEST_VARDIR/tmp/bug21412.sql +DELIMITER \ +EOF --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1 # As should this... ---exec echo "DELIMITER \\\\" > $MYSQLTEST_VARDIR/tmp/bug21412.sql +--write_file $MYSQLTEST_VARDIR/tmp/bug21412.sql +DELIMITER \\ +EOF --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1 # diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index e40490776f8..d2ace12da4d 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -170,24 +170,28 @@ int init_io_cache(IO_CACHE *info, File file, uint cachesize, info->arg = 0; info->alloced_buffer = 0; info->buffer=0; + info->seek_not_done= 0; - pos= my_tell(file, MYF(0)); - if ((pos == (my_off_t) -1) && (my_errno == ESPIPE)) + if (file >= 0) { - /* - This kind of object doesn't support seek() or tell(). Don't set a flag - that will make us again try to seek() later and fail. - */ - info->seek_not_done= 0; - /* - Additionally, if we're supposed to start somewhere other than the - the beginning of whatever this file is, then somebody made a bad - assumption. - */ - DBUG_ASSERT(seek_offset == 0); + pos= my_tell(file, MYF(0)); + if ((pos == (my_off_t) -1) && (my_errno == ESPIPE)) + { + /* + This kind of object doesn't support seek() or tell(). Don't set a + flag that will make us again try to seek() later and fail. + */ + info->seek_not_done= 0; + /* + Additionally, if we're supposed to start somewhere other than the + the beginning of whatever this file is, then somebody made a bad + assumption. + */ + DBUG_ASSERT(seek_offset == 0); + } + else + info->seek_not_done= test(seek_offset != pos); } - else - info->seek_not_done= test(file >= 0 && seek_offset != pos); info->disk_writes= 0; #ifdef THREAD