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);
if (rc < 0) {
const int origerrno = errno;
if (origerrno == ENOENT) {
char *parent = SDL_strdup(path);
if (!parent) {
return -1;
}
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.
}
if (errno == ENOENT) {
// It's already gone, this is a success
return 0;
}
return SDL_SetError("Can't remove path: %s", strerror(origerrno));
return SDL_SetError("Can't remove path: %s", strerror(errno));
}
return 0;
}