summaryrefslogtreecommitdiff
path: root/source4/lib/replace
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2005-09-23 16:32:52 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:38:48 -0500
commit4be0ae794e4af2354d678fddd7bf1e822ffa9148 (patch)
tree128989d970334e4a896329992e827c4f09b8c035 /source4/lib/replace
parentda46c9252ee887602b3e629065ca87b9ed11466f (diff)
downloadsamba-4be0ae794e4af2354d678fddd7bf1e822ffa9148.tar.gz
samba-4be0ae794e4af2354d678fddd7bf1e822ffa9148.tar.bz2
samba-4be0ae794e4af2354d678fddd7bf1e822ffa9148.zip
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)
Diffstat (limited to 'source4/lib/replace')
-rw-r--r--source4/lib/replace/README2
-rw-r--r--source4/lib/replace/SConscript28
-rw-r--r--source4/lib/replace/config.m41
-rw-r--r--source4/lib/replace/replace.c22
4 files changed, 49 insertions, 4 deletions
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 <unistd.h>])
AC_HAVE_DECL(setresgid, [#include <unistd.h>])
AC_HAVE_DECL(errno, [#include <errno.h>])
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
+
+