Add FuseAppLoop to libappfuse.

The class is used at the app side (StorageManager) to parse FUSE
commands.

Bug: 32260320
Test: libappfuse_test
Change-Id: I1ae2904d3290a041f1efbf8fc10ba032eda5449c
diff --git a/libappfuse/FuseBuffer.cc b/libappfuse/FuseBuffer.cc
index 45280a5..ca47aa8 100644
--- a/libappfuse/FuseBuffer.cc
+++ b/libappfuse/FuseBuffer.cc
@@ -26,6 +26,7 @@
 #include <android-base/macros.h>
 
 namespace android {
+namespace fuse {
 
 template <typename T, typename Header>
 bool FuseMessage<T, Header>::CheckHeaderLength() const {
@@ -44,7 +45,7 @@
     return true;
   } else {
     PLOG(ERROR) << "Failed to " << operation_name
-        << " a packet from FD. result=" << result << " header.len="
+        << " a packet. result=" << result << " header.len="
         << header.len;
     return false;
   }
@@ -68,6 +69,14 @@
 template struct FuseMessage<FuseRequest, fuse_in_header>;
 template struct FuseMessage<FuseResponse, fuse_out_header>;
 
+void FuseRequest::Reset(
+    uint32_t data_length, uint32_t opcode, uint64_t unique) {
+  memset(this, 0, sizeof(fuse_in_header) + data_length);
+  header.len = sizeof(fuse_in_header) + data_length;
+  header.opcode = opcode;
+  header.unique = unique;
+}
+
 void FuseResponse::ResetHeader(
     uint32_t data_length, int32_t error, uint64_t unique) {
   CHECK_LE(error, 0) << "error should be zero or negative.";
@@ -133,4 +142,5 @@
   response.Reset(0, -ENOSYS, unique);
 }
 
+}  // namespace fuse
 }  // namespace android