Simplified SDL_SYS_RemovePath()

If we get ENOENT we call that success. If the parent directory doesn't exist, that's fine, other operations on it will fail if it matters to the application.
This commit is contained in:
Sam Lantinga 2024-03-21 21:16:14 -07:00
parent 2521ba47fe
commit 05b57f6c2c

View file

@ -59,26 +59,11 @@ int SDL_SYS_RemovePath(const char *path)
{ {
int rc = remove(path); int rc = remove(path);
if (rc < 0) { if (rc < 0) {
const int origerrno = errno; if (errno == ENOENT) {
if (origerrno == ENOENT) { // It's already gone, this is a success
char *parent = SDL_strdup(path); return 0;
if (!parent) {
return -1;
} }
return SDL_SetError("Can't remove path: %s", strerror(errno));
char *ptr = SDL_strrchr(parent, '/');
if (ptr) {
*ptr = '\0'; // chop off thing we were removing, see if parent is there.
}
struct stat statbuf;
rc = stat(ptr ? parent : ".", &statbuf);
SDL_free(parent);
if (rc == 0) {
return 0; // it's already gone, and parent exists, consider it success.
}
}
return SDL_SetError("Can't remove path: %s", strerror(origerrno));
} }
return 0; return 0;
} }