mirror of
https://github.com/samba-team/samba.git
synced 2025-11-26 04:23:49 +03:00
r18031: Merge my replace fixes:
* libreplace can now build stand-alone * add stub testsuite for libreplace * make talloc/tdb/ldb use libreplace
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
cd495d8931
commit
fe7ca4b145
@@ -1,3 +1,6 @@
|
||||
source/lib/ldb/bin
|
||||
*.pc
|
||||
autom4te.cache
|
||||
*.d
|
||||
*.o
|
||||
*.x
|
||||
@@ -42,7 +45,8 @@ source/heimdal/lib/krb5/k524_err.?
|
||||
source/heimdal/lib/krb5/krb5_err.?
|
||||
source/heimdal/lib/roken/vis.h
|
||||
source/include/build.h
|
||||
source/include/config.h
|
||||
config.h
|
||||
config.h.in
|
||||
source/include/config_tmp.h
|
||||
source/include/config_tmp.h.in
|
||||
source/ldap_server/proto.h
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Start MODULE ldb_objectguid
|
||||
[MODULE::ldb_objectguid]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = objectguid_module_init
|
||||
OBJ_FILES = \
|
||||
objectguid.o
|
||||
@@ -14,6 +15,7 @@ PUBLIC_DEPENDENCIES = \
|
||||
# Start MODULE ldb_samldb
|
||||
[MODULE::ldb_samldb]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = samldb_module_init
|
||||
OBJ_FILES = \
|
||||
samldb.o
|
||||
@@ -26,6 +28,7 @@ OBJ_FILES = \
|
||||
[MODULE::ldb_samba3sam]
|
||||
SUBSYSTEM = ldb
|
||||
INIT_FUNCTION = ldb_samba3sam_module_init
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
OBJ_FILES = \
|
||||
samba3sam.o
|
||||
#
|
||||
@@ -37,6 +40,7 @@ OBJ_FILES = \
|
||||
[MODULE::ldb_entryUUID]
|
||||
SUBSYSTEM = ldb
|
||||
INIT_FUNCTION = ldb_entryUUID_module_init
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
ENABLE = YES
|
||||
OBJ_FILES = \
|
||||
entryUUID.o
|
||||
@@ -60,6 +64,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_rootdse
|
||||
[MODULE::ldb_rootdse]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = rootdse_module_init
|
||||
OBJ_FILES = \
|
||||
rootdse.o
|
||||
@@ -74,7 +79,7 @@ SUBSYSTEM = ldb
|
||||
INIT_FUNCTION = password_hash_module_init
|
||||
OBJ_FILES = password_hash.o
|
||||
PUBLIC_DEPENDENCIES = HEIMDAL_KRB5
|
||||
PRIVATE_DEPENDENCIES = HEIMDAL_HDB_KEYS
|
||||
PRIVATE_DEPENDENCIES = HEIMDAL_HDB_KEYS LIBTALLOC
|
||||
#
|
||||
# End MODULE ldb_password_hash
|
||||
################################################
|
||||
@@ -82,6 +87,7 @@ PRIVATE_DEPENDENCIES = HEIMDAL_HDB_KEYS
|
||||
################################################
|
||||
# Start MODULE ldb_local_password
|
||||
[MODULE::ldb_local_password]
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
SUBSYSTEM = ldb
|
||||
INIT_FUNCTION = local_password_module_init
|
||||
OBJ_FILES = local_password.o
|
||||
@@ -92,6 +98,7 @@ OBJ_FILES = local_password.o
|
||||
################################################
|
||||
# Start MODULE ldb_kludge_acl
|
||||
[MODULE::ldb_kludge_acl]
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
SUBSYSTEM = ldb
|
||||
INIT_FUNCTION = ldb_kludge_acl_init
|
||||
OBJ_FILES = \
|
||||
@@ -106,6 +113,7 @@ PUBLIC_DEPENDENCIES = \
|
||||
# Start MODULE ldb_extended_dn
|
||||
[MODULE::ldb_extended_dn]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_extended_dn_init
|
||||
OBJ_FILES = \
|
||||
extended_dn.o
|
||||
@@ -117,6 +125,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_partition
|
||||
[MODULE::ldb_partition]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_partition_init
|
||||
OBJ_FILES = \
|
||||
partition.o
|
||||
@@ -128,6 +137,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_schema
|
||||
[MODULE::ldb_schema]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_schema_init
|
||||
OBJ_FILES = \
|
||||
schema.o schema_syntax.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -262,7 +262,7 @@ find_dynamic_method (krb5_context context,
|
||||
if (prefix == NULL)
|
||||
krb5_errx(context, 1, "out of memory");
|
||||
|
||||
if (asprintf(&path, LIBDIR "/hdb_%s.so", prefix) == -1)
|
||||
if (asprintf(&path, HDBDIR "/hdb_%s.so", prefix) == -1)
|
||||
krb5_errx(context, 1, "out of memory");
|
||||
|
||||
#ifndef RTLD_NOW
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
/* path to sysconf - should we force this to samba LIBDIR ? */
|
||||
#define SYSCONFDIR "/etc"
|
||||
|
||||
/* HDB module dir - set to Samba LIBDIR/hdb ? */
|
||||
#define HDBDIR "/usr/heimdal/lib"
|
||||
|
||||
/* Maximum values on all known systems */
|
||||
#define MaxHostNameLen (64+4)
|
||||
|
||||
@@ -6,6 +6,7 @@ XSLTPROC = @XSLTPROC@
|
||||
DOXYGEN = @DOXYGEN@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
datarootdir = @datarootdir@
|
||||
includedir = @includedir@
|
||||
libdir = @libdir@
|
||||
bindir = @bindir@
|
||||
@@ -21,20 +22,7 @@ CFLAGS=-I$(srcdir)/include -Iinclude -I$(srcdir) -I$(srcdir)/.. \
|
||||
-I$(srcdir)/../tdb/include -I$(srcdir)/../tdb -I$(srcdir)/../talloc \
|
||||
-DLIBDIR=\"$(libdir)\" -DSHLIBEXT=\"@SHLIBEXT@\" -DUSE_MMAP=1 @CFLAGS@
|
||||
|
||||
LIB_FLAGS=-Llib -lldb @LIBS@
|
||||
|
||||
REPDIR=replace
|
||||
REPLACE_OBJ=$(REPDIR)/replace.o $(REPDIR)/timegm.o
|
||||
|
||||
TDBDIR=tdb
|
||||
TDB_OBJ=$(TDBDIR)/common/tdb.o $(TDBDIR)/common/dump.o \
|
||||
$(TDBDIR)/common/io.o $(TDBDIR)/common/lock.o \
|
||||
$(TDBDIR)/common/open.o $(TDBDIR)/common/traverse.o \
|
||||
$(TDBDIR)/common/freelist.o $(TDBDIR)/common/error.o \
|
||||
$(TDBDIR)/common/transaction.o
|
||||
|
||||
TALLOCDIR=talloc
|
||||
TALLOC_OBJ=$(TALLOCDIR)/talloc.o
|
||||
LIB_FLAGS=-L$(srcdir)/../tdb -L$(srcdir)/../talloc -Llib -lldb -ltdb -ltalloc @LIBS@ @REPLACE_LIB@
|
||||
|
||||
LDB_TDB_DIR=ldb_tdb
|
||||
LDB_TDB_OBJ=$(LDB_TDB_DIR)/ldb_tdb.o \
|
||||
@@ -53,7 +41,7 @@ MODULES_OBJ=$(MODDIR)/operational.o $(MODDIR)/schema.o $(MODDIR)/rdn_name.o \
|
||||
$(MODDIR)/objectclass.o \
|
||||
$(MODDIR)/paged_results.o $(MODDIR)/sort.o $(MODDIR)/asq.o
|
||||
|
||||
OBJS = $(MODULES_OBJ) $(COMMON_OBJ) $(LDB_TDB_OBJ) $(TDB_OBJ) $(TALLOC_OBJ) $(EXTRA_OBJ) $(REPLACE_OBJ)
|
||||
OBJS = $(MODULES_OBJ) $(COMMON_OBJ) $(LDB_TDB_OBJ) $(TDB_OBJ) $(TALLOC_OBJ) $(EXTRA_OBJ)
|
||||
|
||||
LDB_LIB = lib/libldb.a
|
||||
|
||||
@@ -63,7 +51,7 @@ LIBS = $(LDB_LIB)
|
||||
|
||||
EXAMPLES = examples/ldbreader examples/ldifreader
|
||||
|
||||
DIRS = lib bin common replace ldb_tdb ldb_ldap ldb_sqlite3 modules tools examples tdb talloc
|
||||
DIRS = lib bin common ldb_tdb ldb_ldap ldb_sqlite3 modules tools examples tdb talloc
|
||||
|
||||
all: dirs $(OBJS) $(LDB_LIB) $(BINS) $(EXAMPLES) manpages
|
||||
|
||||
@@ -159,3 +147,7 @@ etags:
|
||||
|
||||
ctags:
|
||||
ctags `find $(srcdir) -name "*.[ch]"`
|
||||
|
||||
@REPLACE_LIB@:
|
||||
cd @REPLACE_DIR@ && ./autogen.sh && ./configure
|
||||
$(MAKE) -C @REPLACE_DIR@
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -rf autom4te.cache/
|
||||
|
||||
autoheader || exit 1
|
||||
autoconf || exit 1
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
################################################
|
||||
# Start MODULE ldb_asq
|
||||
[MODULE::ldb_asq]
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_asq_init
|
||||
SUBSYSTEM = ldb
|
||||
OBJ_FILES = \
|
||||
@@ -11,6 +12,7 @@ OBJ_FILES = \
|
||||
################################################
|
||||
# Start MODULE ldb_server_sort
|
||||
[MODULE::ldb_server_sort]
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_sort_init
|
||||
SUBSYSTEM = ldb
|
||||
OBJ_FILES = \
|
||||
@@ -22,6 +24,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_paged_results
|
||||
[MODULE::ldb_paged_results]
|
||||
INIT_FUNCTION = ldb_paged_results_init
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
SUBSYSTEM = ldb
|
||||
OBJ_FILES = \
|
||||
modules/paged_results.o
|
||||
@@ -32,6 +35,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_paged_results
|
||||
[MODULE::ldb_paged_searches]
|
||||
INIT_FUNCTION = ldb_paged_searches_init
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
SUBSYSTEM = ldb
|
||||
OBJ_FILES = \
|
||||
modules/paged_searches.o
|
||||
@@ -42,6 +46,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_operational
|
||||
[MODULE::ldb_operational]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_operational_init
|
||||
OBJ_FILES = \
|
||||
modules/operational.o
|
||||
@@ -52,6 +57,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_objectclass
|
||||
[MODULE::ldb_objectclass]
|
||||
INIT_FUNCTION = ldb_objectclass_init
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
SUBSYSTEM = ldb
|
||||
OBJ_FILES = \
|
||||
modules/objectclass.o
|
||||
@@ -62,6 +68,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_rdn_name
|
||||
[MODULE::ldb_rdn_name]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_rdn_name_init
|
||||
OBJ_FILES = \
|
||||
modules/rdn_name.o
|
||||
@@ -82,6 +89,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_ildap
|
||||
[MODULE::ldb_ildap]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_ildap_init
|
||||
ALIASES = ldapi ldaps ldap
|
||||
OBJ_FILES = \
|
||||
@@ -94,6 +102,7 @@ PUBLIC_DEPENDENCIES = \
|
||||
################################################
|
||||
# Start MODULE ldb_map
|
||||
[MODULE::ldb_map]
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
SUBSYSTEM = ldb
|
||||
OBJ_FILES = \
|
||||
modules/ldb_map_inbound.o \
|
||||
@@ -106,6 +115,7 @@ OBJ_FILES = \
|
||||
# Start MODULE ldb_skel
|
||||
[MODULE::ldb_skel]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_skel_init
|
||||
OBJ_FILES = modules/skel.o
|
||||
# End MODULE ldb_skel
|
||||
@@ -115,11 +125,12 @@ OBJ_FILES = modules/skel.o
|
||||
# Start MODULE ldb_sqlite3
|
||||
[MODULE::ldb_sqlite3]
|
||||
SUBSYSTEM = ldb
|
||||
PRIVATE_DEPENDENCIES = LIBTALLOC
|
||||
INIT_FUNCTION = ldb_sqlite3_init
|
||||
OBJ_FILES = \
|
||||
ldb_sqlite3/ldb_sqlite3.o
|
||||
PUBLIC_DEPENDENCIES = \
|
||||
SQLITE3
|
||||
SQLITE3 LIBTALLOC
|
||||
# End MODULE ldb_sqlite3
|
||||
################################################
|
||||
|
||||
@@ -136,23 +147,13 @@ OBJ_FILES = \
|
||||
ldb_tdb/ldb_cache.o \
|
||||
ldb_tdb/ldb_tdb_wrap.o
|
||||
PUBLIC_DEPENDENCIES = \
|
||||
LIBTDB
|
||||
LIBTDB LIBTALLOC
|
||||
# End MODULE ldb_tdb
|
||||
################################################
|
||||
|
||||
################################################
|
||||
# Start MODULE ldb_replace
|
||||
[MODULE::ldb_replace]
|
||||
SUBSYSTEM = ldb
|
||||
OBJ_FILES = \
|
||||
replace/timegm.o \
|
||||
replace/replace.o
|
||||
# End MODULE ldb_replace
|
||||
################################################
|
||||
|
||||
./lib/ldb/common/ldb_modules.o: lib/ldb/common/ldb_modules.c Makefile
|
||||
@echo Compiling $<
|
||||
@$(CC) $(CFLAGS) $(PICFLAG) -DMODULESDIR=\"$(MODULESDIR)/ldb\" -DSHLIBEXT=\"$(SHLIBEXT)\" -c $< -o $@
|
||||
@$(CC) -Iinclude $(CFLAGS) -Ilib/talloc -Ilib/ldb $(PICFLAG) -DLDBMODULESDIR=\"$(MODULESDIR)/ldb\" -DSHLIBEXT=\"$(SHLIBEXT)\" -c $< -o $@
|
||||
|
||||
################################################
|
||||
# Start SUBSYSTEM ldb
|
||||
@@ -186,6 +187,7 @@ PUBLIC_HEADERS = include/ldb.h include/ldb_errors.h
|
||||
################################################
|
||||
# Start SUBSYSTEM LDBSAMBA
|
||||
[SUBSYSTEM::LDBSAMBA]
|
||||
PRIVATE_DEPENDENCIES = ldb
|
||||
PRIVATE_PROTO_HEADER = samba/ldif_handlers.h
|
||||
PUBLIC_DEPENDENCIES = LIBSECURITY SAMDB
|
||||
OBJ_FILES = \
|
||||
|
||||
@@ -70,6 +70,9 @@ fi
|
||||
AC_SUBST(TESTS)
|
||||
AC_SUBST(EXTRA_OBJ)
|
||||
|
||||
sinclude(replace.m4)
|
||||
SMB_REPLACE_FUNCS(strtoll)
|
||||
|
||||
sinclude(config.m4)
|
||||
sinclude(../talloc/config.m4)
|
||||
sinclude(../tdb/config.m4)
|
||||
|
||||
@@ -6,19 +6,19 @@
|
||||
|
||||
#ifdef _SAMBA_BUILD_
|
||||
|
||||
#include "system/filesys.h"
|
||||
#include "system/locale.h"
|
||||
#include "system/time.h"
|
||||
|
||||
/* tell ldb we have the internal ldap code */
|
||||
#define HAVE_ILDAP 1
|
||||
|
||||
#else /*_SAMBA_BUILD_*/
|
||||
#else
|
||||
#include "config.h"
|
||||
#endif /*_SAMBA_BUILD_*/
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include "config.h"
|
||||
#ifdef HAVE_REPLACE_H
|
||||
#include "replace.h"
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
@@ -51,8 +51,6 @@ typedef int (*comparison_fn_t)(const void *, const void *);
|
||||
|
||||
#include "talloc.h"
|
||||
|
||||
#endif /*_SAMBA_BUILD_*/
|
||||
|
||||
#include "ldb.h"
|
||||
#include "ldb_errors.h"
|
||||
#include "ldb_private.h"
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
AC_CHECK_HEADERS([stdint.h inttypes.h])
|
||||
AC_CHECK_TYPE(uint8_t, unsigned char)
|
||||
AC_CHECK_TYPE(int64_t, long long)
|
||||
AC_CHECK_TYPE(uint64_t, unsigned long long)
|
||||
AC_CHECK_TYPE(comparison_fn_t,
|
||||
[AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
|
||||
|
||||
AC_CHECK_FUNCS(strerror timegm strnlen setenv)
|
||||
AC_CHECK_FUNCS(strtoull __strtoull strtouq strtoll __strtoll strtoq)
|
||||
AC_HAVE_DECL(errno, [#include <errno.h>])
|
||||
|
||||
AC_CHECK_HEADERS(strings.h)
|
||||
@@ -1,100 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
replacement routines for broken systems
|
||||
|
||||
Copyright (C) Andrew Tridgell 1992-2006
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "ldb/include/includes.h"
|
||||
|
||||
#if !defined(HAVE_STRNLEN) && !defined(_SAMBA_BUILD_)
|
||||
/**
|
||||
Some platforms don't have strnlen
|
||||
**/
|
||||
size_t strnlen(const char *s, size_t n)
|
||||
{
|
||||
int i;
|
||||
for (i=0; s[i] && i<n; i++)
|
||||
/* noop */ ;
|
||||
return i;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRTOLL
|
||||
long long int strtoll(const char *str, char **endptr, int base)
|
||||
{
|
||||
#ifdef HAVE_STRTOQ
|
||||
return strtoq(str, endptr, base);
|
||||
#elif defined(HAVE___STRTOLL)
|
||||
return __strtoll(str, endptr, base);
|
||||
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
|
||||
return (long long int) strtol(str, endptr, base);
|
||||
#else
|
||||
# error "You need a strtoll function"
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef HAVE_STRTOULL
|
||||
unsigned long long int strtoull(const char *str, char **endptr, int base)
|
||||
{
|
||||
#ifdef HAVE_STRTOUQ
|
||||
return strtouq(str, endptr, base);
|
||||
#elif defined(HAVE___STRTOULL)
|
||||
return __strtoull(str, endptr, base);
|
||||
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
|
||||
return (unsigned long long int) strtoul(str, endptr, base);
|
||||
#else
|
||||
# error "You need a strtoull function"
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SETENV
|
||||
int setenv(const char *name, const char *value, int overwrite)
|
||||
{
|
||||
char *p;
|
||||
size_t l1, l2;
|
||||
int ret;
|
||||
|
||||
if (!overwrite && getenv(name)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
l1 = strlen(name);
|
||||
l2 = strlen(value);
|
||||
|
||||
p = malloc(l1+l2+2);
|
||||
if (p == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(p, name, l1);
|
||||
p[l1] = '=';
|
||||
memcpy(p+l1+1, value, l2);
|
||||
p[l1+l2+1] = 0;
|
||||
|
||||
ret = putenv(p);
|
||||
if (ret != 0) {
|
||||
free(p);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
37
source/lib/replace/Makefile.in
Normal file
37
source/lib/replace/Makefile.in
Normal file
@@ -0,0 +1,37 @@
|
||||
CC = @CC@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
bindir = @bindir@
|
||||
includedir = @includedir@
|
||||
libdir = @libdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
builddir = @builddir@
|
||||
INSTALL = @INSTALL@
|
||||
|
||||
OBJS = dlfcn.o getpass.o replace.o snprintf.o
|
||||
|
||||
all: libreplace.a
|
||||
|
||||
install: all
|
||||
$(INSTALL) libreplace.a $(libdir)
|
||||
|
||||
libreplace.a: $(OBJS)
|
||||
ar -rv $@ $(OBJS)
|
||||
@-ranlib $@
|
||||
|
||||
test: testsuite
|
||||
./testsuite
|
||||
|
||||
TEST_OBJS = test/testsuite.o
|
||||
|
||||
testsuite: libreplace.a $(TEST_OBJS)
|
||||
$(CC) -o testsuite $(TEST_OBJS)
|
||||
|
||||
.c.o:
|
||||
@echo Compiling $*.c
|
||||
@mkdir -p `dirname $@`
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
clean:
|
||||
rm -f *.o
|
||||
@@ -2,10 +2,10 @@ This subsystem ensures that we can always use a certain core set of
|
||||
functions and types, that are either provided by the OS or by replacement
|
||||
functions / definitions in this subsystem. The aim is to try to stick
|
||||
to POSIX functions in here as much as possible. Convenience functions
|
||||
that are available on no platform at all belong in different subsystems
|
||||
that are available on no platform at all belong in other subsystems
|
||||
(such as LIBUTIL).
|
||||
|
||||
The following functions are guarenteed:
|
||||
The following functions are guaranteed:
|
||||
|
||||
ftruncate
|
||||
strlcpy
|
||||
@@ -21,8 +21,6 @@ setlinebuf
|
||||
vsyslog
|
||||
timegm
|
||||
setenv
|
||||
strtoull
|
||||
strtoll
|
||||
strndup
|
||||
strnlen
|
||||
waitpid
|
||||
@@ -52,6 +50,8 @@ pwrite
|
||||
getpass
|
||||
readline (the library)
|
||||
inet_ntoa
|
||||
strtoll
|
||||
strtoull
|
||||
|
||||
Types:
|
||||
bool
|
||||
@@ -59,6 +59,7 @@ socklen_t
|
||||
uint_t
|
||||
uint{8,16,32,64}_t
|
||||
int{8,16,32,64}_t
|
||||
intptr_t
|
||||
|
||||
Constants:
|
||||
PATH_NAME_MAX
|
||||
|
||||
10
source/lib/replace/autogen.sh
Executable file
10
source/lib/replace/autogen.sh
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -rf autom4te.cache
|
||||
|
||||
autoheader || exit 1
|
||||
autoconf || exit 1
|
||||
|
||||
echo "Now run ./configure and then make."
|
||||
exit 0
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
AC_CHECK_HEADERS([stdint.h inttypes.h])
|
||||
AC_CHECK_TYPE(uint_t, unsigned int)
|
||||
AC_CHECK_TYPE(uint8_t, unsigned char)
|
||||
AC_CHECK_TYPE(int8_t, char)
|
||||
AC_CHECK_TYPE(int16_t, short)
|
||||
AC_CHECK_TYPE(uint16_t, unsigned short)
|
||||
AC_CHECK_TYPE(int32_t, long)
|
||||
AC_CHECK_TYPE(intptr_t, unsigned long long)
|
||||
AC_CHECK_TYPE(uint32_t, unsigned long)
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
|
||||
@@ -170,3 +173,18 @@ else
|
||||
fi
|
||||
|
||||
AC_CHECK_HEADERS([sys/param.h limits.h])
|
||||
|
||||
AC_CHECK_TYPE(comparison_fn_t,
|
||||
[AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
|
||||
|
||||
AC_CHECK_FUNCS(timegm strnlen setenv)
|
||||
AC_CHECK_FUNCS(strtoull __strtoull strtouq strtoll __strtoll strtoq)
|
||||
|
||||
AC_TRY_CPP([
|
||||
#define eprintf(...) fprintf(stderr, __VA_ARGS__)
|
||||
eprintf("bla", "bar");
|
||||
], [], [AC_MSG_ERROR([__VA_ARGS__ is required])])
|
||||
|
||||
# Check prerequisites
|
||||
AC_CHECK_FUNCS([memset printf syslog], [],
|
||||
[ AC_MSG_ERROR([Required function not found])])
|
||||
|
||||
@@ -9,6 +9,7 @@ OBJ_FILES = \
|
||||
##############################
|
||||
# Start SUBSYSTEM LIBREPLACE
|
||||
[SUBSYSTEM::LIBREPLACE]
|
||||
CFLAGS = -Ilib/replace
|
||||
OBJ_FILES = replace.o \
|
||||
snprintf.o \
|
||||
dlfcn.o \
|
||||
|
||||
52
source/lib/replace/configure.ac
Normal file
52
source/lib/replace/configure.ac
Normal file
@@ -0,0 +1,52 @@
|
||||
AC_DEFUN([SMB_EXT_LIB], [echo -n ""])
|
||||
AC_DEFUN([SMB_ENABLE], [echo -n ""])
|
||||
|
||||
dnl see if a declaration exists for a function or variable
|
||||
dnl defines HAVE_function_DECL if it exists
|
||||
dnl AC_HAVE_DECL(var, includes)
|
||||
AC_DEFUN(AC_HAVE_DECL,
|
||||
[
|
||||
AC_CACHE_CHECK([for $1 declaration],ac_cv_have_$1_decl,[
|
||||
AC_TRY_COMPILE([$2],[int i = (int)$1],
|
||||
ac_cv_have_$1_decl=yes,ac_cv_have_$1_decl=no)])
|
||||
if test x"$ac_cv_have_$1_decl" = x"yes"; then
|
||||
AC_DEFINE([HAVE_]translit([$1], [a-z], [A-Z])[_DECL],1,[Whether $1() is available])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl AC_SEARCH_LIBS_EXT(FUNCTION, SEARCH-LIBS, EXT_LIBS,
|
||||
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
|
||||
dnl [OTHER-LIBRARIES])
|
||||
dnl --------------------------------------------------------
|
||||
dnl Search for a library defining FUNC, if it's not already available.
|
||||
AC_DEFUN([AC_SEARCH_LIBS_EXT],
|
||||
[AC_CACHE_CHECK([for library containing $1], [ac_cv_search_ext_$1],
|
||||
[
|
||||
ac_func_search_ext_save_LIBS=$LIBS
|
||||
ac_cv_search_ext_$1=no
|
||||
AC_LINK_IFELSE([AC_LANG_CALL([], [$1])],
|
||||
[ac_cv_search_ext_$1="none required"])
|
||||
if test "$ac_cv_search_ext_$1" = no; then
|
||||
for ac_lib in $2; do
|
||||
LIBS="-l$ac_lib $$3 $6 $ac_func_search_save_ext_LIBS"
|
||||
AC_LINK_IFELSE([AC_LANG_CALL([], [$1])],
|
||||
[ac_cv_search_ext_$1="-l$ac_lib"
|
||||
break])
|
||||
done
|
||||
fi
|
||||
LIBS=$ac_func_search_ext_save_LIBS])
|
||||
AS_IF([test "$ac_cv_search_ext_$1" != no],
|
||||
[test "$ac_cv_search_ext_$1" = "none required" || $3="$ac_cv_search_ext_$1 $$3"
|
||||
$4],
|
||||
[$5])dnl
|
||||
])
|
||||
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(dlfcn.c)
|
||||
AC_CONFIG_SRCDIR([dlfcn.c])
|
||||
AC_CONFIG_HEADER(replace_config.h)
|
||||
AC_PROG_INSTALL
|
||||
sinclude(config.m4)
|
||||
sinclude(win32/config.m4)
|
||||
sinclude(repdir/config.m4)
|
||||
AC_OUTPUT(Makefile)
|
||||
@@ -4,22 +4,27 @@
|
||||
Copyright (C) Andrew Tridgell 1992-1998
|
||||
Copyright (C) Jeremy Allison 1998-2002
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
** NOTE! The following LGPL license applies to the replace
|
||||
** library. This does NOT imply that all of Samba is released
|
||||
** under the LGPL
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
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
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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 General Public License for more details.
|
||||
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 General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "replace.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef HAVE_DLOPEN
|
||||
void *dlopen(const char *name, int flags)
|
||||
|
||||
@@ -18,9 +18,38 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Modified to use with samba by Jeremy Allison, 8th July 1995. */
|
||||
|
||||
#include "includes.h"
|
||||
#include "system/terminal.h"
|
||||
#include "system/wait.h"
|
||||
#include "replace.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(HAVE_TERMIOS_H)
|
||||
/* POSIX terminal handling. */
|
||||
#include <termios.h>
|
||||
#elif defined(HAVE_TERMIO_H)
|
||||
/* Older SYSV terminal handling - don't use if we can avoid it. */
|
||||
#include <termio.h>
|
||||
#elif defined(HAVE_SYS_TERMIO_H)
|
||||
/* Older SYSV terminal handling - don't use if we can avoid it. */
|
||||
#include <sys/termio.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_WAIT_H
|
||||
#include <sys/wait.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define additional missing types
|
||||
*/
|
||||
#ifndef HAVE_SIG_ATOMIC_T_TYPE
|
||||
typedef int sig_atomic_t;
|
||||
#endif
|
||||
|
||||
#ifndef SIGCLD
|
||||
#define SIGCLD SIGCHLD
|
||||
#endif
|
||||
|
||||
#ifndef SIGNAL_CAST
|
||||
#define SIGNAL_CAST (RETSIGTYPE (*)(int))
|
||||
#endif
|
||||
|
||||
#ifdef REPLACE_GETPASS
|
||||
|
||||
|
||||
@@ -3,19 +3,23 @@
|
||||
|
||||
Copyright (C) Andrew Tridgell 2005
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
** NOTE! The following LGPL license applies to the replace
|
||||
** library. This does NOT imply that all of Samba is released
|
||||
** under the LGPL
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
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
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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 General Public License for more details.
|
||||
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 General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
/*
|
||||
a replacement for opendir/readdir/telldir/seekdir/closedir for BSD systems
|
||||
|
||||
@@ -3,37 +3,40 @@
|
||||
replacement routines for broken systems
|
||||
Copyright (C) Andrew Tridgell 1992-1998
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
** NOTE! The following LGPL license applies to the replace
|
||||
** library. This does NOT imply that all of Samba is released
|
||||
** under the LGPL
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
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
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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 General Public License for more details.
|
||||
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 General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "system/locale.h"
|
||||
#include "system/wait.h"
|
||||
#include "system/time.h"
|
||||
#include "system/network.h"
|
||||
#include "system/filesys.h"
|
||||
#include "system/syslog.h"
|
||||
#include "replace.h"
|
||||
|
||||
void replace_dummy(void);
|
||||
void replace_dummy(void) {}
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <string.h>
|
||||
|
||||
void replace_dummy(void);
|
||||
void replace_dummy(void) {}
|
||||
|
||||
#ifndef HAVE_FTRUNCATE
|
||||
/*******************************************************************
|
||||
ftruncate for operating systems that don't have it
|
||||
********************************************************************/
|
||||
int ftruncate(int f,off_t l)
|
||||
int rep_ftruncate(int f, off_t l)
|
||||
{
|
||||
#ifdef HAVE_CHSIZE
|
||||
return chsize(f,l);
|
||||
@@ -53,7 +56,7 @@ ftruncate for operating systems that don't have it
|
||||
#ifndef HAVE_STRLCPY
|
||||
/* like strncpy but does not 0 fill the buffer and always null
|
||||
terminates. bufsize is the size of the destination buffer */
|
||||
size_t strlcpy(char *d, const char *s, size_t bufsize)
|
||||
size_t rep_strlcpy(char *d, const char *s, size_t bufsize)
|
||||
{
|
||||
size_t len = strlen(s);
|
||||
size_t ret = len;
|
||||
@@ -69,7 +72,7 @@ ftruncate for operating systems that don't have it
|
||||
/* 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 strlcat(char *d, const char *s, size_t bufsize)
|
||||
size_t rep_strlcat(char *d, const char *s, size_t bufsize)
|
||||
{
|
||||
size_t len1 = strlen(d);
|
||||
size_t len2 = strlen(s);
|
||||
@@ -97,7 +100,7 @@ Corrections by richard.kettlewell@kewill.com
|
||||
#define HOUR 60*MINUTE
|
||||
#define DAY 24*HOUR
|
||||
#define YEAR 365*DAY
|
||||
time_t mktime(struct tm *t)
|
||||
time_t rep_mktime(struct tm *t)
|
||||
{
|
||||
struct tm *u;
|
||||
time_t epoch = 0;
|
||||
@@ -149,7 +152,7 @@ Corrections by richard.kettlewell@kewill.com
|
||||
|
||||
#ifndef HAVE_RENAME
|
||||
/* Rename a file. (from libiberty in GNU binutils) */
|
||||
int rename(const char *zfrom, const char *zto)
|
||||
int rep_rename(const char *zfrom, const char *zto)
|
||||
{
|
||||
if (link (zfrom, zto) < 0)
|
||||
{
|
||||
@@ -169,7 +172,8 @@ Corrections by richard.kettlewell@kewill.com
|
||||
/*
|
||||
* Search for a match in a netgroup. This replaces it on broken systems.
|
||||
*/
|
||||
int innetgr(const char *group,const char *host,const char *user,const char *dom)
|
||||
int rep_innetgr(const char *group, const char *host, const char *user,
|
||||
const char *dom)
|
||||
{
|
||||
char *hst, *usr, *dm;
|
||||
|
||||
@@ -194,7 +198,7 @@ Corrections by richard.kettlewell@kewill.com
|
||||
/****************************************************************************
|
||||
some systems don't have an initgroups call
|
||||
****************************************************************************/
|
||||
int initgroups(char *name, gid_t id)
|
||||
int rep_initgroups(char *name, gid_t id)
|
||||
{
|
||||
#ifndef HAVE_SETGROUPS
|
||||
/* yikes! no SETGROUPS or INITGROUPS? how can this work? */
|
||||
@@ -246,7 +250,7 @@ Corrections by richard.kettlewell@kewill.com
|
||||
/* This is needed due to needing the nap() function but we don't want
|
||||
to include the Xenix libraries since that will break other things...
|
||||
BTW: system call # 0x0c28 is the same as calling nap() */
|
||||
long nap(long milliseconds) {
|
||||
long nap(long milliseconds) {
|
||||
return syscall(0x0c28, milliseconds);
|
||||
}
|
||||
#endif
|
||||
@@ -259,7 +263,7 @@ this is only used if the machine does not have it's own memmove().
|
||||
this is not the fastest algorithm in town, but it will do for our
|
||||
needs.
|
||||
********************************************************************/
|
||||
void *memmove(void *dest,const void *src,int size)
|
||||
void *rep_memmove(void *dest,const void *src,int size)
|
||||
{
|
||||
unsigned long d,s;
|
||||
int i;
|
||||
@@ -317,7 +321,7 @@ needs.
|
||||
/****************************************************************************
|
||||
duplicate a string
|
||||
****************************************************************************/
|
||||
char *strdup(const char *s)
|
||||
char *rep_strdup(const char *s)
|
||||
{
|
||||
size_t len;
|
||||
char *ret;
|
||||
@@ -335,7 +339,7 @@ duplicate a string
|
||||
#ifndef WITH_PTHREADS
|
||||
/* REWRITE: not thread safe */
|
||||
#ifdef REPLACE_INET_NTOA
|
||||
char *rep_inet_ntoa(struct in_addr ip)
|
||||
char *rep_inet_ntoa(struct in_addr ip)
|
||||
{
|
||||
uint8_t *p = (uint8_t *)&ip.s_addr;
|
||||
static char buf[18];
|
||||
@@ -347,7 +351,7 @@ duplicate a string
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SETLINEBUF
|
||||
int setlinebuf(FILE *stream)
|
||||
int rep_setlinebuf(FILE *stream)
|
||||
{
|
||||
return setvbuf(stream, (char *)NULL, _IOLBF, 0);
|
||||
}
|
||||
@@ -355,7 +359,7 @@ duplicate a string
|
||||
|
||||
#ifndef HAVE_VSYSLOG
|
||||
#ifdef HAVE_SYSLOG
|
||||
void vsyslog (int facility_priority, char *format, va_list arglist)
|
||||
void rep_vsyslog (int facility_priority, char *format, va_list arglist)
|
||||
{
|
||||
char *msg = NULL;
|
||||
vasprintf(&msg, format, arglist);
|
||||
@@ -388,7 +392,7 @@ duplicate a string
|
||||
/**
|
||||
Some platforms don't have strndup.
|
||||
**/
|
||||
char *strndup(const char *s, size_t n)
|
||||
char *rep_strndup(const char *s, size_t n)
|
||||
{
|
||||
char *ret;
|
||||
|
||||
@@ -404,14 +408,14 @@ duplicate a string
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_WAITPID
|
||||
int waitpid(pid_t pid,int *status,int options)
|
||||
int rep_waitpid(pid_t pid,int *status,int options)
|
||||
{
|
||||
return wait4(pid, status, options, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SETEUID
|
||||
int seteuid(uid_t euid)
|
||||
int rep_seteuid(uid_t euid)
|
||||
{
|
||||
#ifdef HAVE_SETRESUID
|
||||
return setresuid(-1, euid, -1);
|
||||
@@ -422,7 +426,7 @@ int waitpid(pid_t pid,int *status,int options)
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SETEGID
|
||||
int setegid(gid_t egid)
|
||||
int rep_setegid(gid_t egid)
|
||||
{
|
||||
#ifdef HAVE_SETRESGID
|
||||
return setresgid(-1, egid, -1);
|
||||
@@ -436,7 +440,7 @@ int waitpid(pid_t pid,int *status,int options)
|
||||
os/2 also doesn't have chroot
|
||||
********************************************************************/
|
||||
#ifndef HAVE_CHROOT
|
||||
int chroot(const char *dname)
|
||||
int rep_chroot(const char *dname)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
@@ -460,7 +464,7 @@ int rep_mkstemp(char *template)
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MKDTEMP
|
||||
char * mkdtemp(char *template)
|
||||
char *rep_mkdtemp(char *template)
|
||||
{
|
||||
char *dname;
|
||||
|
||||
@@ -475,7 +479,7 @@ char * mkdtemp(char *template)
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_PREAD
|
||||
static ssize_t pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
|
||||
static ssize_t rep_pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
|
||||
{
|
||||
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
|
||||
return -1;
|
||||
@@ -485,7 +489,7 @@ static ssize_t pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_PWRITE
|
||||
static ssize_t pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
|
||||
static ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
|
||||
{
|
||||
if (lseek(__fd, __offset, SEEK_SET) != __offset) {
|
||||
return -1;
|
||||
@@ -495,7 +499,7 @@ static ssize_t pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offs
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRCASESTR
|
||||
char *strcasestr(const char *haystack, const char *needle)
|
||||
char *rep_strcasestr(const char *haystack, const char *needle)
|
||||
{
|
||||
const char *s;
|
||||
size_t nlen = strlen(needle);
|
||||
@@ -511,7 +515,7 @@ char *strcasestr(const char *haystack, const char *needle)
|
||||
|
||||
#ifndef HAVE_STRTOK_R
|
||||
/* based on GLIBC version, copyright Free Software Foundation */
|
||||
char *strtok_r(char *s, const char *delim, char **save_ptr)
|
||||
char *rep_strtok_r(char *s, const char *delim, char **save_ptr)
|
||||
{
|
||||
char *token;
|
||||
|
||||
@@ -535,3 +539,111 @@ char *strtok_r(char *s, const char *delim, char **save_ptr)
|
||||
return token;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNLEN
|
||||
/**
|
||||
Some platforms don't have strnlen
|
||||
**/
|
||||
size_t rep_strnlen(const char *s, size_t n)
|
||||
{
|
||||
int i;
|
||||
for (i=0; s[i] && i<n; i++)
|
||||
/* noop */ ;
|
||||
return i;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRTOLL
|
||||
long long int rep_strtoll(const char *str, char **endptr, int base)
|
||||
{
|
||||
#ifdef HAVE_STRTOQ
|
||||
return strtoq(str, endptr, base);
|
||||
#elif defined(HAVE___STRTOLL)
|
||||
return __strtoll(str, endptr, base);
|
||||
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
|
||||
return (long long int) strtol(str, endptr, base);
|
||||
#else
|
||||
# error "You need a strtoll function"
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef HAVE_STRTOULL
|
||||
unsigned long long int rep_strtoull(const char *str, char **endptr, int base)
|
||||
{
|
||||
#ifdef HAVE_STRTOUQ
|
||||
return strtouq(str, endptr, base);
|
||||
#elif defined(HAVE___STRTOULL)
|
||||
return __strtoull(str, endptr, base);
|
||||
#elif SIZEOF_LONG == SIZEOF_LONG_LONG
|
||||
return (unsigned long long int) strtoul(str, endptr, base);
|
||||
#else
|
||||
# error "You need a strtoull function"
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SETENV
|
||||
int rep_setenv(const char *name, const char *value, int overwrite)
|
||||
{
|
||||
char *p;
|
||||
size_t l1, l2;
|
||||
int ret;
|
||||
|
||||
if (!overwrite && getenv(name)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
l1 = strlen(name);
|
||||
l2 = strlen(value);
|
||||
|
||||
p = malloc(l1+l2+2);
|
||||
if (p == NULL) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(p, name, l1);
|
||||
p[l1] = '=';
|
||||
memcpy(p+l1+1, value, l2);
|
||||
p[l1+l2+1] = 0;
|
||||
|
||||
ret = putenv(p);
|
||||
if (ret != 0) {
|
||||
free(p);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_TIMEGM)
|
||||
|
||||
static int is_leap(unsigned y)
|
||||
{
|
||||
y += 1900;
|
||||
return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
|
||||
}
|
||||
|
||||
time_t timegm(struct tm *tm)
|
||||
{
|
||||
static const unsigned ndays[2][12] ={
|
||||
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
|
||||
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
|
||||
time_t res = 0;
|
||||
unsigned i;
|
||||
|
||||
for (i = 70; i < tm->tm_year; ++i)
|
||||
res += is_leap(i) ? 366 : 365;
|
||||
|
||||
for (i = 0; i < tm->tm_mon; ++i)
|
||||
res += ndays[is_leap(tm->tm_year)][i];
|
||||
res += tm->tm_mday - 1;
|
||||
res *= 24;
|
||||
res += tm->tm_hour;
|
||||
res *= 60;
|
||||
res += tm->tm_min;
|
||||
res *= 60;
|
||||
res += tm->tm_sec;
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -4,25 +4,39 @@
|
||||
macros to go along with the lib/replace/ portability layer code
|
||||
|
||||
Copyright (C) Andrew Tridgell 2005
|
||||
Copyright (C) Jelmer Vernooij 2006
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
** NOTE! The following LGPL license applies to the replace
|
||||
** library. This does NOT imply that all of Samba is released
|
||||
** under the LGPL
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
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
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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 General Public License for more details.
|
||||
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 General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _replace_h
|
||||
#define _replace_h
|
||||
|
||||
#ifdef _SAMBA_BUILD_
|
||||
#include "config.h"
|
||||
#else
|
||||
#include "replace_config.h"
|
||||
#endif /* _SAMBA_BUILD_ */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
#include "lib/replace/win32/replace.h"
|
||||
#endif
|
||||
@@ -53,59 +67,78 @@ extern int errno;
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRDUP
|
||||
char *strdup(const char *s);
|
||||
#define strdup rep_strdup
|
||||
char *rep_strdup(const char *s);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MEMMOVE
|
||||
void *memmove(void *dest,const void *src,int size);
|
||||
#define memmove rep_memmove
|
||||
void *rep_memmove(void *dest,const void *src,int size);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MKTIME
|
||||
time_t mktime(struct tm *t);
|
||||
#define mktime rep_mktime
|
||||
time_t rep_mktime(struct tm *t);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
size_t strlcpy(char *d, const char *s, size_t bufsize);
|
||||
#define strlcpy rep_strlcpy
|
||||
size_t rep_strlcpy(char *d, const char *s, size_t bufsize);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCAT
|
||||
size_t strlcat(char *d, const char *s, size_t bufsize);
|
||||
#define strlcat rep_strlcat
|
||||
size_t rep_strlcat(char *d, const char *s, size_t bufsize);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNDUP
|
||||
char *strndup(const char *s, size_t n);
|
||||
#define strndup rep_strndup
|
||||
char *rep_strndup(const char *s, size_t n);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNLEN
|
||||
size_t strnlen(const char *s, size_t n);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRTOUL
|
||||
unsigned long strtoul(const char *nptr, char **endptr, int base);
|
||||
#define strnlen rep_strnlen
|
||||
size_t rep_strnlen(const char *s, size_t n);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SETENV
|
||||
int setenv(const char *name, const char *value, int overwrite);
|
||||
#define setenv rep_setenv
|
||||
int rep_setenv(const char *name, const char *value, int overwrite);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_RENAME
|
||||
int rename(const char *zfrom, const char *zto);
|
||||
#define rename rep_rename
|
||||
int rep_rename(const char *zfrom, const char *zto);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRCASESTR
|
||||
char *strcasestr(const char *haystack, const char *needle);
|
||||
#define strcasestr rep_strcasestr
|
||||
char *rep_strcasestr(const char *haystack, const char *needle);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRTOK_R
|
||||
char *strtok_r(char *s, const char *delim, char **save_ptr);
|
||||
#define strtok_r rep_strtok_r
|
||||
char *rep_strtok_r(char *s, const char *delim, char **save_ptr);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRTOLL
|
||||
#define strtoll rep_strtoll
|
||||
long long int rep_strtoll(const char *str, char **endptr, int base);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRTOULL
|
||||
#define strtoull rep_strtoull
|
||||
unsigned long long int rep_strtoull(const char *str, char **endptr, int base);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_FTRUNCATE
|
||||
int ftruncate(int f,long l);
|
||||
#define ftruncate rep_ftruncate
|
||||
int rep_ftruncate(int f,long l);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_VASPRINTF_DECL
|
||||
int vasprintf(char **ptr, const char *format, va_list ap);
|
||||
#define vasprintf rep_vasprintf
|
||||
int rep_vasprintf(char **ptr, const char *format, va_list ap);
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
|
||||
@@ -114,7 +147,8 @@ int vasprintf(char **ptr, const char *format, va_list ap);
|
||||
|
||||
#ifndef HAVE_TIMEGM
|
||||
struct tm;
|
||||
time_t timegm(struct tm *tm);
|
||||
#define timegm rep_timegm
|
||||
time_t rep_timegm(struct tm *tm);
|
||||
#endif
|
||||
|
||||
#ifndef PRINTF_ATTRIBUTE
|
||||
@@ -131,10 +165,12 @@ time_t timegm(struct tm *tm);
|
||||
|
||||
/* add varargs prototypes with printf checking */
|
||||
#ifndef HAVE_SNPRINTF_DECL
|
||||
int snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
|
||||
#define snprintf rep_snprintf
|
||||
int rep_snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
|
||||
#endif
|
||||
#ifndef HAVE_ASPRINTF_DECL
|
||||
int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
|
||||
#define asprintf rep_asprintf
|
||||
int rep_asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -174,7 +210,8 @@ int rep_mkstemp(char *temp);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MKDTEMP
|
||||
char *mkdtemp(char *template);
|
||||
#define mkdtemp rep_mkdtemp
|
||||
char *rep_mkdtemp(char *template);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LIMITS_H
|
||||
@@ -248,4 +285,6 @@ typedef int bool;
|
||||
#define __STRING(x) #x
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
58
source/lib/replace/replace.m4
Normal file
58
source/lib/replace/replace.m4
Normal file
@@ -0,0 +1,58 @@
|
||||
dnl Try to find a replacement library
|
||||
dnl Will define HAVE_REPLACE_H if replace.h can be found
|
||||
AC_DEFUN([SMB_LIBREPLACE], [
|
||||
AC_ARG_WITH(libreplace,
|
||||
[ --with-libreplace Specify location to libreplace],
|
||||
[
|
||||
# Check whether libreplace can actually be found in this location
|
||||
if ! test -f "$withval/replace.h"
|
||||
then
|
||||
AC_MSG_ERROR([Unable to find replace.h in $withval])
|
||||
fi
|
||||
replacedir=$withval
|
||||
],
|
||||
[
|
||||
# Check if we can find libreplace in a common location
|
||||
for dir in . replace ../replace
|
||||
do
|
||||
AC_MSG_CHECKING([for libreplace in $dir])
|
||||
if test -f "$dir/replace.h"
|
||||
then
|
||||
replacedir="$dir"
|
||||
AC_MSG_RESULT(yes)
|
||||
break
|
||||
fi
|
||||
AC_MSG_RESULT(no)
|
||||
done
|
||||
])
|
||||
|
||||
AC_SUBST(REPLACE_LIBS)
|
||||
|
||||
if test "$replacedir" != ""
|
||||
then
|
||||
REPLACE_LIBS="$replacedir/libreplace.a"
|
||||
CFLAGS="$CFLAGS -I$replacedir"
|
||||
AC_DEFINE(HAVE_REPLACE_H, 1,
|
||||
[Whether replace.h is present and should be used])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl Try to find the specified functions in the system, or
|
||||
dnl in Samba's replacement library. In the future, this may also
|
||||
dnl try to find these functions in libroken or GNUlib if libreplace can't be
|
||||
dnl found.
|
||||
AC_DEFUN(SMB_REPLACE_FUNCS, [
|
||||
AC_REQUIRE([SMB_LIBREPLACE])dnl
|
||||
|
||||
if test -z "$replacedir" || test -f "$replacedir/libreplace.a"
|
||||
then
|
||||
LIBS="$LIBS $REPLACE_LIBS"
|
||||
for f in $1
|
||||
do
|
||||
AC_CHECK_FUNC($f, [], [
|
||||
AC_MSG_ERROR([Unable to find $f in the system. Consider
|
||||
specifying the path to the replacement library])
|
||||
])
|
||||
done
|
||||
fi
|
||||
])
|
||||
@@ -103,10 +103,10 @@
|
||||
*
|
||||
**************************************************************/
|
||||
|
||||
#ifndef NO_CONFIG_H
|
||||
#ifdef _SAMBA_BUILD_
|
||||
#include "config.h"
|
||||
#else
|
||||
#define NULL 0
|
||||
#include "replace_config.h"
|
||||
#endif
|
||||
|
||||
#ifdef TEST_SNPRINTF /* need math library headers for testing */
|
||||
|
||||
366
source/lib/replace/test/testsuite.c
Normal file
366
source/lib/replace/test/testsuite.c
Normal file
@@ -0,0 +1,366 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
|
||||
libreplace tests
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2006
|
||||
|
||||
** NOTE! The following LGPL license applies to the talloc
|
||||
** 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
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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 this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "../replace.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int test_ftruncate()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strlcpy()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strlcat()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_mktime()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_rename()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_innetgr()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_initgroups()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_memmove()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strdup()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_setlinebuf()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_vsyslog()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_timegm()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_setenv()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strndup()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strnlen()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_waitpid()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_seteuid()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_setegid()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_asprintf()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_snprintf()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_vasprintf()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_vsnprintf()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_opendir()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_readdir()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_telldir()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_seekdir()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_dlopen()
|
||||
{
|
||||
/* FIXME: test dlopen, dlsym, dlclose, dlerror */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int test_chroot()
|
||||
{
|
||||
/* FIXME: chroot() */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_bzero()
|
||||
{
|
||||
/* FIXME: bzero */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strerror()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_errno()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_mkdtemp()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_mkstemp()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_pread()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_pwrite()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_getpass()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_inet_ntoa()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strtoll()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_strtoull()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
FIXME:
|
||||
Types:
|
||||
bool
|
||||
socklen_t
|
||||
uint_t
|
||||
uint{8,16,32,64}_t
|
||||
int{8,16,32,64}_t
|
||||
intptr_t
|
||||
|
||||
Constants:
|
||||
PATH_NAME_MAX
|
||||
UINT{16,32,64}_MAX
|
||||
INT32_MAX
|
||||
*/
|
||||
|
||||
int test_va_copy()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_FUNCTION()
|
||||
{
|
||||
/* FIXME: test __FUNCTION__ macro */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_MIN()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int test_MAX()
|
||||
{
|
||||
/* FIXME */
|
||||
return true;
|
||||
}
|
||||
|
||||
int torture_local_replace()
|
||||
{
|
||||
int ret = true;
|
||||
;
|
||||
ret &= test_ftruncate();
|
||||
ret &= test_strlcpy();
|
||||
ret &= test_strlcat();
|
||||
ret &= test_mktime();
|
||||
ret &= test_rename();
|
||||
ret &= test_innetgr();
|
||||
ret &= test_initgroups();
|
||||
ret &= test_memmove();
|
||||
ret &= test_strdup();
|
||||
ret &= test_setlinebuf();
|
||||
ret &= test_vsyslog();
|
||||
ret &= test_timegm();
|
||||
ret &= test_setenv();
|
||||
ret &= test_strndup();
|
||||
ret &= test_strnlen();
|
||||
ret &= test_waitpid();
|
||||
ret &= test_seteuid();
|
||||
ret &= test_setegid();
|
||||
ret &= test_asprintf();
|
||||
ret &= test_snprintf();
|
||||
ret &= test_vasprintf();
|
||||
ret &= test_vsnprintf();
|
||||
ret &= test_opendir();
|
||||
ret &= test_readdir() ;
|
||||
ret &= test_telldir();
|
||||
ret &= test_seekdir();
|
||||
ret &= test_dlopen();
|
||||
ret &= test_chroot();
|
||||
ret &= test_bzero();
|
||||
ret &= test_strerror();
|
||||
ret &= test_errno();
|
||||
ret &= test_mkdtemp();
|
||||
ret &= test_mkstemp();
|
||||
ret &= test_pread();
|
||||
ret &= test_pwrite();
|
||||
ret &= test_getpass();
|
||||
ret &= test_inet_ntoa();
|
||||
ret &= test_strtoll();
|
||||
ret &= test_strtoll();
|
||||
ret &= test_strtoull();
|
||||
ret &= test_va_copy();
|
||||
ret &= test_FUNCTION();
|
||||
ret &= test_MIN();
|
||||
ret &= test_MAX();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if !defined(_SAMBA_BUILD_) || ((SAMBA_VERSION_MAJOR==3)&&(SAMBA_VERSION_MINOR<9))
|
||||
int main(void)
|
||||
{
|
||||
if (!torture_local_replace(NULL)) {
|
||||
printf("ERROR: TESTSUITE FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -6,6 +6,7 @@ SO_VERSION = 0
|
||||
OBJ_FILES = talloc.o
|
||||
PUBLIC_DEPENDENCIES = LIBREPLACE
|
||||
MANPAGE = talloc.3
|
||||
CFLAGS = -Ilib/talloc
|
||||
PUBLIC_HEADERS = talloc.h
|
||||
DESCRIPTION = A hierarchical pool based memory system with destructors
|
||||
#
|
||||
|
||||
@@ -40,20 +40,23 @@ install: all
|
||||
cp $(srcdir)/include/tdb.h $(includedir)
|
||||
cp tdb.pc $(libdir)/pkgconfig
|
||||
|
||||
bin/tdbtest: tools/tdbtest.o $(TDB_OBJ)
|
||||
$(CC) $(CFLAGS) -o bin/tdbtest tools/tdbtest.o $(TDB_OBJ) -lgdbm
|
||||
libtdb.a: $(TDB_OBJ)
|
||||
ar -rv libtdb.a $(TDB_OBJ)
|
||||
|
||||
bin/tdbtool: tools/tdbtool.o $(TDB_OBJ)
|
||||
$(CC) $(CFLAGS) -o bin/tdbtool tools/tdbtool.o $(TDB_OBJ)
|
||||
bin/tdbtest: tools/tdbtest.o libtdb.a
|
||||
$(CC) $(CFLAGS) -o bin/tdbtest tools/tdbtest.o -L. -ltdb -lgdbm
|
||||
|
||||
bin/tdbtorture: tools/tdbtorture.o $(TDB_OBJ)
|
||||
$(CC) $(CFLAGS) -o bin/tdbtorture tools/tdbtorture.o $(TDB_OBJ)
|
||||
bin/tdbtool: tools/tdbtool.o libtdb.a
|
||||
$(CC) $(CFLAGS) -o bin/tdbtool tools/tdbtool.o -L. -ltdb
|
||||
|
||||
bin/tdbdump: tools/tdbdump.o $(TDB_OBJ)
|
||||
$(CC) $(CFLAGS) -o bin/tdbdump tools/tdbdump.o $(TDB_OBJ)
|
||||
bin/tdbtorture: tools/tdbtorture.o libtdb.a
|
||||
$(CC) $(CFLAGS) -o bin/tdbtorture tools/tdbtorture.o -L. -ltdb
|
||||
|
||||
bin/tdbbackup: tools/tdbbackup.o $(TDB_OBJ)
|
||||
$(CC) $(CFLAGS) -o bin/tdbbackup tools/tdbbackup.o $(TDB_OBJ)
|
||||
bin/tdbdump: tools/tdbdump.o libtdb.a
|
||||
$(CC) $(CFLAGS) -o bin/tdbdump tools/tdbdump.o -L. -ltdb
|
||||
|
||||
bin/tdbbackup: tools/tdbbackup.o libtdb.a
|
||||
$(CC) $(CFLAGS) -o bin/tdbbackup tools/tdbbackup.o -L. -ltdb
|
||||
|
||||
clean:
|
||||
rm -f $(PROGS) common/*.o tools/*.o *~ *.bak */*~ */*.bak *% core test.db test.tdb test.gdbm
|
||||
|
||||
Reference in New Issue
Block a user