static int create_mount_target(const char *dest, mode_t st_mode)
{
char *dirdup, *destdirname;
+ struct stat sb;
int ret;
dirdup = strdup(dest);
}
free(dirdup);
- (void)remove(dest);
+ if (stat(dest, &sb) == 0) {
+ if (S_ISDIR(st_mode) && S_ISDIR(sb.st_mode))
+ return 0;
+
+ if (S_ISREG(st_mode) && S_ISREG(sb.st_mode))
+ return 0;
+
+ if (remove(dest) < 0) {
+ SYSERROR("Failed to remove existing mount target \"%s\"", dest);
+ return -1;
+ }
+ } else if (errno != ENOENT) {
+ SYSERROR("Failed to stat existing mount target \"%s\"", dest);
+ return -1;
+ }
if (S_ISDIR(st_mode))
ret = mkdir(dest, 0000);