diff options
Diffstat (limited to 'emubd')
-rw-r--r-- | emubd/lfs_emubd.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/emubd/lfs_emubd.c b/emubd/lfs_emubd.c index 98a3af5..97edddb 100644 --- a/emubd/lfs_emubd.c +++ b/emubd/lfs_emubd.c @@ -13,6 +13,7 @@ #include <stdio.h> #include <limits.h> #include <dirent.h> +#include <sys/stat.h> // Block device emulated on existing filesystem @@ -168,11 +169,19 @@ lfs_error_t lfs_emubd_erase(lfs_emubd_t *emu, // Iterate and erase blocks while (size > 0) { snprintf(emu->child, LFS_NAME_MAX, "%d", ino); - int err = unlink(emu->path); + struct stat st; + int err = stat(emu->path, &st); if (err && errno != ENOENT) { return -errno; } + if (!err && S_ISREG(st.st_mode)) { + int err = unlink(emu->path); + if (err) { + return -errno; + } + } + size -= emu->info.erase_size; ino += 1; off = 0; |