summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-09-01 08:47:55 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-09-01 08:47:55 +0300
commit6749d39a954c84bc4610acf6e5337c484afcde9a (patch)
tree0b5dd374810ca9d9ffbd1efc3aeda19ceb02f349 /client
parentc02d61bc11ee06b6043e6db9a15d00b9f40bce1f (diff)
parent1b41a54fc98dab0e05523c36b53bd62d7e7f28b4 (diff)
downloadmariadb-git-6749d39a954c84bc4610acf6e5337c484afcde9a.tar.gz
Merge 10.2 into bb-10.2-ext
Diffstat (limited to 'client')
-rw-r--r--client/mysqltest.cc32
1 files changed, 26 insertions, 6 deletions
diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index b036ff5645c..006136eb64e 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -574,15 +574,17 @@ struct st_replace *glob_replace= 0;
void replace_strings_append(struct st_replace *rep, DYNAMIC_STRING* ds,
const char *from, int len);
-static void cleanup_and_exit(int exit_code) __attribute__((noreturn));
+ATTRIBUTE_NORETURN
+static void cleanup_and_exit(int exit_code);
-void really_die(const char *msg) __attribute__((noreturn));
+ATTRIBUTE_NORETURN
+void really_die(const char *msg);
void report_or_die(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
-void die(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2)
- __attribute__((noreturn));
+ATTRIBUTE_NORETURN ATTRIBUTE_FORMAT(printf, 1, 2)
+void die(const char *fmt, ...);
static void make_error_message(char *buf, size_t len, const char *fmt, va_list args);
-void abort_not_supported_test(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2)
- __attribute__((noreturn));
+ATTRIBUTE_NORETURN ATTRIBUTE_FORMAT(printf, 1, 2)
+void abort_not_supported_test(const char *fmt, ...);
void verbose_msg(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
void log_msg(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
@@ -4022,7 +4024,25 @@ static int rmtree(const char *dir)
strxnmov(path, sizeof(path), dir, sep, file->name, NULL);
if (!MY_S_ISDIR(file->mystat->st_mode))
+ {
err= my_delete(path, 0);
+#ifdef _WIN32
+ /*
+ On Windows, check and possible reset readonly attribute.
+ my_delete(), or DeleteFile does not remove theses files.
+ */
+ if (err)
+ {
+ DWORD attr= GetFileAttributes(path);
+ if (attr != INVALID_FILE_ATTRIBUTES &&
+ (attr & FILE_ATTRIBUTE_READONLY))
+ {
+ SetFileAttributes(path, attr &~ FILE_ATTRIBUTE_READONLY);
+ err= my_delete(path, 0);
+ }
+ }
+#endif
+ }
else
err= rmtree(path);