diff options
author | Marco Nelissen <marcone@google.com> | 2014-11-14 08:01:01 -0800 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2014-11-14 14:01:29 -0800 |
commit | 2ea926bda2fa30f3ba8d0ed2d2395a8ada952e6e (patch) | |
tree | af1a760841833f80084aac64b548471259b647a4 /libs/binder | |
parent | aedb1c843e9a1d3149ca81d586fa168d146d8f5e (diff) | |
download | frameworks_native-2ea926bda2fa30f3ba8d0ed2d2395a8ada952e6e.zip frameworks_native-2ea926bda2fa30f3ba8d0ed2d2395a8ada952e6e.tar.gz frameworks_native-2ea926bda2fa30f3ba8d0ed2d2395a8ada952e6e.tar.bz2 |
Replace IInterface::asBinder() with a static
so we can do NULL checks again, and update calls to IInterface::asBinder()
to use the new static version.
Change-Id: Ia7b10eb38ca55b72278bfd33d3bf647f338b4e6a
Diffstat (limited to 'libs/binder')
-rw-r--r-- | libs/binder/AppOpsManager.cpp | 2 | ||||
-rw-r--r-- | libs/binder/IAppOpsService.cpp | 4 | ||||
-rw-r--r-- | libs/binder/IInterface.cpp | 12 | ||||
-rw-r--r-- | libs/binder/IMemory.cpp | 13 | ||||
-rw-r--r-- | libs/binder/IServiceManager.cpp | 2 |
5 files changed, 19 insertions, 14 deletions
diff --git a/libs/binder/AppOpsManager.cpp b/libs/binder/AppOpsManager.cpp index 61b4f7d..c562c30 100644 --- a/libs/binder/AppOpsManager.cpp +++ b/libs/binder/AppOpsManager.cpp @@ -44,7 +44,7 @@ sp<IAppOpsService> AppOpsManager::getService() int64_t startTime = 0; mLock.lock(); sp<IAppOpsService> service = mService; - while (service == NULL || !service->asBinder()->isBinderAlive()) { + while (service == NULL || !IInterface::asBinder(service)->isBinderAlive()) { sp<IBinder> binder = defaultServiceManager()->checkService(_appops); if (binder == NULL) { // Wait for the app ops service to come back... diff --git a/libs/binder/IAppOpsService.cpp b/libs/binder/IAppOpsService.cpp index f58a352..86abdc0 100644 --- a/libs/binder/IAppOpsService.cpp +++ b/libs/binder/IAppOpsService.cpp @@ -91,14 +91,14 @@ public: data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); data.writeInt32(op); data.writeString16(packageName); - data.writeStrongBinder(callback->asBinder()); + data.writeStrongBinder(IInterface::asBinder(callback)); remote()->transact(START_WATCHING_MODE_TRANSACTION, data, &reply); } virtual void stopWatchingMode(const sp<IAppOpsCallback>& callback) { Parcel data, reply; data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); - data.writeStrongBinder(callback->asBinder()); + data.writeStrongBinder(IInterface::asBinder(callback)); remote()->transact(STOP_WATCHING_MODE_TRANSACTION, data, &reply); } diff --git a/libs/binder/IInterface.cpp b/libs/binder/IInterface.cpp index 99a9ffe..8c60dc4 100644 --- a/libs/binder/IInterface.cpp +++ b/libs/binder/IInterface.cpp @@ -27,14 +27,18 @@ IInterface::IInterface() IInterface::~IInterface() { } -sp<IBinder> IInterface::asBinder() +// static +sp<IBinder> IInterface::asBinder(const IInterface* iface) { - return onAsBinder(); + if (iface == NULL) return NULL; + return const_cast<IInterface*>(iface)->onAsBinder(); } -sp<const IBinder> IInterface::asBinder() const +// static +sp<IBinder> IInterface::asBinder(const sp<IInterface>& iface) { - return const_cast<IInterface*>(this)->onAsBinder(); + if (iface == NULL) return NULL; + return iface->onAsBinder(); } // --------------------------------------------------------------------------- diff --git a/libs/binder/IMemory.cpp b/libs/binder/IMemory.cpp index d8ed995..e9891a8 100644 --- a/libs/binder/IMemory.cpp +++ b/libs/binder/IMemory.cpp @@ -216,7 +216,7 @@ status_t BnMemory::onTransact( CHECK_INTERFACE(IMemory, data, reply); ssize_t offset; size_t size; - reply->writeStrongBinder( getMemory(&offset, &size)->asBinder() ); + reply->writeStrongBinder( IInterface::asBinder(getMemory(&offset, &size)) ); reply->writeInt32(offset); reply->writeInt32(size); return NO_ERROR; @@ -241,7 +241,7 @@ BpMemoryHeap::~BpMemoryHeap() { if (mRealHeap) { // by construction we're the last one if (mBase != MAP_FAILED) { - sp<IBinder> binder = const_cast<BpMemoryHeap*>(this)->asBinder(); + sp<IBinder> binder = IInterface::asBinder(this); if (VERBOSE) { ALOGD("UNMAPPING binder=%p, heap=%p, size=%zu, fd=%d", @@ -253,7 +253,7 @@ BpMemoryHeap::~BpMemoryHeap() { } } else { // remove from list only if it was mapped before - sp<IBinder> binder = const_cast<BpMemoryHeap*>(this)->asBinder(); + sp<IBinder> binder = IInterface::asBinder(this); free_heap(binder); } } @@ -262,7 +262,7 @@ BpMemoryHeap::~BpMemoryHeap() { void BpMemoryHeap::assertMapped() const { if (mHeapId == -1) { - sp<IBinder> binder(const_cast<BpMemoryHeap*>(this)->asBinder()); + sp<IBinder> binder(IInterface::asBinder(const_cast<BpMemoryHeap*>(this))); sp<BpMemoryHeap> heap(static_cast<BpMemoryHeap*>(find_heap(binder).get())); heap->assertReallyMapped(); if (heap->mBase != MAP_FAILED) { @@ -297,7 +297,8 @@ void BpMemoryHeap::assertReallyMapped() const uint32_t offset = reply.readInt32(); ALOGE_IF(err, "binder=%p transaction failed fd=%d, size=%zd, err=%d (%s)", - asBinder().get(), parcel_fd, size, err, strerror(-err)); + IInterface::asBinder(this).get(), + parcel_fd, size, err, strerror(-err)); int fd = dup( parcel_fd ); ALOGE_IF(fd==-1, "cannot dup fd=%d, size=%zd, err=%d (%s)", @@ -314,7 +315,7 @@ void BpMemoryHeap::assertReallyMapped() const mBase = mmap(0, size, access, MAP_SHARED, fd, offset); if (mBase == MAP_FAILED) { ALOGE("cannot map BpMemoryHeap (binder=%p), size=%zd, fd=%d (%s)", - asBinder().get(), size, fd, strerror(errno)); + IInterface::asBinder(this).get(), size, fd, strerror(errno)); close(fd); } else { mSize = size; diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp index 7b1b0e7..3c716df 100644 --- a/libs/binder/IServiceManager.cpp +++ b/libs/binder/IServiceManager.cpp @@ -87,7 +87,7 @@ bool checkPermission(const String16& permission, pid_t pid, uid_t uid) } // Is this a permission failure, or did the controller go away? - if (pc->asBinder()->isBinderAlive()) { + if (IInterface::asBinder(pc)->isBinderAlive()) { ALOGW("Permission failure: %s from uid=%d pid=%d", String8(permission).string(), uid, pid); return false; |