snapshot_util_cvd supports --helpxml

Bug: 346422499
Test: snapshot_util_cvd --helpxml
Change-Id: Iaeba3c19bde41753b335e05699c0bea6e1fa7487
diff --git a/host/commands/snapshot_util_cvd/main.cc b/host/commands/snapshot_util_cvd/main.cc
index c9ba106..767503d 100644
--- a/host/commands/snapshot_util_cvd/main.cc
+++ b/host/commands/snapshot_util_cvd/main.cc
@@ -65,14 +65,14 @@
 }
 
 Result<void> SnapshotCvdMain(std::vector<std::string> args) {
-  const CuttlefishConfig* config =
-      CF_EXPECT(CuttlefishConfig::Get(), "Failed to obtain config object");
-
   CF_EXPECT(!args.empty(), "No arguments was given");
   const auto prog_path = args.front();
   args.erase(args.begin());
   auto parsed = CF_EXPECT(Parse(args));
 
+  const CuttlefishConfig* config =
+      CF_EXPECT(CuttlefishConfig::Get(), "Failed to obtain config object");
+
   switch (parsed.cmd) {
     case SnapshotCmd::kSuspend: {
       run_cvd::ExtendedLauncherAction extended_action;
diff --git a/host/commands/snapshot_util_cvd/parse.cc b/host/commands/snapshot_util_cvd/parse.cc
index e829389..42fcf9c 100644
--- a/host/commands/snapshot_util_cvd/parse.cc
+++ b/host/commands/snapshot_util_cvd/parse.cc
@@ -127,7 +127,14 @@
   flags.push_back(HelpFlag(flags));
   flags.push_back(HelpXmlFlag(flags, std::cout, help_xml));
   flags.push_back(UnexpectedArgumentGuard());
-  CF_EXPECT(ConsumeFlags(flags, args), "Flag parsing failed");
+  auto parse_res = ConsumeFlags(flags, args);
+  if (!help_xml && !parse_res.ok()) {
+    // Parse fails if helpxml is passed
+    CF_EXPECT(std::move(parse_res), "Flag parsing failed");
+  }
+  if (help_xml) {
+    std::exit(0);
+  }
   parsed.cmd = CF_EXPECT(ConvertToSnapshotCmd(snapshot_op));
   parsed.snapshot_path = snapshot_path;
   parsed.instance_nums = CF_EXPECT(InstanceNums());