From: Date: July 3 2009 4:31pm Subject: bzr commit into mysql-5.1-telco-7.0 branch (jack:2941) Bug#45402 List-Archive: http://lists.mysql.com/commits/77911 X-Bug: 45402 Message-Id: <0KM700FDHN0G9200@mail-apac.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_TQCjENT86DbQ9aP4YtecnQ)" --Boundary_(ID_TQCjENT86DbQ9aP4YtecnQ) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///C:/w/repo/mysql-5.1-telco-7.0-bug45402/ based on revid:jack@stripped 2941 jack andrews 2009-07-03 Bug #45402 Win32AsyncFile::rmrfReq can run an infinite loop - added more functions to handle rmrf logic in AsyncFile. - removed rmrf from Posix and Win32 AsyncFile - integrated with AsyncFile.hpp modified: storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.cpp storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.hpp storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.hpp === modified file 'storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp' --- a/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp 2009-07-02 18:39:07 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp 2009-07-03 14:29:27 +0000 @@ -23,6 +23,8 @@ #include "AsyncIoThread.hpp" #include "Filename.hpp" #include +#include +#include class AsyncFile { @@ -70,7 +72,7 @@ private: virtual void syncReq(Request *request)=0; virtual void removeReq(Request *request)=0; virtual void appendReq(Request *request)=0; - virtual void rmrfReq(Request *request, const char * path, bool removePath)=0; + virtual void rmrfReq(Request *request, const char * path, bool removePath); virtual void createDirectories()=0; /** @@ -111,6 +113,31 @@ public: SimulatedBlock& m_fs; }; +inline +void +AsyncFile::rmrfReq(Request *request, const char * path, bool removePath) +{ + if (!request->par.rmrf.directory) + { + // Remove file + struct stat statbuf; + if (stat(path,&statbuf)==-1 && errno==ENOENT) + return; + if(ndb_remove_entry(path)) + request->error = errno; + return; + } + if (removePath) + { + if(ndb_remove_dir_recursive(path)) + request->error = errno; + } + else + if (ndb_remove_dir_contents(path)) + request->error = errno; + return; +} + inline void AsyncFile::set_buffer(Ptr ptr, Uint32 cnt) === modified file 'storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.cpp' --- a/storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.cpp 2009-05-27 15:21:45 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.cpp 2009-07-03 14:29:27 +0000 @@ -764,64 +764,6 @@ void PosixAsyncFile::removeReq(Request * } } -void -PosixAsyncFile::rmrfReq(Request *request, const char * src, bool removePath) -{ - if(!request->par.rmrf.directory) - { - // Remove file - if(unlink(src) != 0 && errno != ENOENT) - request->error = errno; - return; - } - - char path[PATH_MAX]; - strcpy(path, src); - strcat(path, "/"); - - DIR* dirp; - struct dirent * dp; -loop: - dirp = opendir(path); - if(dirp == 0) - { - if(errno != ENOENT) - request->error = errno; - return; - } - - while ((dp = readdir(dirp)) != NULL) - { - if ((strcmp(".", dp->d_name) != 0) && (strcmp("..", dp->d_name) != 0)) - { - int len = strlen(path); - strcat(path, dp->d_name); - if (remove(path) == 0) - { - path[len] = 0; - continue; - } - - closedir(dirp); - strcat(path, "/"); - goto loop; - } - } - closedir(dirp); - path[strlen(path)-1] = 0; // remove / - if (strcmp(src, path) != 0) - { - char * t = strrchr(path, '/'); - t[1] = 0; - goto loop; - } - - if(removePath && rmdir(src) != 0) - { - request->error = errno; - } -} - PosixAsyncFile::~PosixAsyncFile() { if (azfBufferUnaligned) === modified file 'storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.hpp' --- a/storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.hpp 2009-05-27 15:21:45 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.hpp 2009-07-03 14:29:27 +0000 @@ -55,7 +55,6 @@ public: virtual void syncReq(Request *request); virtual void removeReq(Request *request); virtual void appendReq(Request *request); - virtual void rmrfReq(Request *request, const char * path, bool removePath); virtual int readBuffer(Request*, char * buf, size_t size, off_t offset); virtual int writeBuffer(const char * buf, size_t size, off_t offset); === modified file 'storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp' --- a/storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp 2009-07-02 18:39:07 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp 2009-07-03 14:29:27 +0000 @@ -366,26 +366,6 @@ Win32AsyncFile::removeReq(Request * requ } } -void -Win32AsyncFile::rmrfReq(Request * request, const char * src, bool removePath){ - if (!request->par.rmrf.directory) - { - // Remove file - if (!DeleteFile(src)) - { - DWORD dwError = GetLastError(); - if (dwError != ERROR_FILE_NOT_FOUND) - request->error = dwError; - } - return; - } - - - int err = ndb_remove_dir_recursive(src); - if (err != DirIterator::NOTADIR) - request->error = err; -} - void Win32AsyncFile::createDirectories() { char* tmp; === modified file 'storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.hpp' --- a/storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.hpp 2009-05-27 15:21:45 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.hpp 2009-07-03 14:29:27 +0000 @@ -42,7 +42,6 @@ public: virtual void syncReq(Request *request); virtual void removeReq(Request *request); virtual void appendReq(Request *request); - virtual void rmrfReq(Request *request, const char * path, bool removePath); virtual int readBuffer(Request*, char * buf, size_t size, off_t offset); virtual int writeBuffer(const char * buf, size_t size, off_t offset); --Boundary_(ID_TQCjENT86DbQ9aP4YtecnQ) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/jack@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/jack@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jack@stripped # target_branch: file:///C:/w/repo/mysql-5.1-telco-7.0-bug45402/ # testament_sha1: 40e4f242400a28714cfe57e266917a8b89be71ee # timestamp: 2009-07-03 16:31:19 +0200 # base_revision_id: jack@stripped # # Begin bundle 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 --Boundary_(ID_TQCjENT86DbQ9aP4YtecnQ)--