am c0a7e690
: Add Parcel::readExceptionCode() and Parcel::writeNoException()
Merge commit 'c0a7e690bfd32dd897ceccd04dd0fa6bf6e9cee6' into gingerbread-plus-aosp * commit 'c0a7e690bfd32dd897ceccd04dd0fa6bf6e9cee6': Add Parcel::readExceptionCode() and Parcel::writeNoException()
This commit is contained in:
@ -39,7 +39,7 @@ int openContentProviderFile(const String16& uri)
|
||||
data.writeString16(uri);
|
||||
status_t ret = am->transact(OPEN_CONTENT_URI_TRANSACTION, data, &reply);
|
||||
if (ret == NO_ERROR) {
|
||||
int32_t exceptionCode = reply.readInt32();
|
||||
int32_t exceptionCode = reply.readExceptionCode();
|
||||
if (!exceptionCode) {
|
||||
// Success is indicated here by a nonzero int followed by the fd;
|
||||
// failure by a zero int with no data following.
|
||||
|
@ -103,6 +103,11 @@ public:
|
||||
|
||||
status_t writeObject(const flat_binder_object& val, bool nullMetaData);
|
||||
|
||||
// Like Parcel.java's writeNoException(). Just writes a zero int32.
|
||||
// Currently the native implementation doesn't do any of the StrictMode
|
||||
// stack gathering and serialization that the Java implementation does.
|
||||
status_t writeNoException();
|
||||
|
||||
void remove(size_t start, size_t amt);
|
||||
|
||||
status_t read(void* outData, size_t len) const;
|
||||
@ -125,7 +130,14 @@ public:
|
||||
sp<IBinder> readStrongBinder() const;
|
||||
wp<IBinder> readWeakBinder() const;
|
||||
status_t read(Flattenable& val) const;
|
||||
|
||||
|
||||
// Like Parcel.java's readExceptionCode(). Reads the first int32
|
||||
// off of a Parcel's header, returning 0 or the negative error
|
||||
// code on exceptions, but also deals with skipping over rich
|
||||
// response headers. Callers should use this to read & parse the
|
||||
// response headers rather than doing it by hand.
|
||||
int32_t readExceptionCode() const;
|
||||
|
||||
// Retrieve native_handle from the parcel. This returns a copy of the
|
||||
// parcel's native_handle (the caller takes ownership). The caller
|
||||
// must free the native_handle with native_handle_close() and
|
||||
|
@ -36,7 +36,7 @@ public:
|
||||
: BpInterface<IPermissionController>(impl)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid)
|
||||
{
|
||||
Parcel data, reply;
|
||||
@ -46,7 +46,7 @@ public:
|
||||
data.writeInt32(uid);
|
||||
remote()->transact(CHECK_PERMISSION_TRANSACTION, data, &reply);
|
||||
// fail on exception
|
||||
if (reply.readInt32() != 0) return 0;
|
||||
if (reply.readExceptionCode() != 0) return 0;
|
||||
return reply.readInt32() != 0;
|
||||
}
|
||||
};
|
||||
@ -66,8 +66,7 @@ status_t BnPermissionController::onTransact(
|
||||
int32_t pid = data.readInt32();
|
||||
int32_t uid = data.readInt32();
|
||||
bool res = checkPermission(permission, pid, uid);
|
||||
// write exception
|
||||
reply->writeInt32(0);
|
||||
reply->writeNoException();
|
||||
reply->writeInt32(res ? 1 : 0);
|
||||
return NO_ERROR;
|
||||
} break;
|
||||
@ -77,4 +76,3 @@ status_t BnPermissionController::onTransact(
|
||||
}
|
||||
|
||||
}; // namespace android
|
||||
|
||||
|
@ -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()
|
||||
|
@ -754,6 +754,11 @@ restart_write:
|
||||
goto restart_write;
|
||||
}
|
||||
|
||||
status_t Parcel::writeNoException()
|
||||
{
|
||||
return writeInt32(0);
|
||||
}
|
||||
|
||||
void Parcel::remove(size_t start, size_t amt)
|
||||
{
|
||||
LOG_ALWAYS_FATAL("Parcel::remove() not yet implemented!");
|
||||
@ -942,6 +947,12 @@ wp<IBinder> Parcel::readWeakBinder() const
|
||||
return val;
|
||||
}
|
||||
|
||||
int32_t Parcel::readExceptionCode() const
|
||||
{
|
||||
int32_t exception_code = readAligned<int32_t>();
|
||||
// TODO: skip over the response header here, once that's in.
|
||||
return exception_code;
|
||||
}
|
||||
|
||||
native_handle* Parcel::readNativeHandle() const
|
||||
{
|
||||
|
Reference in New Issue
Block a user