mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2025-12-17 07:45:47 +01:00
libldb: Fix build with glibc 2.43
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
parent
f2fa2dc3cf
commit
844f1213d2
|
|
@ -0,0 +1,248 @@
|
||||||
|
C23 introduced memset_explicit with the same parameters as
|
||||||
|
memset (3 args). New glibc implements it, so the symbol now
|
||||||
|
exists in the global namespace with that prototype, causing
|
||||||
|
“too many arguments” when your code passes 4 args.
|
||||||
|
|
||||||
|
Provide a compatibility macro to address the problem
|
||||||
|
|
||||||
|
Upstream-Status: Pending
|
||||||
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||||
|
--- a/lib/replace/replace.c
|
||||||
|
+++ b/lib/replace/replace.c
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-/*
|
||||||
|
+/*
|
||||||
|
Unix SMB/CIFS implementation.
|
||||||
|
replacement routines for broken systems
|
||||||
|
Copyright (C) Andrew Tridgell 1992-1998
|
||||||
|
@@ -8,7 +8,7 @@
|
||||||
|
** NOTE! The following LGPL license applies to the replace
|
||||||
|
** library. This does NOT imply that all of Samba is released
|
||||||
|
** under the LGPL
|
||||||
|
-
|
||||||
|
+
|
||||||
|
This library 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
|
||||||
|
@@ -44,6 +44,18 @@
|
||||||
|
void replace_dummy(void);
|
||||||
|
void replace_dummy(void) {}
|
||||||
|
|
||||||
|
+#if defined(HAVE_MEMSET_EXPLICIT)
|
||||||
|
+# define LDB_MEMSET_EXPLICIT(dest, destsz, ch, n) memset_explicit((dest),(ch),(n))
|
||||||
|
+#elif defined(HAVE_MEMSET_S)
|
||||||
|
+# define LDB_MEMSET_EXPLICIT(dest, destsz, ch, n) memset_s((dest),(destsz),(ch),(n))
|
||||||
|
+#else
|
||||||
|
+# define LDB_MEMSET_EXPLICIT(dest, destsz, ch, n) do { \
|
||||||
|
+ volatile unsigned char *p = (volatile unsigned char*)(dest); \
|
||||||
|
+ size_t _N = (n); unsigned char _CH = (unsigned char)(ch); \
|
||||||
|
+ for (size_t _i = 0; _i < _N; ++_i) p[_i] = _CH; \
|
||||||
|
+ } while (0)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#ifndef HAVE_FTRUNCATE
|
||||||
|
/*******************************************************************
|
||||||
|
ftruncate for operating systems that don't have it
|
||||||
|
@@ -91,7 +103,7 @@ size_t rep_strlcpy(char *d, const char *
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRLCAT
|
||||||
|
-/* like strncat but does not 0 fill the buffer and always null
|
||||||
|
+/* like strncat but does not 0 fill the buffer and always null
|
||||||
|
terminates. bufsize is the length of the buffer, which should
|
||||||
|
be one more than the maximum resulting string length */
|
||||||
|
size_t rep_strlcat(char *d, const char *s, size_t bufsize)
|
||||||
|
@@ -116,7 +128,7 @@ size_t rep_strlcat(char *d, const char *
|
||||||
|
|
||||||
|
#ifndef HAVE_MKTIME
|
||||||
|
/*******************************************************************
|
||||||
|
-a mktime() replacement for those who don't have it - contributed by
|
||||||
|
+a mktime() replacement for those who don't have it - contributed by
|
||||||
|
C.A. Lademann <cal@zls.com>
|
||||||
|
Corrections by richard.kettlewell@kewill.com
|
||||||
|
********************************************************************/
|
||||||
|
@@ -137,7 +149,7 @@ time_t rep_mktime(struct tm *t)
|
||||||
|
return((time_t)-1);
|
||||||
|
|
||||||
|
n = t->tm_year + 1900 - 1;
|
||||||
|
- epoch = (t->tm_year - 70) * YEAR +
|
||||||
|
+ epoch = (t->tm_year - 70) * YEAR +
|
||||||
|
((n / 4 - n / 100 + n / 400) - (1969 / 4 - 1969 / 100 + 1969 / 400)) * DAY;
|
||||||
|
|
||||||
|
y = t->tm_year + 1900;
|
||||||
|
@@ -147,7 +159,7 @@ time_t rep_mktime(struct tm *t)
|
||||||
|
epoch += mon [m] * DAY;
|
||||||
|
if(m == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0))
|
||||||
|
epoch += DAY;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
if(++m > 11) {
|
||||||
|
m = 0;
|
||||||
|
y++;
|
||||||
|
@@ -156,7 +168,7 @@ time_t rep_mktime(struct tm *t)
|
||||||
|
|
||||||
|
epoch += (t->tm_mday - 1) * DAY;
|
||||||
|
epoch += t->tm_hour * HOUR + t->tm_min * MINUTE + t->tm_sec;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
if((u = localtime(&epoch)) != NULL) {
|
||||||
|
t->tm_sec = u->tm_sec;
|
||||||
|
t->tm_min = u->tm_min;
|
||||||
|
@@ -176,7 +188,7 @@ time_t rep_mktime(struct tm *t)
|
||||||
|
|
||||||
|
#ifndef HAVE_INITGROUPS
|
||||||
|
/****************************************************************************
|
||||||
|
- some systems don't have an initgroups call
|
||||||
|
+ some systems don't have an initgroups call
|
||||||
|
****************************************************************************/
|
||||||
|
int rep_initgroups(char *name, gid_t id)
|
||||||
|
{
|
||||||
|
@@ -194,7 +206,7 @@ int rep_initgroups(char *name, gid_t id)
|
||||||
|
int i,j;
|
||||||
|
struct group *g;
|
||||||
|
char *gr;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
if((grouplst = malloc(sizeof(gid_t) * max_gr)) == NULL) {
|
||||||
|
errno = ENOMEM;
|
||||||
|
return -1;
|
||||||
|
@@ -250,9 +262,9 @@ void *rep_memmove(void *dest,const void
|
||||||
|
|
||||||
|
if (d < s) {
|
||||||
|
/* we can forward copy */
|
||||||
|
- if (s-d >= sizeof(int) &&
|
||||||
|
- !(s%sizeof(int)) &&
|
||||||
|
- !(d%sizeof(int)) &&
|
||||||
|
+ if (s-d >= sizeof(int) &&
|
||||||
|
+ !(s%sizeof(int)) &&
|
||||||
|
+ !(d%sizeof(int)) &&
|
||||||
|
!(size%sizeof(int))) {
|
||||||
|
/* do it all as words */
|
||||||
|
int *idest = (int *)dest;
|
||||||
|
@@ -267,9 +279,9 @@ void *rep_memmove(void *dest,const void
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* must backward copy */
|
||||||
|
- if (d-s >= sizeof(int) &&
|
||||||
|
- !(s%sizeof(int)) &&
|
||||||
|
- !(d%sizeof(int)) &&
|
||||||
|
+ if (d-s >= sizeof(int) &&
|
||||||
|
+ !(s%sizeof(int)) &&
|
||||||
|
+ !(d%sizeof(int)) &&
|
||||||
|
!(size%sizeof(int))) {
|
||||||
|
/* do it all as words */
|
||||||
|
int *idest = (int *)dest;
|
||||||
|
@@ -281,7 +293,7 @@ void *rep_memmove(void *dest,const void
|
||||||
|
char *cdest = (char *)dest;
|
||||||
|
char *csrc = (char *)src;
|
||||||
|
for (i=size-1;i>=0;i--) cdest[i] = csrc[i];
|
||||||
|
- }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
return(dest);
|
||||||
|
}
|
||||||
|
@@ -334,16 +346,16 @@ void rep_vsyslog (int facility_priority,
|
||||||
|
size_t rep_strnlen(const char *s, size_t max)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
for (len = 0; len < max; len++) {
|
||||||
|
if (s[len] == '\0') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- return len;
|
||||||
|
+ return len;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
-
|
||||||
|
+
|
||||||
|
#ifndef HAVE_STRNDUP
|
||||||
|
/**
|
||||||
|
Some platforms don't have strndup.
|
||||||
|
@@ -351,7 +363,7 @@ void rep_vsyslog (int facility_priority,
|
||||||
|
char *rep_strndup(const char *s, size_t n)
|
||||||
|
{
|
||||||
|
char *ret;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
n = strnlen(s, n);
|
||||||
|
ret = malloc(n+1);
|
||||||
|
if (!ret)
|
||||||
|
@@ -407,7 +419,7 @@ int rep_chroot(const char *dname)
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
Possibly replace mkstemp if it is broken.
|
||||||
|
-*****************************************************************/
|
||||||
|
+*****************************************************************/
|
||||||
|
|
||||||
|
#ifndef HAVE_SECURE_MKSTEMP
|
||||||
|
int rep_mkstemp(char *template)
|
||||||
|
@@ -425,7 +437,7 @@ int rep_mkstemp(char *template)
|
||||||
|
char *rep_mkdtemp(char *template)
|
||||||
|
{
|
||||||
|
char *dname;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
if ((dname = mktemp(template))) {
|
||||||
|
if (mkdir(dname, 0700) >= 0) {
|
||||||
|
return dname;
|
||||||
|
@@ -532,7 +544,7 @@ long long int rep_strtoll(const char *st
|
||||||
|
{
|
||||||
|
#ifdef HAVE_STRTOQ
|
||||||
|
return strtoq(str, endptr, base);
|
||||||
|
-#elif defined(HAVE___STRTOLL)
|
||||||
|
+#elif defined(HAVE___STRTOLL)
|
||||||
|
return __strtoll(str, endptr, base);
|
||||||
|
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
|
||||||
|
return (long long int) strtol(str, endptr, base);
|
||||||
|
@@ -568,7 +580,7 @@ unsigned long long int rep_strtoull(cons
|
||||||
|
{
|
||||||
|
#ifdef HAVE_STRTOUQ
|
||||||
|
return strtouq(str, endptr, base);
|
||||||
|
-#elif defined(HAVE___STRTOULL)
|
||||||
|
+#elif defined(HAVE___STRTOULL)
|
||||||
|
return __strtoull(str, endptr, base);
|
||||||
|
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
|
||||||
|
return (unsigned long long int) strtoul(str, endptr, base);
|
||||||
|
@@ -599,7 +611,7 @@ unsigned long long int rep_strtoull(cons
|
||||||
|
#endif /* HAVE_STRTOULL */
|
||||||
|
|
||||||
|
#ifndef HAVE_SETENV
|
||||||
|
-int rep_setenv(const char *name, const char *value, int overwrite)
|
||||||
|
+int rep_setenv(const char *name, const char *value, int overwrite)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
size_t l1, l2;
|
||||||
|
@@ -644,10 +656,10 @@ int rep_unsetenv(const char *name)
|
||||||
|
for (i=0;environ[i];i++) /* noop */ ;
|
||||||
|
|
||||||
|
count=i;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
for (i=0;i<count;) {
|
||||||
|
if (strncmp(environ[i], name, len) == 0 && environ[i][len] == '=') {
|
||||||
|
- /* note: we do _not_ free the old variable here. It is unsafe to
|
||||||
|
+ /* note: we do _not_ free the old variable here. It is unsafe to
|
||||||
|
do so, as the pointer may not have come from malloc */
|
||||||
|
memmove(&environ[i], &environ[i+1], (count-i)*sizeof(char *));
|
||||||
|
count--;
|
||||||
|
@@ -688,7 +700,7 @@ int rep_utimes(const char *filename, con
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_DUP2
|
||||||
|
-int rep_dup2(int oldfd, int newfd)
|
||||||
|
+int rep_dup2(int oldfd, int newfd)
|
||||||
|
{
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
@@ -970,7 +982,7 @@ int rep_memset_s(void *dest, size_t dest
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_MEMSET_EXPLICIT)
|
||||||
|
- memset_explicit(dest, destsz, ch, count);
|
||||||
|
+ LDB_MEMSET_EXPLICIT(dest, destsz, ch, count);
|
||||||
|
#else /* HAVE_MEMSET_EXPLICIT */
|
||||||
|
memset(dest, ch, count);
|
||||||
|
# if defined(HAVE_GCC_VOLATILE_MEMORY_PROTECTION)
|
||||||
|
|
@ -13,6 +13,7 @@ SRC_URI = "https://samba.org/ftp/ldb/ldb-${PV}.tar.gz \
|
||||||
file://0001-do-not-import-target-module-while-cross-compile.patch \
|
file://0001-do-not-import-target-module-while-cross-compile.patch \
|
||||||
file://0002-ldb-Add-configure-options-for-packages.patch \
|
file://0002-ldb-Add-configure-options-for-packages.patch \
|
||||||
file://0003-Fix-pyext_PATTERN-for-cross-compilation.patch \
|
file://0003-Fix-pyext_PATTERN-for-cross-compilation.patch \
|
||||||
|
file://c23_memset_explicit.patch \
|
||||||
file://run-ptest \
|
file://run-ptest \
|
||||||
"
|
"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user