From 4be0ae794e4af2354d678fddd7bf1e822ffa9148 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 23 Sep 2005 16:32:52 +0000 Subject: r10456: More SCons fixes: - Add framework for fallback generating code - Move pread / pwrite replacement functions to libreplace - Support pidl builds correctly - Support asn1 builds correctly - Move OS-specific checks to lib/replace/SConscript (This used to be commit fbbfad0a1f7dedbf48e835a864f8285f283d72f3) --- source4/lib/replace/README | 2 ++ source4/lib/replace/SConscript | 28 ++++++++++++++++++++++++---- source4/lib/replace/config.m4 | 1 + source4/lib/replace/replace.c | 22 ++++++++++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) (limited to 'source4/lib/replace') diff --git a/source4/lib/replace/README b/source4/lib/replace/README index 6575112eff..eb3360b74a 100644 --- a/source4/lib/replace/README +++ b/source4/lib/replace/README @@ -46,6 +46,8 @@ bzero strerror errno mkstemp (a secure one!) +pread +pwrite Types: socklen_t diff --git a/source4/lib/replace/SConscript b/source4/lib/replace/SConscript index 982120e1bf..a2b3a30e10 100644 --- a/source4/lib/replace/SConscript +++ b/source4/lib/replace/SConscript @@ -1,11 +1,31 @@ -Import('hostenv') +#!/usr/bin/env python +Import('hostenv defines') if hostenv['configure']: conf = Configure(hostenv) - #FIXME: conf.CheckBrokenInetNtoa() + for f in ['memset','syslog','setnetgrent','getnetgrent','endnetgrent', \ + 'mktemp']: + if not conf.CheckFunc(f,'c'): + print "Required function `%s' not found" % f + exit(1) + for f in ['strtoull','__strtoull','strtouq','strtoll','__strtoll','strtoq', - 'seteuid','setresuid','setegid','setresgid']: - conf.CheckFunc(f,'c') + 'seteuid','setresuid','setegid','setresgid','dlsym','dlopen', + 'dlerror','dlclose','waitpid','getcwd','strdup','strndup', + 'strnlen','strerror','bzero','chroot','strlcpy','strlcat', + 'memmove','vsnprintf','asprintf','snprintf','vasprintf', + 'innetgr','mktime','rename','ftruncate','chsize','setlinebuf', + 'setenv','vsyslog','pread','pwrite']: + if conf.CheckFunc(f,'c'): + defines['HAVE_' + f.upper()] = 1 + + for h in ['dlfcn.h']: + if conf.CheckCHeader('dlfcn.h'): + defines['HAVE_' + h.upper().replace('.','_').replace('/','_')] = 1 + + if not conf.CheckType('socklen_t'): + defines['socklen_t'] = 'int' + conf.Finish() hostenv.StaticLibrary('repdir', ['repdir/repdir.c']) diff --git a/source4/lib/replace/config.m4 b/source4/lib/replace/config.m4 index ac4db9ed5b..07fbed9d91 100644 --- a/source4/lib/replace/config.m4 +++ b/source4/lib/replace/config.m4 @@ -22,6 +22,7 @@ AC_CHECK_FUNCS(strtoull __strtoull strtouq strtoll __strtoll strtoq) AC_CHECK_FUNCS(seteuid setresuid setegid setresgid chroot bzero strerror) AC_CHECK_FUNCS(timegm setenv vsyslog setlinebuf mktime ftruncate chsize rename) AC_CHECK_FUNCS(waitpid strnlen strlcpy strlcat innetgr initgroups memmove strdup) +AC_CHECK_FUNCS(pread pwrite) AC_HAVE_DECL(setresuid, [#include ]) AC_HAVE_DECL(setresgid, [#include ]) AC_HAVE_DECL(errno, [#include ]) diff --git a/source4/lib/replace/replace.c b/source4/lib/replace/replace.c index aa79f23fd0..c53b5a5727 100644 --- a/source4/lib/replace/replace.c +++ b/source4/lib/replace/replace.c @@ -523,3 +523,25 @@ int rep_mkstemp(char *template) return open(p, O_CREAT|O_EXCL|O_RDWR, 0600); } #endif + +#ifndef HAVE_PREAD +static ssize_t pread(int __fd, void *__buf, size_t __nbytes, off_t __offset) +{ + if (lseek(__fd, __offset, SEEK_SET) != __offset) { + return -1; + } + return read(__fd, __buf, __nbytes); +} +#endif + +#ifndef HAVE_PWRITE +static ssize_t pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset) +{ + if (lseek(__fd, __offset, SEEK_SET) != __offset) { + return -1; + } + return write(__fd, __buf, __nbytes); +} +#endif + + -- cgit