summaryrefslogtreecommitdiffstats
path: root/libs/binder/IServiceManager.cpp
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@android.com>2010-07-13 15:33:35 -0700
committerBrad Fitzpatrick <bradfitz@android.com>2010-07-13 15:45:18 -0700
commit837a0d0fb2c3fba8082d47d04cb6120af1eb9a54 (patch)
tree91aa19308f64695c7b03b06c5f7268a7a5997cfd /libs/binder/IServiceManager.cpp
parenta65139634e2203230a76b8f510fe3cb21d1b3843 (diff)
downloadframeworks_native-837a0d0fb2c3fba8082d47d04cb6120af1eb9a54.zip
frameworks_native-837a0d0fb2c3fba8082d47d04cb6120af1eb9a54.tar.gz
frameworks_native-837a0d0fb2c3fba8082d47d04cb6120af1eb9a54.tar.bz2
Add Parcel::readExceptionCode() and Parcel::writeNoException()
Add native Parcel methods analogous to the Java versions. Currently, these don't do much, but upcoming StrictMode work changes the RPC calling conventions in some cases, so it's important that everybody uses these consistently, rather than having a lot of code trying to parse RPC responses out of Parcels themselves. As a summary, the current convention that Java Binder services use is to prepend the reply Parcel with an int32 signaling the exception status: 0: no exception -1: Security exception -2: Bad Parcelable -3: ... -4: ... -5: ... ... followed by Parceled String if the exception code is non-zero. With an upcoming change, it'll be the case that a response Parcel can, non-exceptionally return rich data in the header, and also return data to the caller. The important thing to note in this new case is that the first int32 in the reply parcel *will not be zero*, so anybody manually checking for it with reply.readInt32() will get false negative failures. Short summary: If you're calling into a Java service and manually checking the exception status with reply.readInt32(), change it to reply.readExceptionCode(). Change-Id: I23f9a0e53a8cfbbd9759242cfde16723641afe04
Diffstat (limited to 'libs/binder/IServiceManager.cpp')
-rw-r--r--libs/binder/IServiceManager.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp
index a3a3f0e..1fa4c35 100644
--- a/libs/binder/IServiceManager.cpp
+++ b/libs/binder/IServiceManager.cpp
@@ -158,7 +158,7 @@ public:
data.writeString16(name);
data.writeStrongBinder(service);
status_t err = remote()->transact(ADD_SERVICE_TRANSACTION, data, &reply);
- return err == NO_ERROR ? reply.readInt32() : err;
+ return err == NO_ERROR ? reply.readExceptionCode() : err;
}
virtual Vector<String16> listServices()