system: vold2: Initial skeleton for vold2.

  Let there be light.

Signed-off-by: San Mehat <san@android.com>
diff --git a/VolumeManager.cpp b/VolumeManager.cpp
new file mode 100644
index 0000000..ffe4e22
--- /dev/null
+++ b/VolumeManager.cpp
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <errno.h>
+
+#define LOG_TAG "Vold"
+
+#include <cutils/log.h>
+
+#include "VolumeManager.h"
+#include "DeviceVolume.h"
+#include "ErrorCode.h"
+
+VolumeManager *VolumeManager::sInstance = NULL;
+
+VolumeManager *VolumeManager::Instance() {
+    if (!sInstance)
+        sInstance = new VolumeManager();
+    return sInstance;
+}
+
+VolumeManager::VolumeManager() {
+    mBlockDevices = new BlockDeviceCollection();
+    mVolumes = new VolumeCollection();
+    mBroadcaster = NULL;
+}
+
+VolumeManager::~VolumeManager() {
+    delete mBlockDevices;
+}
+
+int VolumeManager::start() {
+    return 0;
+}
+
+int VolumeManager::stop() {
+    return 0;
+}
+
+int VolumeManager::addVolume(Volume *v) {
+    mVolumes->push_back(v);
+    return 0;
+}
+
+void VolumeManager::handleDiskInserted(const char *devpath, int maj, int min,
+                                       int nr_parts) {
+
+    /* Lookup possible candidate DeviceVolumes */
+    VolumeCollection::iterator it;
+    bool hit = false;
+    for (it = mVolumes->begin(); it != mVolumes->end(); ++it) {
+        if (!(*it)->handleDiskInsertion(devpath, maj, min, nr_parts)) {
+            hit = true;
+            LOGD("Volume '%s' has handled disk insertion for '%s'",
+                 (*it)->getLabel(), devpath);
+            break;
+        }
+    }
+
+    if (!hit) {
+        LOGW("No volumes handled insertion of disk '%s'", devpath);
+    }
+}
+
+void VolumeManager::handleDiskRemoved(int maj, int min) {
+}
+
+void VolumeManager::handlePartCreated(const char *devpath, int maj, int min,
+                                      int part_no) {
+}
+
+void VolumeManager::handlePartRemoved(int maj, int min) {
+}
+
+
+int VolumeManager::listVolumes(SocketClient *cli) {
+    VolumeCollection::iterator i;
+
+    for (i = mVolumes->begin(); i != mVolumes->end(); ++i) {
+        char *buffer;
+        asprintf(&buffer, "%s %s %d",
+                 (*i)->getLabel(), (*i)->getMountpoint(),
+                 (*i)->getState());
+        cli->sendMsg(ErrorCode::VolumeListResult, buffer, false);
+        free(buffer);
+    }
+    cli->sendMsg(ErrorCode::CommandOkay, "Volumes Listed", false);
+    return 0;
+}