da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinref -D_def_map_ast=1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincmd universe
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinhdr dirent,direntry,filio,fmtmsg,fnmatch,jioctl,libgen,limits
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinhdr locale,ndir,nl_types,process,spawn,syslog,utime,vfork,wctype
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinhdr wchar note{ <wchar.h> and isw*() really work }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <wchar.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin wchar_t w = 'a';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return iswalnum(w) == 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindat _tzname,tzname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib BSDsetpgrp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib _cleanup
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib atexit,bcopy,bzero,catclose,catgets,catopen,confstr,dirread,dup2
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib execlp,execve,execvp,execvpe
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib fchmod,fcntl,fmtmsg,fnmatch,fork,fsync
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib getconf,getdents,getdirentries,getdtablesize,getdate
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib getgroups,gethostname,getlogin,getpagesize,getrlimit,getuniverse
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib getopt,getsubopt,getopt_long,getopt_long_only
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib glob,index,iswblank,iswctype,killpg,link,localeconv,madvise
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib mbtowc,mbrtowc,memalign,memchr,memcpy,memdup,memmove,memset
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib mkdir,mkfifo,mktemp,mktime
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib mount,on_exit,onexit,opendir,pathconf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib readlink,remove,rename,rewinddir,rindex,rmdir,setlocale
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib setpgid,setpgrp,setpgrp2,setreuid,setsid,setuid,sigaction
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib sigprocmask,sigsetmask,sigunblock,sigvec,socketpair
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib spawn,spawnve,spawnveg
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib strchr,strcoll,strdup,strerror,strcasecmp,strncasecmp,strrchr,strstr
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib strmode,strxfrm,strftime,swab,symlink,sysconf,sysinfo,syslog
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib telldir,tmpnam,tzset,universe,unlink,utime,wctype
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib ftruncate,truncate
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib creat64,fstat64,fstatvfs64,ftruncate64 -D_LARGEFILE64_SOURCE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib lseek64,lstat64 -D_LARGEFILE64_SOURCE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib open64,readdir64,stat64,statvfs64,truncate64 -D_LARGEFILE64_SOURCE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib,npt strtod,strtold,strtol,strtoll,strtoul,strtoull stdlib.h
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknerlib,npt sigflag signal.h
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmem direct.d_reclen sys/types.h sys/dir.h
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmem dirent.d_fileno,dirent.d_ino,dirent.d_namlen,dirent.d_off,dirent.d_reclen,dirent.d_type sys/types.h dirent.h
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmem DIR sys/types.h - dirent.h - sys/dir.h
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmem DIR.dd_fd sys/types.h - dirent.h - sys/dir.h
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmem inheritance.pgroup spawn.h
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinsys dir,filio,jioctl,localedef,ptem,resource
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinsys socket,stream,systeminfo,universe,vfork
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintyp off64_t -D_LARGEFILE64_SOURCE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintyp struct.dirent64 -D_LARGEFILE64_SOURCE dirent.h
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst tst_errno note{ errno can be assigned }end link{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define error ______error
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define strerror ______strerror
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <errno.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #undef error
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #undef strerror
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef errno
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int errno;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin error() { }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin strerror() { }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int main() { errno = 0; error(); strerror(); return 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_poll_fd_1 note{ fd is first arg to poll() }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <poll.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int pipe _ARG_((int*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin { int rw[2];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct pollfd fd;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (pipe(rw) < 0) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fd.fd = rw[0];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fd.events = POLLIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fd.revents = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (poll(&fd, 1, 0) < 0 || fd.revents != 0) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (write(rw[1], "x", 1) != 1) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (poll(&fd, 1, 0) < 0 || fd.revents == 0) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_poll_fd_2 note{ fd is second arg to poll() }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <poll.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int pipe _ARG_((int*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin { int rw[2];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct pollfd fd;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (pipe(rw) < 0) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fd.fd = rw[0];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fd.events = POLLIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fd.revents = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return poll(1, &fd, 0) < 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (poll(1, &fd, 0) < 0 || fd.revents != 0) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (write(rw[1], "x", 1) != 1) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (poll(1, &fd, 0) < 0 || fd.revents == 0) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexp _lib_poll _lib_poll_fd_1||_lib_poll_fd_2
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_poll_notimer note{ poll with no fds ignores timeout }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/types.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <poll.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern time_t time _ARG_((time_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TIMEOUT 4
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long start;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long finish;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct pollfd fd;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin start = time((time_t*)0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (poll(&fd, 0, TIMEOUT * 1000) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin finish = time((time_t*)0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return (finish - start) > (TIMEOUT / 2);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_select note{ select() has standard 5 arg interface }end link{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/types.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/time.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/socket.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin { struct timeval tmb;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fd_set rd;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin FD_ZERO(&rd);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin FD_SET(0,&rd);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin tmb.tv_sec = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin tmb.tv_usec = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin select(1,&rd,(fd_set*)0,(fd_set*)0,&tmb);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst pipe_rw note{ full duplex pipes }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int pipe _ARG_((int*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int read _ARG_((int, void*, int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int strcmp _ARG_((const char*, const char*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int write _ARG_((int, void*, int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(__sgi) || defined(_sgi) || defined(sgi)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* boot tuneable pipes force one way for bin compatibility */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static char test[] = "test\n";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int io[2];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char buf[sizeof(test)];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (pipe(io)) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (write(io[1], test, sizeof(test)) != sizeof(test)) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (read(io[0], buf, sizeof(test)) != sizeof(test)) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (strcmp(test, buf)) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (write(io[0], test, sizeof(test)) != sizeof(test)) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (read(io[1], buf, sizeof(test)) != sizeof(test)) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (strcmp(test, buf)) return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_vfork unistd.h stdlib.h vfork.h note{ vfork exists and it works }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <signal.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main(argc, argv)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int argc;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char** argv;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int status;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* cmd[3];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (argv[1])
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(signal(SIGHUP, SIG_DFL) != SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGHUP, SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin switch (vfork())
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case -1:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 0:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[0] = argv[0];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[1] = "test";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[2] = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin execv(cmd[0], cmd);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(2);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin status = 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(wait(&status) < 0 || status != 0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst real_vfork note{ vfork child shares data with parent }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int _exit _ARG_((int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int vfork _ARG_((void));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int code;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin code = 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!vfork())
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin code = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(code);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_posix_spawn unistd.h stdlib.h spawn.h -Dfork=______fork note{ posix_spawn exists and it works and its worth using }end status{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/types.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/stat.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/wait.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <spawn.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <signal.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <fcntl.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <string.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #undef fork
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* if it uses fork() why bother? */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin pid_t fork _ARG_((void)) { return -1; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin pid_t _fork _ARG_((void)) { return -1; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin pid_t __fork _ARG_((void)) { return -1; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main(argc, argv)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int argc;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char** argv;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin pid_t pid;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin posix_spawnattr_t attr;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int status;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* cmd[3];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char tmp[1024];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (argv[1])
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(signal(SIGHUP, SIG_DFL) != SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGHUP, SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (posix_spawnattr_init(&attr))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (posix_spawnattr_setpgroup(&attr, 0))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETPGROUP))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* first try an a.out and verify that SIGHUP is ignored */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[0] = argv[0];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[1] = "test";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[2] = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (posix_spawn(&pid, cmd[0], 0, &attr, cmd, 0))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin status = 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (wait(&status) < 0 || status != 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* passing ENOEXEC to the shell is bogus */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin n = strlen(cmd[0]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (n >= (sizeof(tmp) - 3))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin strcpy(tmp, cmd[0]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin tmp[n] = '.';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin tmp[n+1] = 's';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin tmp[n+2] = 'h';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin tmp[n+3] = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (close(open(tmp, O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO)) < 0 || chmod(tmp, S_IRWXU|S_IRWXG|S_IRWXO) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[0] = tmp;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin n = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin pid = -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (posix_spawn(&pid, cmd[0], 0, &attr, cmd, 0))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin n = 2;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin n = pid != -1 && waitpid(pid, &status, WNOHANG|WNOWAIT) == pid && ((status>>8)&0x7f) == 127;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin wait(&status);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(n);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_spawn_mode unistd.h stdlib.h note{ first spawn arg is mode and it works }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <signal.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <process.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef P_NOWAIT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define P_NOWAIT _P_NOWAIT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main(argc, argv)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int argc;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char** argv;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int status;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* cmd[3];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (argv[1])
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(signal(SIGHUP, SIG_DFL) != SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGHUP, SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[0] = argv[0];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[1] = "test";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmd[2] = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (spawnv(P_NOWAIT, cmd[0], cmd) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin status = 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _exit(wait(&status) < 0 || status != 0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknertst stream_peek note{ ioctl(I_PEEK) works }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/types.h>
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner #include <unistd.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <stropts.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner { struct strpeek peek;
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner int fds[2];
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner char ctlbuf[32];
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner char databuf[32];
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner peek.flags = 0;
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner peek.ctlbuf.maxlen = peek.ctlbuf.len = sizeof(ctlbuf);
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner peek.ctlbuf.buf = ctlbuf;
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner peek.databuf.maxlen = peek.databuf.len = sizeof(databuf);
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner peek.databuf.buf = databuf;
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner pipe(fds);
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner return ioctl(fds[0],I_PEEK,&peek) < 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst socket_peek note{ recv(MSG_PEEK) works }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <unistd.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/types.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/socket.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int i;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int fds[2];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char buf[128];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static char msg[] = "abcd";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (write(fds[1], msg, sizeof(msg)) != sizeof(msg))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (recv(fds[0], buf, sizeof(buf), MSG_PEEK) != sizeof(msg))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (i = 0; i < sizeof(msg); i++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (buf[i] != msg[i])
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (read(fds[0], buf, sizeof(msg)) != sizeof(msg))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (i = 0; i < sizeof(msg); i++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (buf[i] != msg[i])
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_memcmp string.h note{ standard memcmp interface that works }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* sgi again -- we're sick of being their regression test */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define L 8
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char a[L] = { '0' };
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char b[L] = { '1' };
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return memcmp(a, b, L) >= 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_memccpy string.h unistd.h stdlib.h fcntl.h signal.h sys/types.h sys/stat.h sys/mman.h fcntl.h note{ standard memccpy interface that works }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _STD_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static void gotcha(int sig)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static int gotcha(sig) int sig;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin exit(1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef MAP_PRIVATE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static const char x[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxN";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _STD_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static int indict_sgi_ia64_4Q_2004(int n)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static int indict_sgi_ia64_4Q_2004(n) int n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* b;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* e;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long m;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int d;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char u[1024];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static char p[32] = {'/','t','m','p','/','m','m'};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (d = 7; d < 13; d++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin p[d] = 'X';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin p[d] = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((d = mkstemp(p)) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin remove(p);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (m = 0; m < n; m++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (write(d, x, sizeof(x)-1) != sizeof(x)-1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin close(d);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (lseek(d, (off_t)0, SEEK_SET))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin close(d);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin m = n * (sizeof(x)-1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(b = mmap((void*)0, m, PROT_READ|PROT_WRITE, MAP_PRIVATE, d, (off_t)0)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin close(d);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (e = (s = b) + m; s < e && (t = memccpy(u, s, 'N', (e-s) > sizeof(u) ? sizeof(u) : (e-s))); s += (t-u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((t-u) != (sizeof(x)-1) || memcmp(u, s, t-u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin close(d);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (s < e)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin close(d);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin close(d);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main ()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char buf[1024];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef MAP_PRIVATE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* srcbuf;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* dstbuf;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int fd;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin size_t siz;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int i;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz #if defined(__ia64) || defined(__ia64__) || defined(__itanium__)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz /*
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz * 0 faith that the itanium coders will ever get this right
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz * prove me wrong
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz */
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz return 1;
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * early mac osx failed here -- fixed 3Q 2001
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (memccpy(buf, "abc", 0, sizeof(buf)) != (buf + 4))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef MAP_PRIVATE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin siz = 64 * 1024;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(dstbuf = malloc(2 * siz)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((fd = open("/dev/zero", O_RDWR)) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(srcbuf = (char*)mmap(NULL, siz, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!mmap(srcbuf + siz, siz, PROT_NONE, MAP_PRIVATE, fd, 0))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (i = 0; i < siz; i++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin srcbuf[i] = 'x';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin srcbuf[siz - 1] = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin alarm(10);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGSEGV, gotcha);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGBUS, gotcha);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGALRM, gotcha);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * sgi ia64 dumps here as of 3Q 2001
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * bug acknowleged 1Q 2003
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin memccpy(dstbuf, srcbuf, 0, siz + 10);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin alarm(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (strcmp(srcbuf, dstbuf))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (indict_sgi_ia64_4Q_2004(1))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (indict_sgi_ia64_4Q_2004(257))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst lib_utime_now note{ utime works with 0 time vector }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/types.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int utime _ARG_((const char*, void*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return utime(".", (void*)0) == -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst cross{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin u=att
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case `/bin/cat -s /dev/null/foo 2>&1` in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin '') ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *) case `/bin/echo '\\t'` in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin '\t') u=ucb ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin esac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin esac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#define _UNIV_DEFAULT \"$u\" /* default universe name */"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstd cleanup note{ stuck with standard _cleanup }end noexecute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void exit _ARG_((int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void _exit _ARG_((int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void _cleanup();
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void _cleanup() { _exit(0); }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int main() { printf("cleanup\n"); exit(1); }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstd remove note{ stuck with standard remove() }end nostatic{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int unlink _ARG_((const char*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _STD_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int remove(const char* path) { return 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int remove(path) char* path; { return 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int main() { return unlink("foo"); }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstd signal note{ stuck with standard signal }end nolink{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int abort();
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int signal() { return 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int main() { signal(); abort(); return 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstd strcoll note{ standard strcoll works }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <string.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define S "hello world"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char s[] = S;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char t[] = S;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return strcoll(s, t) || strcmp(s, t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstd strtod stdlib.h note{ stuck with standard strtod }end nostatic{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _STD_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin double strtod(const char* s, char** e) { return 0.0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin double strtod(s, e) char* s; char** e; { return 0.0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int main() { printf(""); return strtod("1",0) != 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstd strtold stdlib.h note{ stuck with standard strtold }end nostatic{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _STD_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long double strtold(const char* s, char** e) { return 0.0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long double strtold(s, e) char* s; char** e; { return 0.0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int main() { printf(""); return strtold("1",0) != 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstd strtol note{ stuck with standard strtol }end nostatic{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _BEGIN_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _STD_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern long atol(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long strtol(const char* s, char** e, int b) { return 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern long atol();
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long strtol(s, e, b) char* s; char** e; int b; { return 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _END_EXTERNS_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int main() { printf(""); return (atol("1") + strtol("1",(char**)0,0)) != 0; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst - output{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _UWIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("/* override some uwin feature tests */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#undef _lib_execlp\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#undef _lib_execvp\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#undef _lib_execvpe\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#undef _lib_fork\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#undef _std_string\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _std_string 1\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#undef _stream_peek\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _lib_spawnveg || _lib_posix_spawn || _lib_spawn_mode || _lib_spawn && _hdr_spawn && _mem_pgroup_inheritance || _lib_vfork && _real_vfork
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#if !_AST_no_spawnveg\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _use_spawnveg 1\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst no64 -D_LARGEFILE64_SOURCE note{ largefile 64 broken }end execute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/types.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <sys/stat.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin main()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct stat64 st;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return !stat64(".", &st) && st.st_mode && st.st_mtime;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end pass{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "/* can we at least agree that a successful return means success? */"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_creat64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_fstat64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_fstatvfs64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_ftruncate64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_lseek64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_lstat64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_mmap64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_stat64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_statvfs64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#undef _lib_truncate64"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end