summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2010-12-13 21:50:09 -0800
committerMike Lockwood <lockwood@android.com>2010-12-13 21:50:09 -0800
commitbafca214eaf326441e5157d645b2ee7fe8c7d1ab (patch)
tree9e8e8343b4e311b7fb1f54ada20236e94a8a16bf /media
parent1b198ea6856cb5db989a7f161b7516eeecf5ebc8 (diff)
downloadframeworks_base-bafca214eaf326441e5157d645b2ee7fe8c7d1ab.zip
frameworks_base-bafca214eaf326441e5157d645b2ee7fe8c7d1ab.tar.gz
frameworks_base-bafca214eaf326441e5157d645b2ee7fe8c7d1ab.tar.bz2
MTP: check for replacing existing files via the database instead of the file system
Change-Id: I283dab48f24d2836e48fab8e49764a9cdf13de55 Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/MtpDatabase.java20
-rw-r--r--media/mtp/MtpServer.cpp4
2 files changed, 20 insertions, 4 deletions
diff --git a/media/java/android/media/MtpDatabase.java b/media/java/android/media/MtpDatabase.java
index 4a9e483..688c7b3 100644
--- a/media/java/android/media/MtpDatabase.java
+++ b/media/java/android/media/MtpDatabase.java
@@ -91,6 +91,7 @@ public class MtpDatabase {
Files.FileColumns.DATE_MODIFIED, // 5
};
private static final String ID_WHERE = Files.FileColumns._ID + "=?";
+ private static final String PATH_WHERE = Files.FileColumns.DATA + "=?";
private static final String PARENT_WHERE = Files.FileColumns.PARENT + "=?";
private static final String PARENT_FORMAT_WHERE = PARENT_WHERE + " AND "
+ Files.FileColumns.FORMAT + "=?";
@@ -154,6 +155,25 @@ public class MtpDatabase {
private int beginSendObject(String path, int format, int parent,
int storage, long size, long modified) {
+ // first make sure the object does not exist
+ if (path != null) {
+ Cursor c = null;
+ try {
+ c = mMediaProvider.query(mObjectsUri, ID_PROJECTION, PATH_WHERE,
+ new String[] { path }, null);
+ if (c != null && c.getCount() > 0) {
+ Log.w(TAG, "file already exists in beginSendObject: " + path);
+ return -1;
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException in beginSendObject", e);
+ } finally {
+ if (c != null) {
+ c.close();
+ }
+ }
+ }
+
mDatabaseModified = true;
ContentValues values = new ContentValues();
values.put(Files.FileColumns.DATA, path);
diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp
index b371e41..236cd0a 100644
--- a/media/mtp/MtpServer.cpp
+++ b/media/mtp/MtpServer.cpp
@@ -683,10 +683,6 @@ MtpResponseCode MtpServer::doSendObjectInfo() {
path += "/";
path += (const char *)name;
- // file should not already exist
- if (access(path, R_OK) == 0)
- return MTP_RESPONSE_GENERAL_ERROR;
-
// check space first
if (mSendObjectFileSize > storage->getFreeSpace())
return MTP_RESPONSE_STORAGE_FULL;