Commit fe05c16c authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

MDEV-23052 mysql_install_db.exe can run on existing non-empty directory,

and remove it on error

Disable existing non-empty datadir for mysql_install_db.exe
parent 1ea266f3
...@@ -399,8 +399,8 @@ static int register_service() ...@@ -399,8 +399,8 @@ static int register_service()
static void clean_directory(const char *dir) static void clean_directory(const char *dir)
{ {
char dir2[MAX_PATH+2]; char dir2[MAX_PATH + 4]= {};
*(strmake_buf(dir2, dir)+1)= 0; snprintf(dir2, MAX_PATH+2, "%s\\*", dir);
SHFILEOPSTRUCT fileop; SHFILEOPSTRUCT fileop;
fileop.hwnd= NULL; /* no status display */ fileop.hwnd= NULL; /* no status display */
...@@ -551,7 +551,7 @@ static int create_db_instance() ...@@ -551,7 +551,7 @@ static int create_db_instance()
DWORD cwd_len= MAX_PATH; DWORD cwd_len= MAX_PATH;
char cmdline[3*MAX_PATH]; char cmdline[3*MAX_PATH];
FILE *in; FILE *in;
bool cleanup_datadir= true; bool created_datadir= false;
DWORD last_error; DWORD last_error;
verbose("Running bootstrap"); verbose("Running bootstrap");
...@@ -560,7 +560,11 @@ static int create_db_instance() ...@@ -560,7 +560,11 @@ static int create_db_instance()
/* Create datadir and datadir/mysql, if they do not already exist. */ /* Create datadir and datadir/mysql, if they do not already exist. */
if (!CreateDirectory(opt_datadir, NULL) && (GetLastError() != ERROR_ALREADY_EXISTS)) if (CreateDirectory(opt_datadir, NULL))
{
created_datadir= true;
}
else if (GetLastError() != ERROR_ALREADY_EXISTS)
{ {
last_error = GetLastError(); last_error = GetLastError();
switch(last_error) switch(last_error)
...@@ -597,9 +601,11 @@ static int create_db_instance() ...@@ -597,9 +601,11 @@ static int create_db_instance()
} }
} }
if (PathIsDirectoryEmpty(opt_datadir)) if (!PathIsDirectoryEmpty(opt_datadir))
{ {
cleanup_datadir= false; fprintf(stderr,"ERROR : Data directory %s is not empty."
" Only new or empty existing directories are accepted for --datadir\n",opt_datadir);
exit(1);
} }
if (!CreateDirectory("mysql",NULL)) if (!CreateDirectory("mysql",NULL))
...@@ -735,10 +741,12 @@ static int create_db_instance() ...@@ -735,10 +741,12 @@ static int create_db_instance()
} }
end: end:
if (ret && cleanup_datadir) if (ret)
{ {
SetCurrentDirectory(cwd); SetCurrentDirectory(cwd);
clean_directory(opt_datadir); clean_directory(opt_datadir);
if (created_datadir)
RemoveDirectory(opt_datadir);
} }
return ret; return ret;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment