[host] Remove calls to fbl::AutoCall

fbl::AutoCall is deprecated in host/userspace in favor of fit::defer.

Calls to fbl::AutoCall could not be removed from kernel or system code
since they may not have the C++ standard library included.

TEST=runtests
CP-146: #progress

Change-Id: Ief2f908430c17851f9f40e4bbabbe122005033d6
diff --git a/system/host/blobfs/blobfs.h b/system/host/blobfs/blobfs.h
index 7dd11fd..ddbee37 100644
--- a/system/host/blobfs/blobfs.h
+++ b/system/host/blobfs/blobfs.h
@@ -2,14 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#pragma once
+
 #include <vector>
 
 #include <blobfs/host.h>
 #include <digest/digest.h>
-#include <fbl/auto_call.h>
 #include <fbl/array.h>
 #include <fbl/vector.h>
 #include <fs-host/common.h>
+#include <lib/fit/defer.h>
 
 // Merkle Tree information associated with a file.
 struct MerkleInfo {
@@ -24,7 +26,8 @@
 
 class BlobfsCreator : public FsCreator {
 public:
-    BlobfsCreator() : FsCreator(blobfs::kStartBlockMinimum) {}
+    BlobfsCreator()
+        : FsCreator(blobfs::kStartBlockMinimum) {}
 
 private:
     // Parent overrides:
@@ -50,10 +53,10 @@
 
     // A comparison function used to quickly compare MerkleInfo.
     struct DigestCompare {
-        inline bool operator() (const MerkleInfo& lhs, const MerkleInfo& rhs) const {
+        inline bool operator()(const MerkleInfo& lhs, const MerkleInfo& rhs) const {
             const uint8_t* lhs_bytes = lhs.digest.AcquireBytes();
             const uint8_t* rhs_bytes = rhs.digest.AcquireBytes();
-            auto auto_release = fbl::MakeAutoCall([&]() {
+            auto auto_release = fit::defer([&]() {
                 lhs.digest.ReleaseBytes();
                 rhs.digest.ReleaseBytes();
             });
@@ -73,3 +76,4 @@
     // A list of Merkle Information for blobs in |blob_list_|.
     std::vector<MerkleInfo> merkle_list_;
 };
+
diff --git a/system/host/blobfs/rules.mk b/system/host/blobfs/rules.mk
index 0046753..3e82718 100644
--- a/system/host/blobfs/rules.mk
+++ b/system/host/blobfs/rules.mk
@@ -31,6 +31,7 @@
     -Isystem/ulib/zxcpp/include \
     -Isystem/ulib/fdio/include \
     -Isystem/ulib/fbl/include \
+    -Isystem/ulib/fit/include \
     -Isystem/ulib/fs/include \
     -Isystem/ulib/fs-host/include \
 
diff --git a/system/host/fvm/container/fvm.cpp b/system/host/fvm/container/fvm.cpp
index 1c84089..72ca4df 100644
--- a/system/host/fvm/container/fvm.cpp
+++ b/system/host/fvm/container/fvm.cpp
@@ -8,6 +8,8 @@
 
 #include <fvm/fvm.h>
 
+#include <lib/fit/defer.h>
+
 #include "fvm/container.h"
 
 #if defined(__APPLE__)
@@ -126,7 +128,7 @@
         }
 
         const void* backup = reinterpret_cast<void*>(
-                reinterpret_cast<uintptr_t>(old_metadata.get()) + old_metadata_size);
+            reinterpret_cast<uintptr_t>(old_metadata.get()) + old_metadata_size);
         const void* primary = nullptr;
         if (fvm_validate_header(old_metadata.get(), backup, old_metadata_size, &primary) == ZX_OK) {
             if (primary != old_metadata.get()) {
@@ -231,7 +233,7 @@
             end += slice_size_;
 
             if (slice->Vslice() == last_vslice + 1) {
-                extent_lengths[extent_lengths.size()-1] += slice_size_;
+                extent_lengths[extent_lengths.size() - 1] += slice_size_;
             } else {
                 extent_lengths.push_back(slice_size_);
             }
@@ -290,7 +292,7 @@
         return ZX_ERR_IO;
     }
 
-    auto cleanup = fbl::MakeAutoCall([path]() {
+    auto cleanup = fit::defer([path]() {
         if (unlink(path) < 0) {
             fprintf(stderr, "Failed to unlink path %s\n", path);
         }
@@ -515,8 +517,7 @@
     }
 
     // If allocated metadata is too small, grow it to an appropriate size
-    size_t required_size = fvm::kAllocTableOffset + (pslice_hint_ + slice_count)
-                           * sizeof(fvm::slice_entry_t);
+    size_t required_size = fvm::kAllocTableOffset + (pslice_hint_ + slice_count) * sizeof(fvm::slice_entry_t);
     if ((status = GrowMetadata(required_size)) != ZX_OK) {
         return status;
     }
@@ -660,7 +661,7 @@
 
     uintptr_t metadata_start = reinterpret_cast<uintptr_t>(metadata_.get());
     uintptr_t offset = static_cast<uintptr_t>(fvm::kVPartTableOffset +
-                                                  index * sizeof(fvm::vpart_entry_t));
+                                              index * sizeof(fvm::vpart_entry_t));
     *out = reinterpret_cast<fvm::vpart_entry_t*>(metadata_start + offset);
     return ZX_OK;
 }
@@ -751,8 +752,7 @@
         return ZX_ERR_OUT_OF_RANGE;
     }
 
-    if (lseek(fd_.get(), disk_offset_ + fvm::SliceStart(disk_size_, slice_size_, pslice) +
-                block_offset * block_size, SEEK_SET) < 0) {
+    if (lseek(fd_.get(), disk_offset_ + fvm::SliceStart(disk_size_, slice_size_, pslice) + block_offset * block_size, SEEK_SET) < 0) {
         return ZX_ERR_BAD_STATE;
     }
 
diff --git a/system/host/fvm/rules.mk b/system/host/fvm/rules.mk
index 2850b03..aa46747 100644
--- a/system/host/fvm/rules.mk
+++ b/system/host/fvm/rules.mk
@@ -22,16 +22,17 @@
     -Wstrict-prototypes -Wwrite-strings \
     -Ithird_party/ulib/lz4/include \
     -Isystem/uapp/fvm/include \
-    -Isystem/ulib/fbl/include \
-    -Isystem/ulib/fvm/include \
-    -Isystem/ulib/digest/include \
-    -Isystem/ulib/gpt/include \
-    -Isystem/ulib/blobfs/include \
-    -Isystem/ulib/fs/include \
-    -Isystem/ulib/fzl/include \
     -Isystem/ulib/bitmap/include \
+    -Isystem/ulib/blobfs/include \
+    -Isystem/ulib/digest/include \
+    -Isystem/ulib/fbl/include \
     -Isystem/ulib/fdio/include \
+    -Isystem/ulib/fit/include \
+    -Isystem/ulib/fs/include \
     -Isystem/ulib/fs-management/include \
+    -Isystem/ulib/fvm/include \
+    -Isystem/ulib/fzl/include \
+    -Isystem/ulib/gpt/include \
     -Isystem/ulib/minfs/include \
 
 MODULE_HOST_LIBS := \
diff --git a/system/host/xdc-server/rules.mk b/system/host/xdc-server/rules.mk
index 2e7d07c..d335f19 100644
--- a/system/host/xdc-server/rules.mk
+++ b/system/host/xdc-server/rules.mk
@@ -16,6 +16,7 @@
     -Werror-implicit-function-declaration \
     -Wstrict-prototypes -Wwrite-strings \
     -Isystem/ulib/fbl/include \
+    -Isystem/ulib/fit/include \
     -Isystem/ulib/xdc-host-utils/include \
     -Isystem/ulib/xdc-server-utils/include \
 
diff --git a/system/host/xdc-server/xdc-server.cpp b/system/host/xdc-server/xdc-server.cpp
index 1cd2b1f..f3b1d7a 100644
--- a/system/host/xdc-server/xdc-server.cpp
+++ b/system/host/xdc-server/xdc-server.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <fbl/auto_call.h>
+#include <lib/fit/defer.h>
 #include <xdc-host-utils/conn.h>
 #include <xdc-server-utils/msg.h>
 #include <xdc-server-utils/packet.h>
@@ -11,12 +11,12 @@
 #include <cassert>
 #include <errno.h>
 #include <fcntl.h>
+#include <poll.h>
 #include <stdio.h>
 #include <sys/file.h>
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <sys/un.h>
-#include <poll.h>
 #include <unistd.h>
 
 #include "usb-handler.h"
@@ -25,7 +25,7 @@
 namespace xdc {
 
 static constexpr uint32_t MAX_PENDING_CONN_BACKLOG = 128;
-static const char* XDC_LOCK_PATH   = "/tmp/xdc.lock";
+static const char* XDC_LOCK_PATH = "/tmp/xdc.lock";
 
 void Client::SetStreamId(uint32_t stream_id) {
     registered_ = true;
@@ -39,7 +39,7 @@
         return;
     }
     printf("client with stream id %u is now %s to the xdc device stream.\n",
-           stream_id(), connected ?  "connected" : "disconnected");
+           stream_id(), connected ? "connected" : "disconnected");
     connected_ = connected;
 }
 
@@ -63,7 +63,7 @@
 }
 
 void Client::ProcessCompletedReads(const std::unique_ptr<UsbHandler>& usb_handler) {
-    for (auto iter = completed_reads_.begin(); iter != completed_reads_.end(); ) {
+    for (auto iter = completed_reads_.begin(); iter != completed_reads_.end();) {
         std::unique_ptr<UsbHandler::Transfer>& transfer = *iter;
 
         unsigned char* data = transfer->data() + transfer->offset();
@@ -134,7 +134,7 @@
     }
     // Remove the socket file if it exists.
     unlink(XDC_SOCKET_PATH);
-    if (bind(socket_fd_.get(), (sockaddr *)&addr, sizeof(addr)) != 0) {
+    if (bind(socket_fd_.get(), (sockaddr*)&addr, sizeof(addr)) != 0) {
         fprintf(stderr, "Could not bind socket with pathname: %s, err: %s\n",
                 XDC_SOCKET_PATH, strerror(errno));
         return false;
@@ -176,17 +176,17 @@
         short events = iter.second;
 
         auto match = std::find_if(poll_fds_.begin(), poll_fds_.end(),
-                                  [&fd](auto& pollfd) { return pollfd.fd == fd; } );
+                                  [&fd](auto& pollfd) { return pollfd.fd == fd; });
         if (match != poll_fds_.end()) {
             fprintf(stderr, "already have usb handler fd: %d\n", fd);
             continue;
         }
-        poll_fds_.push_back(pollfd { fd, events, 0 });
+        poll_fds_.push_back(pollfd{fd, events, 0});
         printf("usb handler added fd: %d\n", fd);
     }
     for (auto fd : removed_fds) {
         auto match = std::remove_if(poll_fds_.begin(), poll_fds_.end(),
-                     [&fd](auto& pollfd) { return pollfd.fd == fd; } );
+                                    [&fd](auto& pollfd) { return pollfd.fd == fd; });
         if (match == poll_fds_.end()) {
             fprintf(stderr, "could not find usb handler fd: %d to delete\n", fd);
             continue;
@@ -200,13 +200,13 @@
     printf("Waiting for connections on: %s\n", XDC_SOCKET_PATH);
 
     // Listen for new client connections.
-    poll_fds_.push_back(pollfd{ socket_fd_.get(), POLLIN, 0 });
+    poll_fds_.push_back(pollfd{socket_fd_.get(), POLLIN, 0});
 
     // Initialize to true as we want to get the initial usb handler fds.
     bool update_usb_handler_fds = true;
 
     for (;;) {
-         if (update_usb_handler_fds) {
+        if (update_usb_handler_fds) {
             UpdateUsbHandlerFds();
             update_usb_handler_fds = false;
         }
@@ -283,7 +283,7 @@
     struct sockaddr_un addr;
     socklen_t len = sizeof(addr);
     // Most of the time we want non-blocking transfers, so we can handle other clients / libusb.
-    int client_fd = accept(socket_fd_.get(), (struct sockaddr *)&addr, &len);
+    int client_fd = accept(socket_fd_.get(), (struct sockaddr*)&addr, &len);
     if (client_fd < 0) {
         fprintf(stderr, "Socket accept failed, err: %s\n", strerror(errno));
         return;
@@ -306,16 +306,16 @@
     }
     printf("Client connected, socket fd: %d\n", client_fd);
     clients_[client_fd] = std::make_shared<Client>(client_fd);
-    poll_fds_.push_back(pollfd{ client_fd, POLLIN, 0 });
+    poll_fds_.push_back(pollfd{client_fd, POLLIN, 0});
 }
 
 bool XdcServer::RegisterStream(std::shared_ptr<Client> client) {
     RegisterStreamRequest stream_id;
     ssize_t n = recv(client->fd(), &stream_id, sizeof(stream_id), MSG_WAITALL);
     if (n != sizeof(stream_id)) {
-       fprintf(stderr, "failed to read stream id from client fd: %d, got len: %ld, got err: %s\n",
-               client->fd(), n, strerror(errno));
-       return false;
+        fprintf(stderr, "failed to read stream id from client fd: %d, got len: %ld, got err: %s\n",
+                client->fd(), n, strerror(errno));
+        return false;
     }
     // Client has disconnected. This will be handled in the main poll thread.
     if (n == 0) {
@@ -353,7 +353,7 @@
 }
 
 void XdcServer::UsbReadComplete(std::unique_ptr<UsbHandler::Transfer> transfer) {
-    auto requeue = fbl::MakeAutoCall([&]() { usb_handler_->RequeueRead(std::move(transfer)); });
+    auto requeue = fit::defer([&]() { usb_handler_->RequeueRead(std::move(transfer)); });
 
     bool is_new_packet;
     uint32_t stream_id;
@@ -426,8 +426,7 @@
     xdc_msg_t msg = {
         .opcode = XDC_NOTIFY_STREAM_STATE,
         .notify_stream_state.stream_id = stream_id,
-        .notify_stream_state.online = online
-    };
+        .notify_stream_state.online = online};
     queued_ctrl_msgs_.push_back(msg);
     SendQueuedCtrlMsgs();
 }
@@ -439,7 +438,7 @@
     }
     zx_status_t res = transfer->FillData(DEBUG_STREAM_ID_RESERVED,
                                          reinterpret_cast<unsigned char*>(&msg), sizeof(msg));
-    assert(res == ZX_OK);  // Should not fail.
+    assert(res == ZX_OK); // Should not fail.
     usb_handler_->QueueWriteTransfer(std::move(transfer));
     return true;
 }
@@ -457,7 +456,7 @@
     }
 }
 
-}  // namespace xdc
+} // namespace xdc
 
 int main(int argc, char** argv) {
     printf("Starting XHCI Debug Capability server...\n");
diff --git a/system/utest/fvm-host/rules.mk b/system/utest/fvm-host/rules.mk
index 3d06447..759629d 100644
--- a/system/utest/fvm-host/rules.mk
+++ b/system/utest/fvm-host/rules.mk
@@ -26,6 +26,7 @@
     -Isystem/uapp/lz4/include \
     -Isystem/host/fvm/include \
     -Isystem/ulib/fbl/include \
+    -Isystem/ulib/fit/include \
     -Isystem/ulib/fvm/include \
     -Isystem/ulib/digest/include \
     -Ithird_party/ulib/uboringssl/include \