Use base::Commandline instead of gflags (removes -fno-strict-aliasing).

Small CL that does a little refactoring of command lines to use
base::CommandLine. I also cleaned up buffet_client parsing args to better
use base::CommandLine rather than parsing argv.

BUG=chromium:356745
TEST=Built it

Change-Id: I2b5eb9ebc8b41e3df92ddbce9ad4fe97f51362c2
Reviewed-on: https://chromium-review.googlesource.com/193939
Reviewed-by: Chris Sosa <sosa@chromium.org>
Tested-by: Chris Sosa <sosa@chromium.org>
Commit-Queue: Chris Sosa <sosa@chromium.org>
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index f44d8dc..63d8d62 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -13,19 +13,11 @@
         'libcurl',
       ],
     },
-    # TODO(sosa): Remove gflags: crbug.com/356745.
-    'link_settings': {
-      'libraries': [
-        '-lgflags',
-      ],
-    },
     'include_dirs': [
       '..'  # To access all src/platform2 directories
     ],
-    # TODO(sosa): Remove no-strict-aliasing: crbug.com/356745.
     'cflags_cc': [
       '-std=gnu++11',
-      '-fno-strict-aliasing',
     ],
   },
   'targets': [
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 9568834..edd6e87 100755
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -5,11 +5,13 @@
 #include <iostream>
 #include <string>
 
+#include <base/command_line.h>
 #include <base/logging.h>
 #include <base/memory/scoped_ptr.h>
 #include <dbus/bus.h>
 #include <dbus/object_proxy.h>
 #include <dbus/message.h>
+#include <sysexits.h>
 
 #include "buffet/dbus_constants.h"
 #include "buffet/dbus_manager.h"
@@ -97,53 +99,59 @@
 } // namespace
 
 int main(int argc, char** argv) {
+  CommandLine::Init(argc, argv);
+  CommandLine* cl = CommandLine::ForCurrentProcess();
+
   dbus::Bus::Options options;
   options.bus_type = dbus::Bus::SYSTEM;
   scoped_refptr<dbus::Bus> bus(new dbus::Bus(options));
 
-  if (argc < 2) {
+  CommandLine::StringVector args = cl->GetArgs();
+  if (args.size() < 1) {
     usage();
-    return -1;
+    return EX_USAGE;
   }
 
-  char* command = argv[1];
+  // Pop the command off of the args list.
+  std::string command = args[0];
+  args.erase(args.begin());
   bool success = false;
-  if (strcmp(command, kRootTestMethod) == 0) {
+  if (command.compare(kRootTestMethod) == 0) {
     auto proxy = GetBuffetDBusProxy(
         bus, buffet::dbus_constants::kRootServicePath);
     success = CallTestMethod(proxy);
-  } else if (strcmp(command, kManagerRegisterDeviceMethod) == 0) {
-    if (argc != 5) {
+  } else if (command.compare(kManagerRegisterDeviceMethod) == 0) {
+    if (args.size() != 3) {
       std::cerr << "Invalid number of arguments for "
                 << "Manager.RegisterDevice" << std::endl;
       usage();
-      return -1;
+      return EX_USAGE;
     }
     auto proxy = GetBuffetDBusProxy(
         bus, buffet::dbus_constants::kManagerServicePath);
-    success = CallManagerRegisterDevice(proxy, argv[2], argv[3], argv[4]);
-  } else if (strcmp(command, kManagerUpdateStateMethod) == 0) {
-    if (argc != 3) {
+    success = CallManagerRegisterDevice(proxy, args[0], args[1], args[2]);
+  } else if (command.compare(kManagerUpdateStateMethod) == 0) {
+    if (args.size() != 1) {
       std::cerr << "Invalid number of arguments for "
                 << "Manager.UpdateState" << std::endl;
       usage();
-      return -1;
+      return EX_USAGE;
     }
     auto proxy = GetBuffetDBusProxy(
         bus, buffet::dbus_constants::kManagerServicePath);
-    success = CallManagerUpdateState(proxy, argv[2]);
+    success = CallManagerUpdateState(proxy, args[0]);
   } else {
-    std::cerr << "Unkown command: " << command << std::endl;
+    std::cerr << "Unknown command: " << command << std::endl;
     usage();
-    return -1;
+    return EX_USAGE;
   }
 
   if (success) {
     std::cout << "Done." << std::endl;
-    return 0;
+    return EX_OK;
   }
 
-  std::cout << "Done, with errors." << std::endl;
-  return -1;
+  std::cerr << "Done, with errors." << std::endl;
+  return 1;
 }
 
diff --git a/buffet/main.cc b/buffet/main.cc
index 79843ab..37a9031 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -12,15 +12,23 @@
 #include <base/message_loop/message_loop.h>
 #include <base/strings/string_util.h>
 #include <base/strings/stringprintf.h>
-#include <gflags/gflags.h>
+#include <sysexits.h>
 
 #include "buffet/dbus_manager.h"
 #include "buffet/manager.h"
 
-DEFINE_string(logsroot, "/var/log", "Root directory for buffet logs.");
-
 namespace {
 
+static const char kLogRoot[] = "logroot";
+static const char kHelp[] = "help";
+static const char kDefaultLogRoot[] = "/var/log";
+
+// The help message shown if help flag is passed to the program.
+static const char kHelpMessage[] = "\n"
+    "Available Switches: \n"
+    "  --logroot=/path/to/logroot\n"
+    "    Specifies parent directory to put buffet logs in.\n";
+
 // Returns |utime| as a string
 std::string GetTimeAsString(time_t utime) {
   struct tm tm;
@@ -40,10 +48,10 @@
   }
 }
 
-// Creates new log file based on timestamp in |logs_root|/buffet.
-std::string SetupLogFile(const std::string& logs_root) {
-  const auto log_symlink = logs_root + "/buffet.log";
-  const auto logs_dir = logs_root + "/buffet";
+// Creates new log file based on timestamp in |log_root|/buffet.
+std::string SetupLogFile(const std::string& log_root) {
+  const auto log_symlink = log_root + "/buffet.log";
+  const auto logs_dir = log_root + "/buffet";
   const auto log_path =
       base::StringPrintf("%s/buffet.%s",
                          logs_dir.c_str(),
@@ -54,8 +62,8 @@
 }
 
 // Sets up logging for buffet.
-void SetupLogging(const std::string& logs_root) {
-  const auto log_file = SetupLogFile(logs_root);
+void SetupLogging(const std::string& log_root) {
+  const auto log_file = SetupLogFile(log_root);
   logging::LoggingSettings settings;
   settings.logging_dest = logging::LOG_TO_ALL;
   settings.log_file = log_file.c_str();
@@ -69,10 +77,19 @@
 int main(int argc, char* argv[]) {
   // Parse the args and check for extra args.
   CommandLine::Init(argc, argv);
-  google::ParseCommandLineFlags(&argc, &argv, true);
-  CHECK_EQ(argc, 1) << "Unexpected arguments. Try --help";
+  CommandLine* cl = CommandLine::ForCurrentProcess();
 
-  SetupLogging(FLAGS_logsroot);
+  if (cl->HasSwitch(kHelp)) {
+    LOG(INFO) << kHelpMessage;
+    return EX_USAGE;
+  }
+
+  std::string log_root = std::string(kDefaultLogRoot);
+  if (cl->HasSwitch(kLogRoot)) {
+    log_root = cl->GetSwitchValueASCII(kLogRoot);
+  }
+
+  SetupLogging(log_root);
 
   base::AtExitManager at_exit_manager;
   base::MessageLoopForIO message_loop;
@@ -87,5 +104,5 @@
   }
 
   dbus_manager.Finalize();
-  return 0;
+  return EX_OK;
 }