diff options
author | Rob Landley <rob@landley.net> | 2019-02-13 20:00:53 -0600 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2019-02-13 20:00:53 -0600 |
commit | 7e6a7da60042dbf033cc3136877a2862bf825bd1 (patch) | |
tree | 24f98032c51c97237c51d3af6e36580758a15a50 /lib/lib.c | |
parent | fbedc9dd74aeb0331202f9e503316960e32fa879 (diff) | |
download | toybox-7e6a7da60042dbf033cc3136877a2862bf825bd1.tar.gz |
Move nanomove(), nanodiff(), union socksaddr, and xrecvwait() to lib.
Diffstat (limited to 'lib/lib.c')
-rw-r--r-- | lib/lib.c | 26 |
1 files changed, 22 insertions, 4 deletions
@@ -248,7 +248,7 @@ struct string_list *find_in_path(char *path, char *filename) cwd = xgetcwd(); for (;;) { - char *next = strchr(path, ':'); + char *res, *next = strchr(path, ':'); int len = next ? next-path : strlen(path); struct string_list *rnext; struct stat st; @@ -257,9 +257,7 @@ struct string_list *find_in_path(char *path, char *filename) + (len ? len : strlen(cwd)) + 2); if (!len) sprintf(rnext->str, "%s/%s", cwd, filename); else { - char *res = rnext->str; - - memcpy(res, path, len); + memcpy(res = rnext->str, path, len); res += len; *(res++) = '/'; strcpy(res, filename); @@ -553,6 +551,26 @@ void msleep(long miliseconds) nanosleep(&ts, &ts); } +// Adjust timespec by nanosecond offset +void nanomove(struct timespec *ts, long long offset) +{ + long long nano = ts->tv_nsec + offset, secs = nano/1000000000; + + ts->tv_sec += secs; + nano %= 1000000000; + if (nano<0) { + ts->tv_sec--; + nano += 1000000000; + } + ts->tv_nsec = nano; +} + +// return difference between two timespecs in nanosecs +long long nanodiff(struct timespec *old, struct timespec *new) +{ + return (new->tv_sec - old->tv_sec)*1000000000LL+(new->tv_nsec - old->tv_nsec); +} + // return 1<<x of highest bit set int highest_bit(unsigned long l) { |