diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-04-02 13:26:46 +0200 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-04-02 13:26:46 +0200 |
| commit | d5fdf65e31d6ad77f116631efdf505170898df18 (patch) | |
| tree | d33624a82f08cd6d5b8940148ec526b7620b3748 | |
| parent | 8b8dc680031797c0d924ea2cc272745731d627fb (diff) | |
| download | cgeo-d5fdf65e31d6ad77f116631efdf505170898df18.zip cgeo-d5fdf65e31d6ad77f116631efdf505170898df18.tar.gz cgeo-d5fdf65e31d6ad77f116631efdf505170898df18.tar.bz2 | |
fix #3714: NPE in deleteDirectory()
| -rw-r--r-- | main/src/cgeo/geocaching/files/LocalStorage.java | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java index 626f6e6..01c090b 100644 --- a/main/src/cgeo/geocaching/files/LocalStorage.java +++ b/main/src/cgeo/geocaching/files/LocalStorage.java @@ -9,6 +9,7 @@ import ch.boye.httpclientandroidlib.Header; import ch.boye.httpclientandroidlib.HttpResponse; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import android.os.Environment; @@ -361,9 +362,13 @@ public final class LocalStorage { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } - public static boolean deleteDirectory(File path) { - if (path.exists()) { - for (final File file : path.listFiles()) { + public static boolean deleteDirectory(@NonNull final File dir) { + final File[] files = dir.listFiles(); + + // Although we are called on an existing directory, it might have been removed concurrently + // in the meantime, for example by the user or by another cleanup task. + if (files != null) { + for (final File file : files) { if (file.isDirectory()) { deleteDirectory(file); } else { @@ -372,7 +377,7 @@ public final class LocalStorage { } } - return FileUtils.delete(path); + return FileUtils.delete(dir); } /** |
