PUD: introduce getNodeIdAsNumber
authorFerry Huberts <f.huberts@mindef.nl>
Tue, 12 Jul 2011 11:39:39 +0000 (13:39 +0200)
committerFerry Huberts <f.huberts@mindef.nl>
Wed, 13 Jul 2011 10:54:16 +0000 (12:54 +0200)
Signed-off-by: Ferry Huberts <f.huberts@mindef.nl>
lib/pud/src/configuration.c
lib/pud/src/configuration.h
lib/pud/src/nodeIdConversion.c

index 37f9e94..1231320 100644 (file)
@@ -40,7 +40,7 @@
  - true on success
  - false otherwise
  */
-bool readULL(const char * valueName, const char * value,
+static bool readULL(const char * valueName, const char * value,
                unsigned long long * valueNumber) {
        char * endPtr = NULL;
        unsigned long long valueNew;
@@ -74,7 +74,7 @@ bool readULL(const char * valueName, const char * value,
  - true on success
  - false otherwise
  */
-bool readDouble(const char * valueName, const char * value,
+static bool readDouble(const char * valueName, const char * value,
                double * valueNumber) {
        char * endPtr = NULL;
        double valueNew;
@@ -179,6 +179,12 @@ static size_t nodeIdLength = 0;
 /** True when the nodeId is set */
 static bool nodeIdSet = false;
 
+/** The nodeId as a nuber */
+static unsigned long long nodeIdNumber = 0;
+
+/** True when the nodeIdNumber is set */
+static bool nodeIdNumberSet = false;
+
 /**
  @return
  The node ID
@@ -187,6 +193,24 @@ unsigned char * getNodeId(void) {
        return getNodeIdWithLength(NULL);
 }
 
+/**
+ @param nodeId
+ A pointer to the node ID number
+ @return
+ - true on success
+ - false otherwise
+ */
+bool getNodeIdAsNumber(unsigned long long * value) {
+       if (!nodeIdNumberSet) {
+               if (!readULL(PUD_NODE_ID_NAME, (char *) &nodeId[0], &nodeIdNumber)) {
+                       return false;
+               }
+               nodeIdNumberSet = true;
+       }
+       *value = nodeIdNumber;
+       return true;
+}
+
 /**
  Get the nodeId and its length
 
index a61fe36..ee1eb50 100644 (file)
 #include <stdbool.h>
 #include <sys/socket.h>
 
-/*
- * Utility Functions
- */
-
-bool readULL(const char * valueName, const char * value,
-               unsigned long long * valueNumber);
-
-bool readDouble(const char * valueName, const char * value,
-               double * valueNumber);
-
 /*
  * Global Parameters
  */
@@ -42,6 +32,7 @@ int setNodeIdType(const char *value, void *data,
 #define PUD_NODE_ID_NAME                                               "nodeId"
 
 unsigned char * getNodeId(void);
+bool getNodeIdAsNumber(unsigned long long * value);
 unsigned char * getNodeIdWithLength(size_t *length);
 int setNodeId(const char *value, void *data, set_plugin_parameter_addon addon);
 
index 5644b22..2205580 100644 (file)
@@ -49,7 +49,7 @@ static bool setupNodeIdNumberForOlsr(unsigned long long min,
 
        assert (bytes <= PUD_CACHED_NODEID_BUFFER_SIZE);
 
-       if (!readULL(PUD_NODE_ID_NAME, (char *) getNodeId(), &val)) {
+       if (!getNodeIdAsNumber(&val)) {
                return false;
        }