diff --git a/src/filesystem/unix/SDL_sysfilesystem.c b/src/filesystem/unix/SDL_sysfilesystem.c
index 3be5eb762..f5517b8fb 100644
--- a/src/filesystem/unix/SDL_sysfilesystem.c
+++ b/src/filesystem/unix/SDL_sysfilesystem.c
@@ -25,6 +25,8 @@
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 /* System dependent filesystem routines                                */
 
+#include <errno.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/stat.h>
@@ -190,11 +192,17 @@ SDL_GetPrefPath(const char *org, const char *app)
     for (ptr = retval+1; *ptr; ptr++) {
         if (*ptr == '/') {
             *ptr = '\0';
-            mkdir(retval, 0700);
+            if (mkdir(retval, 0700) != 0 && errno != EEXIST)
+                goto error;
             *ptr = '/';
         }
     }
-    mkdir(retval, 0700);
+    if (mkdir(retval, 0700) != 0 && errno != EEXIST) {
+error:
+        SDL_SetError("Couldn't create directory '%s': ", retval, strerror(errno));
+        SDL_free(retval);
+        return NULL;
+    }
 
     return retval;
 }