diff options
author | Mike Lockwood <lockwood@android.com> | 2010-12-13 21:50:09 -0800 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2010-12-13 21:50:09 -0800 |
commit | bafca214eaf326441e5157d645b2ee7fe8c7d1ab (patch) | |
tree | 9e8e8343b4e311b7fb1f54ada20236e94a8a16bf /media | |
parent | 1b198ea6856cb5db989a7f161b7516eeecf5ebc8 (diff) | |
download | frameworks_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.java | 20 | ||||
-rw-r--r-- | media/mtp/MtpServer.cpp | 4 |
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; |