summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2016-01-28 20:06:46 +0100
committerSteven Barth <steven@midlink.org>2016-01-28 20:06:46 +0100
commit51541450f9970075f2e8a7d6112336e1cf93ab10 (patch)
tree60c9bb30db4d27cdb0a29599e653bb4661d3dbc3
parent23aa0c218808361c1252b73a8ba82a91ac9039e7 (diff)
parentd277ddb78abd034eb0e1c088ac969cdeef10d9e2 (diff)
downloadodhcp6c-51541450f9970075f2e8a7d6112336e1cf93ab10.tar.gz
Merge pull request #42 from bwhacks/logic-fixes
Logic fixes
-rw-r--r--src/odhcp6c.c8
-rw-r--r--src/script.c16
2 files changed, 18 insertions, 6 deletions
diff --git a/src/odhcp6c.c b/src/odhcp6c.c
index 1714d62..59f6390 100644
--- a/src/odhcp6c.c
+++ b/src/odhcp6c.c
@@ -619,7 +619,7 @@ static void odhcp6c_expire_list(enum odhcp6c_state state, uint32_t elapsed)
uint8_t *start = odhcp6c_get_state(state, &len);
for (struct odhcp6c_entry *c = (struct odhcp6c_entry*)start;
(uint8_t*)c < &start[len] && &c->auxtarget[c->auxlen] <= &start[len];
- c = (struct odhcp6c_entry*)(&c->auxtarget[c->auxlen])) {
+ ) {
if (c->t1 < elapsed)
c->t1 = 0;
else if (c->t1 != UINT32_MAX)
@@ -640,8 +640,12 @@ static void odhcp6c_expire_list(enum odhcp6c_state state, uint32_t elapsed)
else if (c->valid != UINT32_MAX)
c->valid -= elapsed;
- if (!c->valid)
+ if (!c->valid) {
odhcp6c_remove_state(state, ((uint8_t*)c) - start, sizeof(*c) + c->auxlen);
+ start = odhcp6c_get_state(state, &len);
+ } else {
+ c = (struct odhcp6c_entry*)(&c->auxtarget[c->auxlen]);
+ }
}
}
diff --git a/src/script.c b/src/script.c
index 3579331..1533510 100644
--- a/src/script.c
+++ b/src/script.c
@@ -105,7 +105,9 @@ static void ipv6_to_env(const char *name,
buf_len += strlen(&buf[buf_len]);
buf[buf_len++] = ' ';
}
- buf[buf_len - 1] = '\0';
+ if (buf[buf_len - 1] == ' ')
+ buf_len--;
+ buf[buf_len] = '\0';
putenv(buf);
}
@@ -126,7 +128,9 @@ static void fqdn_to_env(const char *name, const uint8_t *fqdn, size_t len)
buf_len += strlen(&buf[buf_len]);
buf[buf_len++] = ' ';
}
- buf[buf_len - 1] = '\0';
+ if (buf[buf_len - 1] == ' ')
+ buf_len--;
+ buf[buf_len] = '\0';
putenv(buf);
}
@@ -201,7 +205,9 @@ static void entry_to_env(const char *name, const void *data, size_t len, enum en
buf[buf_len++] = ' ';
}
- buf[buf_len - 1] = '\0';
+ if (buf[buf_len - 1] == ' ')
+ buf_len--;
+ buf[buf_len] = '\0';
putenv(buf);
}
@@ -220,7 +226,9 @@ static void search_to_env(const char *name, const uint8_t *start, size_t len)
*c++ = ' ';
}
- c[-1] = '\0';
+ if (c[-1] == ' ')
+ c--;
+ *c = '\0';
putenv(buf);
}