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.
main
Sam Lantinga 2024-03-21 21:16:14 -07:00
parent 2521ba47fe
commit 05b57f6c2c
1 changed files with 4 additions and 19 deletions

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;
if (errno == ENOENT) {
// It's already gone, this is a success
return 0;
}
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 SDL_SetError("Can't remove path: %s", strerror(errno));
}
return 0;
}