split off and compile util.c separately
authorFelix Fietkau <nbd@openwrt.org>
Fri, 20 Aug 2010 12:56:30 +0000 (14:56 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 20 Aug 2010 12:56:30 +0000 (14:56 +0200)
Makefile
libuci.c
list.c
util.c

index c3d79e4c42f05937fe16feb7660dd51624502d17..b00aac852f9bf99085c2a9c0fbec5d6403c60e0c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -19,10 +19,11 @@ $(1).shared.o: $(2)
 $(1).static.o: $(2)
 endef
 
+SOURCES = libuci.c file.c ucimap.c util.c
 
 all: uci libuci.$(SHLIB_EXT) uci-static ucimap-example
 
-$(eval $(call add_dep,libuci,history.c list.c util.c uci.h uci_config.h uci_internal.h))
+$(eval $(call add_dep,libuci,history.c list.c uci.h uci_config.h uci_internal.h))
 $(eval $(call add_dep,ucimap,uci.h uci_config.h ucimap.h))
 
 cli.o: cli.c uci.h uci_config.h
@@ -56,12 +57,12 @@ uci-static: cli.o libuci.a
 
 ucimap.c: ucimap.h uci.h
 
-libuci.a: libuci.static.o ucimap.static.o file.static.o
+libuci.a: $(patsubst %.c,%.static.o, $(SOURCES))
        rm -f $@
        $(AR) rc $@ $^
        $(RANLIB) $@
 
-libuci.$(SHLIB_EXT): libuci.shared.o file.shared.o ucimap.shared.o
+libuci.$(SHLIB_EXT): $(patsubst %.c,%.shared.o, $(SOURCES))
        $(LINK) $(SHLIB_FLAGS) -o $(SHLIB_FILE) $^ $(LIBS)
        ln -sf $(SHLIB_FILE) $@
 
index 6e9587b9e0fb0e1abc2108980fcb09d272893d3e..5b22ef1c6af2471431601f2f7642d4d8ea4870fb 100644 (file)
--- a/libuci.c
+++ b/libuci.c
@@ -43,7 +43,6 @@ static const char *uci_errstr[] = {
 static void uci_unload_plugin(struct uci_context *ctx, struct uci_plugin *p);
 
 #include "uci_internal.h"
-#include "util.c"
 #include "list.c"
 #include "history.c"
 
diff --git a/list.c b/list.c
index fb9d38a6ad6afaa6d4de3ecfe338cb1e488b3fbe..1a080fa9000d68d4f726e9ae17db5b2301b36bf5 100644 (file)
--- a/list.c
+++ b/list.c
@@ -127,6 +127,22 @@ uci_alloc_list(struct uci_section *s, const char *name)
        return o;
 }
 
+/* Based on an efficient hash function published by D. J. Bernstein */
+static unsigned int djbhash(unsigned int hash, char *str)
+{
+       int len = strlen(str);
+       int i;
+
+       /* initial value */
+       if (hash == ~0)
+               hash = 5381;
+
+       for(i = 0; i < len; i++) {
+               hash = ((hash << 5) + hash) + str[i];
+       }
+       return (hash & 0x7FFFFFFF);
+}
+
 /* fix up an unnamed section, e.g. after adding options to it */
 __private void uci_fixup_section(struct uci_context *ctx, struct uci_section *s)
 {
diff --git a/util.c b/util.c
index d44114d7fa52feeeae92eb177df577763cd11d08..1db33667d041d33278428e578d5685b771b0ee19 100644 (file)
--- a/util.c
+++ b/util.c
@@ -16,6 +16,7 @@
  * This file contains misc utility functions and wrappers to standard
  * functions, which throw exceptions upon failure.
  */
+#define _GNU_SOURCE
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/file.h>
 #include <ctype.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "uci.h"
+#include "uci_internal.h"
 
 __plugin void *uci_malloc(struct uci_context *ctx, size_t size)
 {
@@ -57,22 +63,6 @@ __plugin char *uci_strdup(struct uci_context *ctx, const char *str)
        return ptr;
 }
 
-/* Based on an efficient hash function published by D. J. Bernstein */
-static unsigned int djbhash(unsigned int hash, char *str)
-{
-       int len = strlen(str);
-       int i;
-
-       /* initial value */
-       if (hash == ~0)
-               hash = 5381;
-
-       for(i = 0; i < len; i++) {
-               hash = ((hash << 5) + hash) + str[i];
-       }
-       return (hash & 0x7FFFFFFF);
-}
-
 /*
  * validate strings for names and types, reject special characters
  * for names, only alphanum and _ is allowed (shell compatibility)