summaryrefslogtreecommitdiffstats
path: root/src/server/hashtable.c
diff options
context:
space:
mode:
authorJohann Latocha2012-01-24 20:42:30 +0100
committerJohann Latocha2012-01-24 20:42:30 +0100
commit90123ef4fbe457642325362ca07fe5b75df3f0c9 (patch)
tree12654b30e62d0819c54abbceae483800d1d608d1 /src/server/hashtable.c
parentSupport files > 4GB (diff)
downloaddnbd3-90123ef4fbe457642325362ca07fe5b75df3f0c9.tar.gz
dnbd3-90123ef4fbe457642325362ca07fe5b75df3f0c9.tar.xz
dnbd3-90123ef4fbe457642325362ca07fe5b75df3f0c9.zip
Serving more than one image.
Diffstat (limited to 'src/server/hashtable.c')
-rw-r--r--src/server/hashtable.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/server/hashtable.c b/src/server/hashtable.c
new file mode 100644
index 0000000..518454f
--- /dev/null
+++ b/src/server/hashtable.c
@@ -0,0 +1,70 @@
+/*
+ * This file is part of the Distributed Network Block Device 3
+ *
+ * Copyright(c) 2011-2012 Johann Latocha <johann@latocha.de>
+ *
+ * This file may be licensed under the terms of of the
+ * GNU General Public License Version 2 (the ``GPL'').
+ *
+ * Software distributed under the License is distributed
+ * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
+ * express or implied. See the GPL for the specific language
+ * governing rights and limitations.
+ *
+ * You should have received a copy of the GPL along with this
+ * program. If not, go to http://www.gnu.org/licenses/gpl.html
+ * or write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <stdio.h>
+#include <search.h>
+#include <string.h>
+
+#include "../config.h"
+
+char key_buf[MAX_NUMBER_IMAGES * MAX_FILE_ID];
+char value_buf[MAX_NUMBER_IMAGES * MAX_FILE_NAME];
+
+char *key_ptr = key_buf;
+char *val_ptr = value_buf;
+
+void ht_create()
+{
+ (void) hcreate(MAX_NUMBER_IMAGES);
+}
+
+int ht_insert(char* key, char* value)
+{
+ if (strlen(key) > MAX_FILE_ID) return -1;
+ if (strlen(value) > MAX_FILE_NAME) return -2;
+
+ strcpy(key_ptr, key);
+ strcpy(val_ptr, value);
+
+ ENTRY item;
+ item.key = key_ptr;
+ item.data = val_ptr;
+
+ (void) hsearch(item, ENTER);
+
+ key_ptr += strlen(key) + 1;
+ val_ptr += strlen(value) + 1;
+
+ return 0;
+}
+
+char* ht_search(char* key)
+{
+ ENTRY *result;
+
+ ENTRY item;
+ item.key = key;
+
+ if ((result = hsearch(item, FIND)) != NULL)
+ return result->data;
+ else
+ return NULL;
+}
+