Fix handling of "allow fds" state.

Didn't take into account nesting of bundles.  Boo.

Change-Id: Ic8cf21ad8d6f4938a3e105128624c9d162310d01
diff --git a/include/binder/Parcel.h b/include/binder/Parcel.h
index d973785..3fa2acb 100644
--- a/include/binder/Parcel.h
+++ b/include/binder/Parcel.h
@@ -59,7 +59,8 @@
     status_t            appendFrom(const Parcel *parcel,
                                    size_t start, size_t len);
 
-    bool                setAllowFds(bool allowFds);
+    bool                pushAllowFds(bool allowFds);
+    void                restoreAllowFds(bool lastValue);
 
     bool                hasFileDescriptors() const;
 
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index 9552c1c..608877e 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -447,13 +447,20 @@
     return err;
 }
 
-bool Parcel::setAllowFds(bool allowFds)
+bool Parcel::pushAllowFds(bool allowFds)
 {
     const bool origValue = mAllowFds;
-    mAllowFds = allowFds;
+    if (!allowFds) {
+        mAllowFds = false;
+    }
     return origValue;
 }
 
+void Parcel::restoreAllowFds(bool lastValue)
+{
+    mAllowFds = lastValue;
+}
+
 bool Parcel::hasFileDescriptors() const
 {
     if (!mFdsKnown) {