Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(588)

Unified Diff: main.cc

Issue 6824032: First batch of cros-disk changes (Closed) Base URL: ssh://gitrw.chromium.org:9222/cros-disks.git@master
Patch Set: adds set_ and removes j's Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « disk-manager.cc ('k') | org.chromium.CrosDisks.conf » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: main.cc
diff --git a/main.cc b/main.cc
index a38faa0cab143d82c2fe95145c085465e5042184..56bb11fc8e7fda5e30bcc4d7221bd2988c2f235b 100644
--- a/main.cc
+++ b/main.cc
@@ -4,6 +4,9 @@
// A simple daemon to detect, mount, and eject removable storage devices.
+#include "cros-disks-server-impl.h"
+#include "disk-manager.h"
+#include <base/basictypes.h>
#include <base/file_util.h>
#include <base/logging.h>
#include <base/string_util.h>
@@ -12,23 +15,86 @@
#include <gflags/gflags.h>
#include <glib-object.h>
#include <glib.h>
+#include <libudev.h>
#include <metrics/metrics_library.h>
+
+using cros_disks::CrosDisksServer;
+using cros_disks::DiskManager;
+
+DEFINE_bool(foreground, false,
+ "Don't daemon()ize; run in foreground.");
+
+// TODO(rtc): gflags string defines require the use of
+// -fno-strict-aliasing for some reason. Verify that disabling this check
+// is sane.
+DEFINE_string(log_dir, "/var/log/cros-disks", "log directory");
+
+void SetupLogging() {
+ logging::InitLogging(FLAGS_log_dir.c_str(),
+ logging::LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG,
+ logging::DONT_LOCK_LOG_FILE,
+ logging::APPEND_TO_OLD_LOG_FILE);
+}
+
+// This callback will be invoked once udev has data about
+// new, changed, or removed devices.
+gboolean UdevCallback(GIOChannel* source,
+ GIOCondition condition,
+ gpointer data) {
+ DiskManager* mgr = static_cast<DiskManager*>(data);
+ mgr->ProcessUdevChanges();
+ return true;
+}
+
int main(int argc, char** argv) {
::g_type_init();
g_thread_init(NULL);
google::ParseCommandLineFlags(&argc, &argv, true);
+ if(!FLAGS_foreground) {
+ PLOG_IF(FATAL, daemon(0, 0) == 1) << "daemon() failed";
+ // SetupLogging();
+ }
+
LOG(INFO) << "Creating a GMainLoop";
GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE);
+ CHECK(loop) << "Failed to create a GMainLoop";
+
+ LOG(INFO) << "Creating the dbus dispatcher";
+ DBus::Glib::BusDispatcher* dispatcher =
+ new(std::nothrow) DBus::Glib::BusDispatcher();
+ CHECK(dispatcher) << "Failed to create a dbus-dispatcher";
+ DBus::default_dispatcher = dispatcher;
+ dispatcher->attach(NULL);
+
+ LOG(INFO) << "creating server";
+ DBus::Connection server_conn = DBus::Connection::SystemBus();
+ server_conn.request_name("org.chromium.CrosDisks");
+ CrosDisksServer* server = new(std::nothrow) CrosDisksServer(server_conn);
+ CHECK(server) << "Failed to create the cros-disks server";
LOG(INFO) << "Initializing the metrics library";
MetricsLibrary metrics_lib;
metrics_lib.Init();
- // Run the main loop until exit time:
- // TODO(rtc): daemonize this
+
+ DiskManager manager;
+ manager.EnumerateDisks();
+
+ // Setup a monitor
+ g_io_add_watch_full(g_io_channel_unix_new(manager.udev_monitor_fd()),
+ G_PRIORITY_HIGH_IDLE,
+ GIOCondition(G_IO_IN | G_IO_PRI | G_IO_HUP | G_IO_NVAL),
+ UdevCallback,
+ &manager,
+ NULL);
g_main_loop_run(loop);
+ LOG(INFO) << "Cleaining up and exiting";
+ g_main_loop_unref(loop);
+ delete server;
+ delete dispatcher;
+
return 0;
}
« no previous file with comments | « disk-manager.cc ('k') | org.chromium.CrosDisks.conf » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698