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/SConstruct | 25 +++++------ source4/build/m4/rewrite.m4 | 5 +-- source4/build/scons/asn1.py | 9 ++-- source4/build/scons/fallback.py | 34 +++++++++++++++ source4/build/scons/iconv.py | 81 ---------------------------------- source4/build/scons/pidl.py | 30 ++++++++++--- source4/heimdal_build/SConscript | 6 +-- source4/lib/charset/SConscript | 92 +++++++++++++++++++++++++++++++++++---- source4/lib/registry/SConscript | 8 ++++ source4/lib/replace/README | 2 + source4/lib/replace/SConscript | 28 ++++++++++-- source4/lib/replace/config.m4 | 1 + source4/lib/replace/replace.c | 22 ++++++++++ source4/lib/socket/SConscript | 59 +++++++++++++++++++++++++ source4/ntvfs/simple/vfs_simple.c | 20 --------- source4/script/tests/SConscript | 2 + 16 files changed, 282 insertions(+), 142 deletions(-) create mode 100644 source4/build/scons/fallback.py delete mode 100644 source4/build/scons/iconv.py create mode 100644 source4/script/tests/SConscript (limited to 'source4') diff --git a/source4/SConstruct b/source4/SConstruct index bc03f82c83..66ba8ed38b 100644 --- a/source4/SConstruct +++ b/source4/SConstruct @@ -6,6 +6,11 @@ # # Copyright (C) 2005 Jelmer Vernooij # Published under the GNU GPL +# +# TODO: +# - finish fallback code +# - finish proto code +# - support for init functions import cPickle, string, os @@ -21,7 +26,7 @@ hostenv = Environment( tools=['default','pidl','proto','et','asn1'], options=opts, CPPPATH=['#include','#','#lib'], - CPPDEFINES={'_SAMBA_BUILD_': None}, + CPPDEFINES={'_SAMBA_BUILD_': None}, ) # We don't care about NFS builds... @@ -114,23 +119,17 @@ if hostenv['configure']: ['strings.h','stdlib.h','sys/vfs.h','sys/fs/s5param.h','sys/filsys.h'] + \ ['termios.h','termio.h','fnmatch.h','pwd.h','sys/termio.h'] + \ ['sys/time.h','sys/statfs.h','sys/statvfs.h','stdarg.h'] + \ - ['security/pam_modules.h','security/_pam_macros.h','dlfcn.h'] + \ ['sys/syslog.h','syslog.h','stdint.h','inttypes.h','locale.h'] + \ ['shadow.h','nss.h','nss_common.h','ns_api.h','sys/security.h'] + \ - ['security/pam_appl.h','sys/capability.h','syscall.h','sys/syscall.h'] + \ + ['security/pam_appl.h','sys/capability.h'] + \ ['sys/acl.h','stdbool.h']: if conf.CheckCHeader(h): defines['HAVE_' + h.upper().replace('.','_').replace('/','_')] = 1 - for f in ['dlopen','dlsym','dlerror','waitpid','getcwd','strdup'] + \ - ['strndup','strnlen','strerror','chroot','bzero','memset','strlcpy'] + \ - ['strlcat','memmove','vsnprintf','snprintf','asprintf','vasprintf'] + \ - ['setsid','pipe','crypt16','getauthuid','strftime','sigprocmask'] + \ - ['sigblock','sigaction','innetgr','setnetgrent','getnetgrent'] + \ - ['endnetgrent','initgroups','setgroups','sysconf','mktime','rename'] + \ - ['ftruncate','chsize','getpwanam','setlinebuf','srandom','random'] + \ - ['srand','rand','setenv','usleep','syslog','vsyslog','timegm'] + \ - ['backtrace','setbuffer','pread','pwrite']: + for f in ['setsid','pipe','crypt16','getauthuid','strftime','sigprocmask', + 'sigblock','sigaction','initgroups','setgroups','sysconf', 'getpwanam', + 'setlinebuf','srandom','random','srand','rand','usleep','timegm', + 'backtrace','setbuffer']: if conf.CheckFunc(f): defines['HAVE_' + f.upper()] = 1 @@ -210,7 +209,7 @@ SConscript( dirs=['lib','torture','rpc_server','cldap_server','libcli', 'nbt_server','client','ldap_server','libnet','nsswitch','web_server', 'smbd','dsdb','heimdal_build','ntptr','kdc','smb_server','ntvfs', - 'winbind','scripting','auth', 'librpc']) + 'winbind','scripting','auth', 'librpc','script/tests']) hostenv.CProtoHeader(target='include/proto.h',source=proto_files) diff --git a/source4/build/m4/rewrite.m4 b/source4/build/m4/rewrite.m4 index 8d72d852f4..9a61d2add0 100644 --- a/source4/build/m4/rewrite.m4 +++ b/source4/build/m4/rewrite.m4 @@ -102,7 +102,7 @@ AC_FUNC_MEMCMP AC_CHECK_FUNCS(setsid pipe crypt16 getauthuid) AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction) AC_CHECK_FUNCS(setgroups sysconf getpwanam srandom random srand rand usleep) -AC_CHECK_FUNCS(backtrace setbuffer pread pwrite) +AC_CHECK_FUNCS(backtrace setbuffer) # Assume non-shared by default and override below BLDSHARED="false" @@ -393,9 +393,6 @@ if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes]) fi - - - AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[ AC_TRY_COMPILE([#include #include ], diff --git a/source4/build/scons/asn1.py b/source4/build/scons/asn1.py index f0068e20dd..b8b7073151 100644 --- a/source4/build/scons/asn1.py +++ b/source4/build/scons/asn1.py @@ -17,17 +17,20 @@ def asn1_emitter(target,source,env): contents = node.get_contents() for j in output_re.findall(contents): targets.append(str(node.get_dir()) + '/asn1_' + j + '.c') + targets.append("%s/%s.h" % (str(node.get_dir()), env['ASN1PREFIX'])) return targets, source asn1_builder = SCons.Builder.Builder(action='$ASN1COM', src_suffix = '.asn1', suffix='.c', + single_source=True, emitter = asn1_emitter) def generate(env): - env['ASN1'] = './bin/asn1_compile' - env['ASN1COM'] = '$ASN1 $SOURCE' - env['BUILDERS']['ASN1'] = asn1_builder + env['ASN1'] = './bin/asn1_compile' + env['ASN1PREFIX'] = 'asn1' + env['ASN1COM'] = 'cd ${SOURCE.dir} && $ASN1 $ASN1PREFIX ${SOURCE.file}' + env['BUILDERS']['ASN1'] = asn1_builder def exists(env): return env.Detect('asn1_compile') diff --git a/source4/build/scons/fallback.py b/source4/build/scons/fallback.py new file mode 100644 index 0000000000..d8db9ec268 --- /dev/null +++ b/source4/build/scons/fallback.py @@ -0,0 +1,34 @@ +# Generate fallback configure + Makefile +# Copyright (C) 2005 Jelmer Vernooij + +# No support for: +# - cross-compilation +# - caching +# - config.status (?) + +import SCons.Defaults +import SCons.Util +import SCons.Tool + +# Configure structure: +# - Check for available tools first +# - Check for available tool capabilities (C99, volatile, etc) +# - Check for available `base' headers +# - Check for available types +# - Check for libs / headers +def configure_builder(target, source, env): + pass + +# Makefile structure: +# - Declare all variables first +# - Declare targets + dependencies + actions + +def makefile_builder(target, source, env): + pass + +def generate(env): + env['BUILDERS']['ConfigureScript'] = configure_builder + env['BUILDERS']['MakefileIn'] = makefile_in_builder + +def exists(env): + return 1 diff --git a/source4/build/scons/iconv.py b/source4/build/scons/iconv.py deleted file mode 100644 index 940e2d814d..0000000000 --- a/source4/build/scons/iconv.py +++ /dev/null @@ -1,81 +0,0 @@ -# Based on the M4 macro by Bruno Haible. - -def exists(env): - return True - -def generate(env): - env['custom_tests']['CheckIconv'] = CheckIconv - -def _CheckIconvPath(context,path): - # Some systems have iconv in libc, some have it in libiconv (OSF/1 and - # those with the standalone portable libiconv installed). - context.Message("checking for iconv in " + path) - - main = """ -int main() -{ - iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - return 0; -}""" - - have_giconv_iconv = context.TryLink(""" -#include -#include -""" + main, '.c') - if have_giconv_iconv: - context.Result(1) - return ("giconv.h", "") - - have_iconv_iconv = context.TryLink(""" -#include -#include -""" + main, '.c') - - if have_iconv_iconv: - context.Result(1) - return ("iconv.h", "") - - #FIXME: Add -lgiconv - have_giconv_lib_iconv = context.TryLink(""" -#include -#include -""" + main, '.c') - if have_giconv_lib_iconv: - context.Result(1) - return ("giconv.h", "-lgiconv") - - #FIXME: Add -liconv - have_iconv_lib_iconv = context.TryLink(""" -#include -#include -"""+main,'.c') - - if have_iconv_lib_iconv: - context.Result(1) - return ("iconv.h", "-liconv") - - return None - -def CheckIconv(context): - context.Message("checking for iconv") - - look_dirs = ['/usr','/usr/local','/sw'] - - for p in look_dirs: - _CheckIconvPath(context,p) #FIXME: Handle return value - - if context.TryRun(""" -#include -main() { - iconv_t cd = iconv_open("ASCII", "UCS-2LE"); - if (cd == 0 || cd == (iconv_t)-1) return -1; - return 0; -} -""", '.c'): - context.Result(1) - return (1,[]) - - context.Result(0) - return (0,[]) diff --git a/source4/build/scons/pidl.py b/source4/build/scons/pidl.py index b29584c756..0c5c16b0b5 100644 --- a/source4/build/scons/pidl.py +++ b/source4/build/scons/pidl.py @@ -10,7 +10,7 @@ import SCons.Scanner idl_scanner = SCons.Scanner.ClassicCPP("PIDLScan", '.idl', 'CPPPATH', r'depends\(([^,]+),+\)', SCons.Node.FS.default_fs) -def idl_emitter(target, source, env): +def ndr_emitter(target, source, env): result = [] for s in source: base, ext = SCons.Util.splitext(str(s).split('/')[-1]) @@ -19,16 +19,34 @@ def idl_emitter(target, source, env): result.append('gen_ndr/%s.h' % base) return result, source -pidl_builder = SCons.Builder.Builder(action='$PIDLCOM', - emitter = idl_emitter, +ndr_builder = SCons.Builder.Builder(action='$NDRCOM', + emitter = ndr_emitter, src_suffix = '.idl', scanner = idl_scanner) +def tdr_emitter(target, source, env): + result = [] + for s in source: + base, ext = SCons.Util.splitext(str(s).split('/')[-1]) + result.append('%s/tdr_%s.c' % (s.get_dir(), base)) + result.append('%s/tdr_%s.h' % (s.get_dir(), base)) + result.append('%s/%s.h' % (s.get_dir(), base)) + return result, source + +tdr_builder = SCons.Builder.Builder(action='$TDRCOM', + emitter = tdr_emitter, + src_suffix = '.idl', + single_source = True, + scanner = idl_scanner) + def generate(env): env['PIDL'] = env.Detect(['./pidl/pidl', 'pidl']) - env['PIDLFLAGS'] = ['--outputdir', 'librpc/gen_ndr', '--ndr-header', '--ndr-parser', '--header'] - env['PIDLCOM'] = '$PIDL $PIDLFLAGS -- $SOURCE' - env['BUILDERS']['NdrMarshaller'] = pidl_builder + env['NDRFLAGS'] = ['--outputdir', 'librpc/gen_ndr','--ndr-header', '--ndr-parser','--header'] + env['TDRFLAGS'] = ['--tdr-parser', '--tdr-header','--header'] + env['NDRCOM'] = '$PIDL $NDRFLAGS -- $SOURCES' + env['TDRCOM'] = 'cd ${SOURCE.dir} && $PIDL $TDRFLAGS -- ${SOURCE.file}' + env['BUILDERS']['NdrMarshaller'] = ndr_builder + env['BUILDERS']['TdrMarshaller'] = tdr_builder def exists(env): return env.Detect(['./pidl/pidl','pidl']) diff --git a/source4/heimdal_build/SConscript b/source4/heimdal_build/SConscript index 9724ae7425..4d85d03f9f 100644 --- a/source4/heimdal_build/SConscript +++ b/source4/heimdal_build/SConscript @@ -5,9 +5,9 @@ hostenv.StaticLibrary('heimdal_kdc', '../kdc/log.c','../kdc/misc.c','../kdc/524.c','../kdc/kerberos4.c', '../kdc/kaserver.c','../kdc/process.c']) -hdb_asn1 = hostenv.ASN1('../heimdal/lib/hdb/hdb.asn1') -gssapi_asn1 = hostenv.ASN1('../heimdal/lib/gssapi/spnego.asn1') -k5_asn1 = hostenv.ASN1('../heimdal/lib/asn1/k5.asn1') +hdb_asn1 = hostenv.ASN1('../heimdal/lib/hdb/hdb.asn1',ASN1PREFIX='hdb_asn1') +gssapi_asn1 = hostenv.ASN1('../heimdal/lib/gssapi/spnego.asn1',ASN1PREFIX='spnego_asn1') +k5_asn1 = hostenv.ASN1('../heimdal/lib/asn1/k5.asn1',ASN1PREFIX='k5_asn1') hostenv.StaticLibrary('heimdal_hdb', ['../heimdal/lib/hdb/db.c','../heimdal/lib/hdb/hdb.c','../heimdal/lib/hdb/ext.c','../heimdal/lib/hdb/keys.c', diff --git a/source4/lib/charset/SConscript b/source4/lib/charset/SConscript index 53e5db44bb..b3305579e1 100644 --- a/source4/lib/charset/SConscript +++ b/source4/lib/charset/SConscript @@ -1,15 +1,91 @@ +#!/usr/bin/env python +# tastes like -*- python -*- + Import('hostenv') -SConscript('../../build/scons/iconv.py') -# tastes like -*- python -*- -#conf = Configure( custom_tests = { 'CheckIconv' : CheckIconv }) -#(have_iconv,iconv) = conf.CheckIconv() -#conf.Finish() +def _CheckIconvPath(context,path): + # Some systems have iconv in libc, some have it in libiconv (OSF/1 and + # those with the standalone portable libiconv installed). + context.Message("checking for iconv in " + path + " ... ") + + main = """ +int main() +{ + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + return 0; +}""" + + have_giconv_iconv = context.TryLink(""" +#include +#include +""" + main, '.c') + if have_giconv_iconv: + context.Result(1) + return ("giconv.h", "") + + have_iconv_iconv = context.TryLink(""" +#include +#include +""" + main, '.c') + + if have_iconv_iconv: + context.Result(1) + return ("iconv.h", "") + + #FIXME: Add -lgiconv + have_giconv_lib_iconv = context.TryLink(""" +#include +#include +""" + main, '.c') + if have_giconv_lib_iconv: + context.Result(1) + return ("giconv.h", "-lgiconv") + + #FIXME: Add -liconv + have_iconv_lib_iconv = context.TryLink(""" +#include +#include +"""+main,'.c') + + if have_iconv_lib_iconv: + context.Result(1) + return ("iconv.h", "-liconv") + + return None + +def CheckIconv(context): + context.Message("checking for iconv ... ") + + look_dirs = ['/usr','/usr/local','/sw'] + + for p in look_dirs: + _CheckIconvPath(context,p) #FIXME: Handle return value + + if context.TryRun(""" +#include +main() { + iconv_t cd = iconv_open("ASCII", "UCS-2LE"); + if (cd == 0 || cd == (iconv_t)-1) return -1; + return 0; +} +""", '.c'): + context.Result(1) + return (1,[]) + + context.Result(0) + return (0,[]) -#if not have_iconv: -# print "Install iconv for better charset compatibility" +if hostenv['configure']: + conf = hostenv.Configure( custom_tests = { 'CheckIconv' : CheckIconv }) + (have_iconv,iconv) = conf.CheckIconv() + conf.Finish() -iconv = [] + if not have_iconv: + print "Install iconv for better charset compatibility" +else: + iconv = [] # FIXME charset = hostenv.StaticLibrary('charset',['iconv.c','charcnv.c',iconv]) Export('charset') diff --git a/source4/lib/registry/SConscript b/source4/lib/registry/SConscript index a90557532b..aa2d587260 100644 --- a/source4/lib/registry/SConscript +++ b/source4/lib/registry/SConscript @@ -9,4 +9,12 @@ regshell = hostenv.Program('regshell', ['tools/regshell.c',registry,talloc,basic regpatch = hostenv.Program('regpatch', ['tools/regpatch.c',registry,talloc,basic,popt_common,popt,param]) regdiff = hostenv.Program('regdiff', ['tools/regdiff.c',registry,talloc,basic,popt_common,popt,param]) +hostenv.StaticLibrary('reg_backend_dir.c') +hostenv.StaticLibrary('reg_backend_gconf.c') +hostenv.StaticLibrary('reg_backend_ldb.c') +hostenv.StaticLibrary('reg_backend_nt4', ['reg_backend_nt4.c',hostenv.TdrMarshaller('regf.idl')]) +hostenv.StaticLibrary('reg_backend_rpc.c') +hostenv.StaticLibrary('reg_backend_w95.c') +hostenv.StaticLibrary('reg_backend_wine.c') + hostenv.Install(paths['BINDIR'], [regtree,regshell,regpatch,regdiff]) 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 + + diff --git a/source4/lib/socket/SConscript b/source4/lib/socket/SConscript index db449592c2..c4e791467a 100644 --- a/source4/lib/socket/SConscript +++ b/source4/lib/socket/SConscript @@ -1,5 +1,64 @@ +#!/usr/bin/env python Import('hostenv') + +if hostenv['configure']: + conf = hostenv.Configure() + conf.CheckCHeader('sys/socket.h') + conf.CheckCHeader('sys/sockio.h') + conf.CheckCHeader('sys/un.h') + #HAVE_SOCK_SIN_LEN + conf.TryCompile(""" +#include +#include +#include + +int main(void) +{ + struct sockaddr_in sock; sock.sin_len = sizeof(sock); + return 0; +}""", '.c') + + #HAVE_UNIXSOCKET + conf.TryCompile(""" +#include +#include +#include +#include +#include ], + +int main(void) +{ + struct sockaddr_un sunaddr; + sunaddr.sun_family = AF_UNIX; + return 0; +}""", '.c') + + # HAVE_IPV6 + conf.CheckFunc('gethostbyname2') + + # The following test taken from the cvs sources + # If we can't find connect, try looking in -lsocket, -lnsl, and -linet. + # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has + # libsocket.so which has a bad implementation of gethostbyname (it + # only looks in /etc/hosts), so we only look for -lsocket if we need + # it. + + connect_libs = [] + + if not conf.CheckFunc('connect'): + for l in ['nsl_s','nsl','socket','inet']: + if conf.CheckLib(l, 'connect'): + connect_libs.append(l) + break + + # HAVE_WORKING_AF_LOCAL + # FIXME: Try compiling build/tests/unixsock.c + + + conf.Finish() + hostenv.StaticLibrary('socket_ipv4.c') hostenv.StaticLibrary('socket_ipv6.c') hostenv.StaticLibrary('socket_unix.c') hostenv.StaticLibrary('socket', ['socket.c','access.c','connect.c']) + diff --git a/source4/ntvfs/simple/vfs_simple.c b/source4/ntvfs/simple/vfs_simple.c index 86ffab66ba..e9063c38c5 100644 --- a/source4/ntvfs/simple/vfs_simple.c +++ b/source4/ntvfs/simple/vfs_simple.c @@ -40,26 +40,6 @@ #define CHECK_READ_ONLY(req) do { if (lp_readonly(req->tcon->service)) return NT_STATUS_ACCESS_DENIED; } while (0) -#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 - /* connect to a share - used when a tree_connect operation comes in. For a disk based backend we needs to ensure that the base diff --git a/source4/script/tests/SConscript b/source4/script/tests/SConscript new file mode 100644 index 0000000000..010b12e844 --- /dev/null +++ b/source4/script/tests/SConscript @@ -0,0 +1,2 @@ +Alias('quicktest', '#selftest.sh st quick SOCKET_WRAPPER') +Alias('test', '#selftest.sh st all SOCKET_WRAPPER') -- cgit