summaryrefslogtreecommitdiffstats
path: root/package/eudev
diff options
context:
space:
mode:
authorEric Le Bihan <eric.le.bihan.dev@free.fr>2014-04-02 16:42:25 +0200
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>2014-04-03 21:33:02 +0200
commitbd573ccfbd301b58529b3ce1f8c99940eeb45a1f (patch)
tree21d02c591222b3d772792d31139d0261388b5ece /package/eudev
parentdd7bfc0ca865218c22a358dfab126f5e59b9ccb5 (diff)
eudev: fix redefinition of usec_t and nsec_t.
usec_t and nsec_t are defined twice (src/libudev/{util.h,path-util.h}). This raises an error when using GCC 4.5, but not with later versions! This patch fixes the issue by gathering the time-related functions and definitions to time-util.[ch], as in upstream systemd. This patch has been sent to upstream. Fixes http://autobuild.buildroot.net/results/060/0605f279abfdfc837f6973f2898ed7ee39f2b8d1/ Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Diffstat (limited to 'package/eudev')
-rw-r--r--package/eudev/eudev-0002-libudev-Fix-redefinition-of-usec_t-and-nsec_t.patch526
1 files changed, 526 insertions, 0 deletions
diff --git a/package/eudev/eudev-0002-libudev-Fix-redefinition-of-usec_t-and-nsec_t.patch b/package/eudev/eudev-0002-libudev-Fix-redefinition-of-usec_t-and-nsec_t.patch
new file mode 100644
index 000000000..e53b2c34c
--- /dev/null
+++ b/package/eudev/eudev-0002-libudev-Fix-redefinition-of-usec_t-and-nsec_t.patch
@@ -0,0 +1,526 @@
+From dc1aabc85f1ceda5799fe39225fa76f2f77354ea Mon Sep 17 00:00:00 2001
+From: Eric Le Bihan <eric.le.bihan.dev@free.fr>
+Date: Wed, 2 Apr 2014 11:51:40 +0200
+Subject: [PATCH] libudev: Fix redefinition of usec_t and nsec_t.
+
+The type definitions usec_t and nsec_t are defined twice: in
+path-util.h and util.h.
+
+time-util.h and time-util.c now gather the time-related functions and
+definitions (as in upstream systemd).
+
+Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
+---
+ src/libudev/Makefile.am | 2 +
+ src/libudev/libudev-private.h | 1 +
+ src/libudev/log.c | 1 +
+ src/libudev/path-util.h | 4 +-
+ src/libudev/time-util.c | 157 +++++++++++++++++++++++++++++++++++++++++
+ src/libudev/time-util.h | 56 +++++++++++++++
+ src/libudev/util.c | 132 +---------------------------------
+ src/libudev/util.h | 39 ----------
+ 8 files changed, 219 insertions(+), 173 deletions(-)
+ create mode 100644 src/libudev/time-util.c
+ create mode 100644 src/libudev/time-util.h
+
+diff --git a/src/libudev/Makefile.am b/src/libudev/Makefile.am
+index 84d018a..683407a 100644
+--- a/src/libudev/Makefile.am
++++ b/src/libudev/Makefile.am
+@@ -47,6 +47,7 @@ libudev_la_SOURCES =\
+ strbuf.c \
+ strv.c \
+ strxcpyx.c \
++ time-util.c \
+ util.c \
+ utf8.c
+
+@@ -73,6 +74,7 @@ noinst_HEADERS = \
+ strbuf.h \
+ strv.h \
+ strxcpyx.h \
++ time-util.h \
+ util.h \
+ utf8.h
+
+diff --git a/src/libudev/libudev-private.h b/src/libudev/libudev-private.h
+index af0f125..511ec5e 100644
+--- a/src/libudev/libudev-private.h
++++ b/src/libudev/libudev-private.h
+@@ -27,6 +27,7 @@
+
+ #include "libudev.h"
+ #include "macro.h"
++#include "time-util.h"
+ #include "util.h"
+ #include "mkdir.h"
+ #include "strxcpyx.h"
+diff --git a/src/libudev/log.c b/src/libudev/log.c
+index 73bba69..a4e1bce 100644
+--- a/src/libudev/log.c
++++ b/src/libudev/log.c
+@@ -30,6 +30,7 @@
+ #include <string.h>
+
+ #include "log.h"
++#include "time-util.h"
+ #include "util.h"
+ #include "missing.h"
+ #include "macro.h"
+diff --git a/src/libudev/path-util.h b/src/libudev/path-util.h
+index eea7589..8e55131 100644
+--- a/src/libudev/path-util.h
++++ b/src/libudev/path-util.h
+@@ -18,10 +18,8 @@
+ ***/
+
+ #include <stdbool.h>
+-#include <inttypes.h>
+
+-typedef uint64_t usec_t;
+-typedef uint64_t nsec_t;
++#include "time-util.h"
+
+ char* path_get_file_name(const char *p) _pure_;
+ int path_get_parent(const char *path, char **parent);
+diff --git a/src/libudev/time-util.c b/src/libudev/time-util.c
+new file mode 100644
+index 0000000..f6c24e3
+--- /dev/null
++++ b/src/libudev/time-util.c
+@@ -0,0 +1,157 @@
++/***
++ This file is part of eudev, forked from systemd.
++
++ Copyright 2010 Lennart Poettering
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <stdbool.h>
++#include <time.h>
++
++#include "time-util.h"
++#include "macro.h"
++
++usec_t now(clockid_t clock_id) {
++ struct timespec ts;
++
++ assert_se(clock_gettime(clock_id, &ts) == 0);
++
++ return timespec_load(&ts);
++}
++
++usec_t timespec_load(const struct timespec *ts) {
++ assert(ts);
++
++ if (ts->tv_sec == (time_t) -1 &&
++ ts->tv_nsec == (long) -1)
++ return (usec_t) -1;
++
++ if ((usec_t) ts->tv_sec > (UINT64_MAX - (ts->tv_nsec / NSEC_PER_USEC)) / USEC_PER_SEC)
++ return (usec_t) -1;
++
++ return
++ (usec_t) ts->tv_sec * USEC_PER_SEC +
++ (usec_t) ts->tv_nsec / NSEC_PER_USEC;
++}
++
++char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) {
++ static const struct {
++ const char *suffix;
++ usec_t usec;
++ } table[] = {
++ { "y", USEC_PER_YEAR },
++ { "month", USEC_PER_MONTH },
++ { "w", USEC_PER_WEEK },
++ { "d", USEC_PER_DAY },
++ { "h", USEC_PER_HOUR },
++ { "min", USEC_PER_MINUTE },
++ { "s", USEC_PER_SEC },
++ { "ms", USEC_PER_MSEC },
++ { "us", 1 },
++ };
++
++ unsigned i;
++ char *p = buf;
++ bool something = false;
++
++ assert(buf);
++ assert(l > 0);
++
++ if (t == (usec_t) -1)
++ return NULL;
++
++ if (t <= 0) {
++ snprintf(p, l, "0");
++ p[l-1] = 0;
++ return p;
++ }
++
++ /* The result of this function can be parsed with parse_sec */
++
++ for (i = 0; i < ELEMENTSOF(table); i++) {
++ int k;
++ size_t n;
++ bool done = false;
++ usec_t a, b;
++
++ if (t <= 0)
++ break;
++
++ if (t < accuracy && something)
++ break;
++
++ if (t < table[i].usec)
++ continue;
++
++ if (l <= 1)
++ break;
++
++ a = t / table[i].usec;
++ b = t % table[i].usec;
++
++ /* Let's see if we should shows this in dot notation */
++ if (t < USEC_PER_MINUTE && b > 0) {
++ usec_t cc;
++ int j;
++
++ j = 0;
++ for (cc = table[i].usec; cc > 1; cc /= 10)
++ j++;
++
++ for (cc = accuracy; cc > 1; cc /= 10) {
++ b /= 10;
++ j--;
++ }
++
++ if (j > 0) {
++ k = snprintf(p, l,
++ "%s%llu.%0*llu%s",
++ p > buf ? " " : "",
++ (unsigned long long) a,
++ j,
++ (unsigned long long) b,
++ table[i].suffix);
++
++ t = 0;
++ done = true;
++ }
++ }
++
++ /* No? Then let's show it normally */
++ if (!done) {
++ k = snprintf(p, l,
++ "%s%llu%s",
++ p > buf ? " " : "",
++ (unsigned long long) a,
++ table[i].suffix);
++
++ t = b;
++ }
++
++ n = MIN((size_t) k, l);
++
++ l -= n;
++ p += n;
++
++ something = true;
++ }
++
++ *p = 0;
++
++ return buf;
++}
++
+diff --git a/src/libudev/time-util.h b/src/libudev/time-util.h
+new file mode 100644
+index 0000000..0f7f696
+--- /dev/null
++++ b/src/libudev/time-util.h
+@@ -0,0 +1,56 @@
++/***
++ This file is part of eudev, forked from systemd.
++
++ Copyright 2010 Lennart Poettering
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#pragma once
++
++#include <inttypes.h>
++
++typedef uint64_t usec_t;
++typedef uint64_t nsec_t;
++
++typedef struct dual_timestamp {
++ usec_t realtime;
++ usec_t monotonic;
++} dual_timestamp;
++
++#define MSEC_PER_SEC 1000ULL
++#define USEC_PER_SEC 1000000ULL
++#define USEC_PER_MSEC 1000ULL
++#define NSEC_PER_SEC 1000000000ULL
++#define NSEC_PER_MSEC 1000000ULL
++#define NSEC_PER_USEC 1000ULL
++
++#define USEC_PER_MINUTE (60ULL*USEC_PER_SEC)
++#define NSEC_PER_MINUTE (60ULL*NSEC_PER_SEC)
++#define USEC_PER_HOUR (60ULL*USEC_PER_MINUTE)
++#define NSEC_PER_HOUR (60ULL*NSEC_PER_MINUTE)
++#define USEC_PER_DAY (24ULL*USEC_PER_HOUR)
++#define NSEC_PER_DAY (24ULL*NSEC_PER_HOUR)
++#define USEC_PER_WEEK (7ULL*USEC_PER_DAY)
++#define NSEC_PER_WEEK (7ULL*NSEC_PER_DAY)
++#define USEC_PER_MONTH (2629800ULL*USEC_PER_SEC)
++#define NSEC_PER_MONTH (2629800ULL*NSEC_PER_SEC)
++#define USEC_PER_YEAR (31557600ULL*USEC_PER_SEC)
++#define NSEC_PER_YEAR (31557600ULL*NSEC_PER_SEC)
++
++#define FORMAT_TIMESPAN_MAX 64
++
++usec_t now(clockid_t clock);
++usec_t timespec_load(const struct timespec *ts);
++char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
+diff --git a/src/libudev/util.c b/src/libudev/util.c
+index a0d7cac..4796505 100644
+--- a/src/libudev/util.c
++++ b/src/libudev/util.c
+@@ -102,136 +102,6 @@ bool streq_ptr(const char *a, const char *b) {
+ return false;
+ }
+
+-usec_t now(clockid_t clock_id) {
+- struct timespec ts;
+-
+- assert_se(clock_gettime(clock_id, &ts) == 0);
+-
+- return timespec_load(&ts);
+-}
+-
+-usec_t timespec_load(const struct timespec *ts) {
+- assert(ts);
+-
+- if (ts->tv_sec == (time_t) -1 &&
+- ts->tv_nsec == (long) -1)
+- return (usec_t) -1;
+-
+- if ((usec_t) ts->tv_sec > (UINT64_MAX - (ts->tv_nsec / NSEC_PER_USEC)) / USEC_PER_SEC)
+- return (usec_t) -1;
+-
+- return
+- (usec_t) ts->tv_sec * USEC_PER_SEC +
+- (usec_t) ts->tv_nsec / NSEC_PER_USEC;
+-}
+-
+-char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) {
+- static const struct {
+- const char *suffix;
+- usec_t usec;
+- } table[] = {
+- { "y", USEC_PER_YEAR },
+- { "month", USEC_PER_MONTH },
+- { "w", USEC_PER_WEEK },
+- { "d", USEC_PER_DAY },
+- { "h", USEC_PER_HOUR },
+- { "min", USEC_PER_MINUTE },
+- { "s", USEC_PER_SEC },
+- { "ms", USEC_PER_MSEC },
+- { "us", 1 },
+- };
+-
+- unsigned i;
+- char *p = buf;
+- bool something = false;
+-
+- assert(buf);
+- assert(l > 0);
+-
+- if (t == (usec_t) -1)
+- return NULL;
+-
+- if (t <= 0) {
+- snprintf(p, l, "0");
+- p[l-1] = 0;
+- return p;
+- }
+-
+- /* The result of this function can be parsed with parse_sec */
+-
+- for (i = 0; i < ELEMENTSOF(table); i++) {
+- int k;
+- size_t n;
+- bool done = false;
+- usec_t a, b;
+-
+- if (t <= 0)
+- break;
+-
+- if (t < accuracy && something)
+- break;
+-
+- if (t < table[i].usec)
+- continue;
+-
+- if (l <= 1)
+- break;
+-
+- a = t / table[i].usec;
+- b = t % table[i].usec;
+-
+- /* Let's see if we should shows this in dot notation */
+- if (t < USEC_PER_MINUTE && b > 0) {
+- usec_t cc;
+- int j;
+-
+- j = 0;
+- for (cc = table[i].usec; cc > 1; cc /= 10)
+- j++;
+-
+- for (cc = accuracy; cc > 1; cc /= 10) {
+- b /= 10;
+- j--;
+- }
+-
+- if (j > 0) {
+- k = snprintf(p, l,
+- "%s%llu.%0*llu%s",
+- p > buf ? " " : "",
+- (unsigned long long) a,
+- j,
+- (unsigned long long) b,
+- table[i].suffix);
+-
+- t = 0;
+- done = true;
+- }
+- }
+-
+- /* No? Then let's show it normally */
+- if (!done) {
+- k = snprintf(p, l,
+- "%s%llu%s",
+- p > buf ? " " : "",
+- (unsigned long long) a,
+- table[i].suffix);
+-
+- t = b;
+- }
+-
+- n = MIN((size_t) k, l);
+-
+- l -= n;
+- p += n;
+-
+- something = true;
+- }
+-
+- *p = 0;
+-
+- return buf;
+-}
+-
+ char* endswith(const char *s, const char *postfix) {
+ size_t sl, pl;
+
+@@ -826,7 +696,7 @@ int execute_command(const char *command, char *const argv[])
+ } else
+ log_debug("%s exited successfully.", command);
+
+- return si.si_status;
++ return si.si_status;
+
+ }
+ }
+diff --git a/src/libudev/util.h b/src/libudev/util.h
+index 33e9efb..6510237 100644
+--- a/src/libudev/util.h
++++ b/src/libudev/util.h
+@@ -33,47 +33,12 @@
+
+ #include "macro.h"
+
+-/* Note: the time definitions are from upstream's
+- * src/shared/time-util.h which I have put here
+- * for now. We may need to beak these out later.
+- * <blueness@gentoo.org>
+- */
+-typedef uint64_t usec_t;
+-typedef uint64_t nsec_t;
+-
+-typedef struct dual_timestamp {
+- usec_t realtime;
+- usec_t monotonic;
+-} dual_timestamp;
+-
+ union dirent_storage {
+ struct dirent de;
+ uint8_t storage[offsetof(struct dirent, d_name) +
+ ((NAME_MAX + 1 + sizeof(long)) & ~(sizeof(long) - 1))];
+ };
+
+-#define MSEC_PER_SEC 1000ULL
+-#define USEC_PER_SEC 1000000ULL
+-#define USEC_PER_MSEC 1000ULL
+-#define NSEC_PER_SEC 1000000000ULL
+-#define NSEC_PER_MSEC 1000000ULL
+-#define NSEC_PER_USEC 1000ULL
+-
+-#define USEC_PER_MINUTE (60ULL*USEC_PER_SEC)
+-#define NSEC_PER_MINUTE (60ULL*NSEC_PER_SEC)
+-#define USEC_PER_HOUR (60ULL*USEC_PER_MINUTE)
+-#define NSEC_PER_HOUR (60ULL*NSEC_PER_MINUTE)
+-#define USEC_PER_DAY (24ULL*USEC_PER_HOUR)
+-#define NSEC_PER_DAY (24ULL*NSEC_PER_HOUR)
+-#define USEC_PER_WEEK (7ULL*USEC_PER_DAY)
+-#define NSEC_PER_WEEK (7ULL*NSEC_PER_DAY)
+-#define USEC_PER_MONTH (2629800ULL*USEC_PER_SEC)
+-#define NSEC_PER_MONTH (2629800ULL*NSEC_PER_SEC)
+-#define USEC_PER_YEAR (31557600ULL*USEC_PER_SEC)
+-#define NSEC_PER_YEAR (31557600ULL*NSEC_PER_SEC)
+-
+-#define FORMAT_TIMESPAN_MAX 64
+-
+ /* What is interpreted as whitespace? */
+ #define WHITESPACE " \t\n\r"
+ #define NEWLINE "\n\r"
+@@ -93,10 +58,6 @@ union dirent_storage {
+ #define ANSI_HIGHLIGHT_OFF "\x1B[0m"
+ #define ANSI_ERASE_TO_END_OF_LINE "\x1B[K"
+
+-usec_t now(clockid_t clock);
+-usec_t timespec_load(const struct timespec *ts);
+-char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
+-
+ size_t page_size(void);
+ #define PAGE_ALIGN(l) ALIGN_TO((l), page_size())
+
+--
+1.7.9.5
+