2 /* Copyright Gerhard Rieger and contributors (see file CHANGES) */
3 /* Published under the GNU General Public License V.2, see file COPYING */
5 /* explicit system call and C library trace function, for those who miss strace
9 #include "xioconfig.h" /* what features are enabled */
11 #include "sysincludes.h"
26 mode_t
Umask(mode_t mask
) {
29 Debug1("umask("F_mode
")", mask
);
32 Debug1("umask() -> "F_mode
, result
);
37 #endif /* WITH_SYCLS */
40 int Open(const char *pathname
, int flags
, mode_t mode
) {
42 if (!diag_in_handler
) diag_flush();
44 Debug3("open(\"%s\", 0%o, 0%03o)", pathname
, flags
, mode
);
45 #endif /* WITH_SYCLS */
46 result
= open(pathname
, flags
, mode
);
48 if (!diag_in_handler
) diag_flush();
50 Info4("open(\"%s\", 0%o, 0%03o) -> %d", pathname
, flags
, mode
, result
);
51 #endif /* WITH_SYCLS */
58 int Creat(const char *pathname
, mode_t mode
) {
60 Debug2("creat(\"%s\", 0%03o)", pathname
, mode
);
61 result
= creat(pathname
, mode
);
63 Info3("creat(\"%s\", 0%03o) -> %d", pathname
, mode
, result
);
68 off_t
Lseek(int fildes
, off_t offset
, int whence
) {
71 Debug3("lseek(%d, "F_off
", %d)", fildes
, offset
, whence
);
72 result
= lseek(fildes
, offset
, whence
);
74 Debug1("lseek() -> "F_off
, result
);
80 off64_t
Lseek64(int fildes
, off64_t offset
, int whence
) {
83 Debug3("lseek64(%d, "F_off64
", %d)", fildes
, offset
, whence
);
84 result
= lseek64(fildes
, offset
, whence
);
86 Debug1("lseek64() -> "F_off64
, result
);
90 #endif /* HAVE_LSEEK64 */
98 Debug1("getpid() -> "F_pid
, result
);
103 pid_t
Getppid(void) {
109 Debug1("getppid() -> "F_pid
, result
);
114 pid_t
Getpgrp(void) {
120 Debug1("getpgrp() -> "F_pid
, result
);
125 #if 0 /* does not compile for FreeBSD */
126 /* setpgrp() is not BSD compatible, needs setpgid(..., ...) instead */
132 Debug1("setpgrp() -> %d", result
);
139 int Getpgid(pid_t pid
) {
142 Debug1("getpgid("F_pid
")", pid
);
143 result
= getpgid(pid
);
145 Debug1("getpgid() -> "F_pid
, result
);
151 int Setpgid(pid_t pid
, pid_t pgid
) {
153 Debug2("setpgid("F_pid
", "F_pid
")", pid
, pgid
);
154 result
= setpgid(pid
, pgid
);
156 Debug1("setpgid() -> %d", result
);
161 pid_t
Tcgetpgrp(int fd
) {
163 Debug1("tcgetpgrp(%d)", fd
);
164 result
= tcgetpgrp(fd
);
166 Debug1("tcgetpgrp() -> %d", result
);
171 int Tcsetpgrp(int fd
, pid_t pgrpid
) {
173 Debug2("tcsetpgrp(%d, "F_pid
")", fd
, pgrpid
);
174 result
= tcsetpgrp(fd
, pgrpid
);
176 Debug1("tcsetpgrp() -> %d", result
);
182 pid_t
Getsid(pid_t pid
) {
184 Debug1("getsid("F_pid
")", pid
);
185 result
= getsid(pid
);
187 Debug1("getsid() -> "F_pid
, result
);
198 Debug1("setsid() -> "F_pid
, result
);
209 Debug1("getuid() -> "F_uid
, result
);
214 uid_t
Geteuid(void) {
220 Debug1("geteuid() -> "F_uid
, result
);
225 int Setuid(uid_t uid
) {
227 Debug1("setuid("F_uid
")", uid
);
228 result
= setuid(uid
);
230 Debug1("setuid() -> %d", result
);
241 Debug1("getgid() -> "F_gid
, result
);
246 gid_t
Getegid(void) {
252 Debug1("getegid() -> "F_gid
, result
);
257 int Setgid(gid_t gid
) {
259 Debug1("setgid("F_gid
")", gid
);
260 result
= setgid(gid
);
262 Debug1("setgid() -> %d", result
);
267 int Initgroups(const char *user
, gid_t group
) {
269 Debug2("initgroups(\"%s\", "F_gid
")", user
, group
);
270 result
= initgroups(user
, group
);
272 Debug1("initgroups() -> %d", result
);
277 int Getgroups(int size
, gid_t list
[]) {
279 Debug2("getgroups(%d, "F_gid
",...)", size
, list
[0]);
280 result
= getgroups(size
, list
);
282 Debug1("getgroups() -> %d", result
);
288 int Setgroups(size_t size
, const gid_t
*list
) {
291 case 0: Debug1("setgroups("F_Zu
", [])", size
); break;;
292 case 1: Debug2("setgroups("F_Zu
", ["F_gid
"])", size
, list
[0]); break;;
293 case 2: Debug3("setgroups("F_Zu
", ["F_gid
","F_gid
"])", size
, list
[0], list
[1]); break;;
294 default: Debug3("setgroups("F_Zu
", ["F_gid
","F_gid
",...])", size
, list
[0], list
[1]); break;;
296 result
= setgroups(size
, list
);
298 Debug1("setgroups() -> %d", result
);
304 #if HAVE_GETGROUPLIST
305 int Getgrouplist(const char *user
, gid_t group
, gid_t
*groups
, int *ngroups
) {
306 int n
= *ngroups
, result
;
307 Debug4("getgrouplist(\"%s\", "F_gid
", %p, [%d])", user
, group
, groups
, n
);
308 result
= getgrouplist(user
, group
, groups
, ngroups
);
309 switch (Min(n
,*ngroups
)) {
310 case 0: Debug2("getgrouplist(,, [], [%d]) -> %d", *ngroups
, result
); break;
311 case 1: Debug3("getgrouplist(,, ["F_gid
"], [%d]) -> %d", groups
[0], *ngroups
, result
); break;
312 case 2: Debug4("getgrouplist(,, ["F_gid
","F_gid
"], [%d]) -> %d", groups
[0], groups
[1], *ngroups
, result
); break;
313 default: Debug4("getgrouplist(,, ["F_gid
","F_gid
",...], [%d]) -> %d", groups
[0], groups
[1], *ngroups
, result
); break;
319 int Chdir(const char *path
) {
321 Debug1("chdir(\"%s\")", path
);
322 result
= chdir(path
);
324 Debug1("chdir() -> %d", result
);
329 int Chroot(const char *path
) {
331 Debug1("chroot(\"%s\")", path
);
332 result
= chroot(path
);
334 Debug1("chroot() -> %d", result
);
339 int Gettimeofday(struct timeval
*tv
, struct timezone
*tz
) {
341 #if WITH_MSGLEVEL <= E_DEBUG
343 Debug3("gettimeofday(%p, {%d,%d})",
344 tv
, tz
->tz_minuteswest
, tz
->tz_dsttime
);
346 Debug1("gettimeofday(%p, NULL)", tv
);
348 #endif /* WITH_MSGLEVEL <= E_DEBUG */
349 result
= gettimeofday(tv
, tz
);
351 #if WITH_MSGLEVEL <= E_DEBUG
353 Debug5("gettimeofday({%ld,%ld}, {%d,%d}) -> %d",
354 tv
->tv_sec
, tv
->tv_usec
, tz
->tz_minuteswest
, tz
->tz_dsttime
,
357 Debug3("gettimeofday({%ld,%ld},) -> %d",
358 tv
->tv_sec
, tv
->tv_usec
, result
);
360 #endif /* WITH_MSGLEVEL <= E_DEBUG */
365 int Mknod(const char *pathname
, mode_t mode
, dev_t dev
) {
367 Debug3("mknod(\"%s\", 0%o, "F_dev
")", pathname
, mode
, dev
);
368 result
= mknod(pathname
, mode
, dev
);
370 Debug1("mknod() -> %d", result
);
375 int Mkfifo(const char *pathname
, mode_t mode
) {
377 Debug2("mkfifo(\"%s\", 0%o)", pathname
, mode
);
378 result
= mkfifo(pathname
, mode
);
380 Debug1("mkfifo() -> %d", result
);
385 static void prtstat(const char *func
, struct stat
*buf
, int result
) {
386 char txt
[256], *t
= txt
;
388 t
+= sprintf(t
, "%s(, {"F_dev
","F_st_ino
","F_mode
","F_st_nlink
","F_uid
","F_gid
,
389 func
, buf
->st_dev
, buf
->st_ino
,
390 buf
->st_mode
, buf
->st_nlink
, buf
->st_uid
, buf
->st_gid
);
392 t
+= sprintf(t
, ","F_dev
, buf
->st_rdev
);
394 t
+= sprintf(t
, ","F_st_size
, buf
->st_size
);
396 t
+= sprintf(t
, ","F_st_blksize
, buf
->st_blksize
);
399 t
+= sprintf(t
, ","F_st_blocks
, buf
->st_blocks
);
401 sprintf(t
, ",...}) -> %d", result
);
405 #if defined(HAVE_STAT64) || defined(HAVE_FSTAT64) || defined(HAVE_LSTAT64)
406 static void prtstat64(const char *func
, struct stat64
*buf
, int result
) {
407 char txt
[256], *t
= txt
;
410 sprintf(t
, "%s(, {}) -> %d", func
, result
);
412 t
+= sprintf(t
, "%s(, {"F_dev
","F_st64_ino
","F_mode
","F_st_nlink
","F_uid
","F_gid
,
413 func
, buf
->st_dev
, buf
->st_ino
,
414 buf
->st_mode
, buf
->st_nlink
, buf
->st_uid
, buf
->st_gid
);
416 t
+= sprintf(t
, ","F_dev
, buf
->st_rdev
);
418 t
+= sprintf(t
, ","F_st64_size
, buf
->st_size
);
420 t
+= sprintf(t
, ","F_st_blksize
, buf
->st_blksize
);
423 t
+= sprintf(t
, ","F_st64_blocks
, buf
->st_blocks
);
425 sprintf(t
, ",...}) -> %d", result
);
429 #endif /* defined(HAVE_STAT64) || defined(HAVE_FSTAT64) || defined(HAVE_LSTAT64) */
431 int Stat(const char *file_name
, struct stat
*buf
) {
433 Debug2("stat(%s, %p)", file_name
, buf
);
434 result
= stat(file_name
, buf
);
436 prtstat("stat", buf
, result
);
442 int Stat64(const char *file_name
, struct stat64
*buf
) {
444 Debug2("stat64(%s, %p)", file_name
, buf
);
445 result
= stat64(file_name
, buf
);
447 prtstat64("stat64", buf
, result
);
451 #endif /* HAVE_STAT64 */
453 int Fstat(int filedes
, struct stat
*buf
) {
455 Debug2("fstat(%d, %p)", filedes
, buf
);
456 result
= fstat(filedes
, buf
);
458 prtstat("fstat", buf
, result
);
464 int Fstat64(int filedes
, struct stat64
*buf
) {
466 Debug2("fstat64(%d, %p)", filedes
, buf
);
467 result
= fstat64(filedes
, buf
);
469 prtstat64("fstat64", buf
, result
);
473 #endif /* HAVE_FSTAT64 */
475 int Lstat(const char *file_name
, struct stat
*buf
) {
477 Debug2("lstat(%s, %p)", file_name
, buf
);
478 result
= lstat(file_name
, buf
);
480 prtstat("lstat", buf
, result
);
486 int Lstat64(const char *file_name
, struct stat64
*buf
) {
488 Debug2("lstat64(%s, %p)", file_name
, buf
);
489 result
= lstat64(file_name
, buf
);
491 prtstat64("lstat64", buf
, result
);
495 #endif /* HAVE_LSTAT64 */
499 Debug1("dup(%d)", oldfd
);
502 Info2("dup(%d) -> %d", oldfd
, newfd
);
507 int Dup2(int oldfd
, int newfd
) {
509 Debug2("dup2(%d, %d)", oldfd
, newfd
);
510 result
= dup2(oldfd
, newfd
);
512 Info3("dup2(%d, %d) -> %d", oldfd
, newfd
, result
);
517 int Pipe(int filedes
[2]) {
519 Debug1("pipe(%p)", filedes
);
520 result
= pipe(filedes
);
522 Info3("pipe({%d,%d}) -> %d", filedes
[0], filedes
[1], result
);
527 #endif /* WITH_SYCLS */
529 ssize_t
Read(int fd
, void *buf
, size_t count
) {
532 if (!diag_in_handler
) diag_flush();
534 Debug3("read(%d, %p, "F_Zu
")", fd
, buf
, count
);
535 #endif /* WITH_SYCLS */
536 result
= read(fd
, buf
, count
);
538 if (!diag_in_handler
) diag_flush();
540 Debug1("read -> "F_Zd
, result
);
541 #endif /* WITH_SYCLS */
546 ssize_t
Write(int fd
, const void *buf
, size_t count
) {
549 if (!diag_in_handler
) diag_flush();
551 Debug3("write(%d, %p, "F_Zu
")", fd
, buf
, count
);
552 #endif /* WITH_SYCLS */
553 result
= write(fd
, buf
, count
);
555 if (!diag_in_handler
) diag_flush();
557 Debug1("write -> "F_Zd
, result
);
558 #endif /* WITH_SYCLS */
563 int Fcntl(int fd
, int cmd
) {
565 if (!diag_in_handler
) diag_flush();
567 Debug2("fcntl(%d, %d)", fd
, cmd
);
568 #endif /* WITH_SYCLS */
569 result
= fcntl(fd
, cmd
);
570 if (!diag_in_handler
) diag_flush();
573 Debug1("fcntl() -> %d", result
);
574 #endif /* WITH_SYCLS */
579 int Fcntl_l(int fd
, int cmd
, long arg
) {
581 if (!diag_in_handler
) diag_flush();
583 Debug3("fcntl(%d, %d, %ld)", fd
, cmd
, arg
);
584 #endif /* WITH_SYCLS */
585 result
= fcntl(fd
, cmd
, arg
);
587 if (!diag_in_handler
) diag_flush();
589 Debug1("fcntl() -> %d", result
);
590 #endif /* WITH_SYCLS */
595 int Fcntl_lock(int fd
, int cmd
, struct flock
*l
) {
597 if (!diag_in_handler
) diag_flush();
599 Debug7("fcntl(%d, %d, {type=%hd,whence=%hd,start="F_off
",len="F_off
",pid="F_pid
"})",
600 fd
, cmd
, l
->l_type
, l
->l_whence
, l
->l_start
, l
->l_len
, l
->l_pid
);
601 #endif /* WITH_SYCLS */
602 result
= fcntl(fd
, cmd
, l
);
604 if (!diag_in_handler
) diag_flush();
606 Debug1("fcntl() -> %d", result
);
607 #endif /* WITH_SYCLS */
614 int Ftruncate(int fd
, off_t length
) {
616 Debug2("ftruncate(%d, "F_off
")", fd
, length
);
617 retval
= ftruncate(fd
, length
);
619 Debug1("ftruncate() -> %d", retval
);
625 int Ftruncate64(int fd
, off64_t length
) {
627 Debug2("ftruncate64(%d, "F_off64
")", fd
, length
);
628 retval
= ftruncate64(fd
, length
);
630 Debug1("ftruncate64() -> %d", retval
);
634 #endif /* HAVE_FTRUNCATE64 */
636 #endif /* WITH_SYCLS */
639 int Flock(int fd
, int operation
) {
641 if (!diag_in_handler
) diag_flush();
643 Debug2("flock(%d, %d)", fd
, operation
);
644 #endif /* WITH_SYCLS */
645 retval
= flock(fd
, operation
);
647 if (!diag_in_handler
) diag_flush();
649 Debug1("flock() -> %d", retval
);
650 #endif /* WITH_SYCLS */
654 #endif /* HAVE_FLOCK */
656 int Ioctl(int d
, int request
, void *argp
) {
658 if (!diag_in_handler
) diag_flush();
660 if (argp
> (void *)0x10000) { /* fuzzy...*/
661 Debug4("ioctl(%d, 0x%x, %p{%lu})", d
, request
, argp
, *(unsigned long *)argp
);
663 Debug3("ioctl(%d, 0x%x, 0x%p)", d
, request
, argp
);
665 #endif /* WITH_SYCLS */
666 retval
= ioctl(d
, request
, argp
);
668 if (!diag_in_handler
) diag_flush();
670 Debug1("ioctl() -> %d", retval
);
671 #endif /* WITH_SYCLS */
676 int Ioctl_int(int d
, int request
, int arg
) {
678 if (!diag_in_handler
) diag_flush();
680 Debug3("ioctl(%d, 0x%x, %d)", d
, request
, arg
);
681 #endif /* WITH_SYCLS */
682 retval
= ioctl(d
, request
, arg
);
684 if (!diag_in_handler
) diag_flush();
686 Debug1("ioctl() -> %d", retval
);
687 #endif /* WITH_SYCLS */
696 Info1("close(%d)", fd
);
699 Debug1("close() -> %d", retval
);
704 int Fchown(int fd
, uid_t owner
, gid_t group
) {
706 Debug3("fchown(%d, "F_uid
", "F_gid
")", fd
, owner
, group
);
707 retval
= fchown(fd
, owner
, group
);
709 Debug1("fchown() -> %d", retval
);
714 int Fchmod(int fd
, mode_t mode
) {
716 Debug2("fchmod(%d, 0%o)", fd
, mode
);
717 retval
= fchmod(fd
, mode
);
719 Debug1("fchmod() -> %d", retval
);
724 int Unlink(const char *pathname
) {
726 Debug1("unlink(\"%s\")", pathname
);
727 retval
= unlink(pathname
);
729 Debug1("unlink() -> %d", retval
);
734 int Symlink(const char *oldpath
, const char *newpath
) {
736 Debug2("symlink(\"%s\", \"%s\")", oldpath
, newpath
);
737 retval
= symlink(oldpath
, newpath
);
739 Debug1("symlink() -> %d", retval
);
744 int Readlink(const char *path
, char *buf
, size_t bufsiz
) {
746 Debug3("readlink(\"%s\", %p, "F_Zu
")", path
, buf
, bufsiz
);
747 retval
= readlink(path
, buf
, bufsiz
);
749 Debug1("readlink() -> %d", retval
);
754 int Chown(const char *path
, uid_t owner
, gid_t group
) {
756 Debug3("chown(\"%s\", "F_uid
", "F_gid
")", path
, owner
, group
);
757 retval
= chown(path
, owner
, group
);
759 Debug1("chown() -> %d", retval
);
764 int Chmod(const char *path
, mode_t mode
) {
766 Debug2("chmod(\"%s\", 0%o)", path
, mode
);
767 retval
= chmod(path
, mode
);
769 Debug1("chmod() -> %d", retval
);
774 #endif /* WITH_SYCLS */
777 /* we only show the first struct pollfd; hope this is enough for most cases. */
778 int Poll(struct pollfd
*ufds
, unsigned int nfds
, int timeout
) {
780 if (!diag_in_handler
) diag_flush();
783 Debug10("poll({%d,0x%02hx,}{%d,0x%02hx,}{%d,0x%02hx,}{%d,0x%02hx,}, %u, %d)",
784 ufds
[0].fd
, ufds
[0].events
, ufds
[1].fd
, ufds
[1].events
,
785 ufds
[2].fd
, ufds
[2].events
, ufds
[3].fd
, ufds
[3].events
,
788 Debug4("poll({%d,0x%02hx,}, , %u, %d)", ufds
[0].fd
, ufds
[0].events
, nfds
, timeout
);
790 #endif /* WITH_SYCLS */
791 result
= poll(ufds
, nfds
, timeout
);
793 if (!diag_in_handler
) diag_flush();
796 Debug5("poll(, {,,0x%02hx}{,,0x%02hx}{,,0x%02hx}{,,0x%02hx}) -> %d",
797 ufds
[0].revents
, ufds
[1].revents
, ufds
[2].revents
, ufds
[3].revents
, result
);
799 Debug2("poll(, {,,0x%02hx}) -> %d", ufds
[0].revents
, result
);
801 #endif /* WITH_SYCLS */
805 #endif /* HAVE_POLL */
807 /* we only show the first word of the fd_set's; hope this is enough for most
809 int Select(int n
, fd_set
*readfds
, fd_set
*writefds
, fd_set
*exceptfds
,
810 struct timeval
*timeout
) {
812 if (!diag_in_handler
) diag_flush();
815 Debug7("select(%d, &0x%lx, &0x%lx, &0x%lx, %s%lu."F_tv_usec
")",
816 n
, readfds
?readfds
->fds_bits
[0]:0, writefds
?writefds
->fds_bits
[0]:0,
817 exceptfds
?exceptfds
->fds_bits
[0]:0,
818 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
819 timeout
?timeout
->tv_usec
:0);
821 Debug7("select(%d, &0x%lx, &0x%lx, &0x%lx, %s%lu.%06u)",
822 n
, readfds
?readfds
->__fds_bits
[0]:0, writefds
?writefds
->__fds_bits
[0]:0,
823 exceptfds
?exceptfds
->__fds_bits
[0]:0,
824 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
825 timeout
?timeout
->tv_usec
:0);
827 #endif /* WITH_SYCLS */
828 result
= select(n
, readfds
, writefds
, exceptfds
, timeout
);
830 if (!diag_in_handler
) diag_flush();
833 Debug7("select -> (, 0x%lx, 0x%lx, 0x%lx, %s%lu."F_tv_usec
"), %d",
834 readfds
?readfds
->fds_bits
[0]:0, writefds
?writefds
->fds_bits
[0]:0,
835 exceptfds
?exceptfds
->fds_bits
[0]:0,
836 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
837 timeout
?timeout
->tv_usec
:0, result
);
839 Debug7("select -> (, 0x%lx, 0x%lx, 0x%lx, %s%lu.%06u), %d",
840 readfds
?readfds
->__fds_bits
[0]:0, writefds
?writefds
->__fds_bits
[0]:0,
841 exceptfds
?exceptfds
->__fds_bits
[0]:0,
842 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
843 timeout
?timeout
->tv_usec
:0, result
);
845 #endif /* WITH_SYCLS */
859 Debug1("fork() -> %d", pid
); /* attention: called twice! */
864 #endif /* WITH_SYCLS */
866 pid_t
Waitpid(pid_t pid
, int *status
, int options
) {
869 if (!diag_in_handler
) diag_flush();
871 Debug3("waitpid("F_pid
", %p, %d)", pid
, status
, options
);
872 #endif /* WITH_SYCLS */
873 retval
= waitpid(pid
, status
, options
);
875 if (!diag_in_handler
) diag_flush();
877 Debug2("waitpid(, {%d}, ) -> "F_pid
, *status
, retval
);
878 #endif /* WITH_SYCLS */
885 sighandler_t
Signal(int signum
, sighandler_t handler
) {
888 Debug2("signal(%d, %p)", signum
, handler
);
889 retval
= signal(signum
, handler
);
891 Debug1("signal() -> %p", retval
);
897 int Sigaction(int signum
, const struct sigaction
*act
,
898 struct sigaction
*oldact
) {
900 Debug3("sigaction(%d, %p, %p)", signum
, act
, oldact
);
901 retval
= sigaction(signum
, act
, oldact
);
902 Debug1("sigaction() -> %d", retval
);
905 #endif /* HAVE_SIGACTION */
907 int Sigprocmask(int how
, const sigset_t
*set
, sigset_t
*oset
) {
909 Debug3("sigprocmask(%d, %p, %p)", how
, set
, oset
);
910 retval
= sigprocmask(how
, set
, oset
);
911 Debug1("sigprocmask() -> %d", retval
);
915 unsigned int Alarm(unsigned int seconds
) {
917 Debug1("alarm(%u)", seconds
);
918 retval
= alarm(seconds
);
919 Debug1("alarm() -> %u", retval
);
923 int Kill(pid_t pid
, int sig
) {
925 Debug2("kill("F_pid
", %d)", pid
, sig
);
926 retval
= kill(pid
, sig
);
928 Debug1("kill() -> %d", retval
);
933 int Link(const char *oldpath
, const char *newpath
) {
935 Debug2("link(\"%s\", \"%s\")", oldpath
, newpath
);
936 retval
= link(oldpath
, newpath
);
938 Debug1("link() -> %d", retval
);
943 int Execvp(const char *file
, char *const argv
[]) {
946 Debug2("execvp(\"%s\", \"%s\")", file
, argv
[0]);
947 else if (argv
[2] == NULL
)
948 Debug3("execvp(\"%s\", \"%s\" \"%s\")", file
, argv
[0], argv
[1]);
949 else if (argv
[3] == NULL
)
950 Debug4("execvp(\"%s\", \"%s\" \"%s\" \"%s\")", file
, argv
[0], argv
[1], argv
[2]);
951 else if (argv
[4] == NULL
)
952 Debug5("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\")", file
, argv
[0], argv
[1], argv
[2], argv
[3]);
953 else if (argv
[5] == NULL
)
954 Debug6("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\" \"%s\")", file
, argv
[0], argv
[1], argv
[2], argv
[3], argv
[4]);
956 Debug6("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" ...)", file
, argv
[0], argv
[1], argv
[2], argv
[3], argv
[4]);
958 result
= execvp(file
, argv
);
960 Debug1("execvp() -> %d", result
);
965 #endif /* WITH_SYCLS */
967 int System(const char *string
) {
970 Debug1("system(\"%s\")", string
);
971 #endif /* WITH_SYCLS */
972 diag_immediate_exit
= 1;
973 result
= system(string
);
974 diag_immediate_exit
= 0;
977 Debug1("system() -> %d", result
);
978 #endif /* WITH_SYCLS */
985 int Socketpair(int d
, int type
, int protocol
, int sv
[2]) {
987 Debug4("socketpair(%d, %d, %d, %p)", d
, type
, protocol
, sv
);
988 result
= socketpair(d
, type
, protocol
, sv
);
990 Info6("socketpair(%d, %d, %d, {%d,%d}) -> %d", d
, type
, protocol
, sv
[0], sv
[1], result
);
996 int Socket(int domain
, int type
, int protocol
) {
998 Debug3("socket(%d, %d, %d)", domain
, type
, protocol
);
999 result
= socket(domain
, type
, protocol
);
1001 Info4("socket(%d, %d, %d) -> %d", domain
, type
, protocol
, result
);
1005 #endif /* _WITH_SOCKET */
1008 int Bind(int sockfd
, struct sockaddr
*my_addr
, socklen_t addrlen
) {
1012 sockaddr_info(my_addr
, addrlen
, infobuff
, sizeof(infobuff
));
1013 Debug3("bind(%d, %s, "F_socklen
")", sockfd
, infobuff
, addrlen
);
1014 result
= bind(sockfd
, my_addr
, addrlen
);
1016 Debug1("bind() -> %d", result
);
1020 #endif /* _WITH_SOCKET */
1022 #endif /* WITH_SYCLS */
1025 int Connect(int sockfd
, const struct sockaddr
*serv_addr
, socklen_t addrlen
) {
1029 if (!diag_in_handler
) diag_flush();
1031 /*sockaddr_info(serv_addr, infobuff, sizeof(infobuff));
1032 Debug3("connect(%d, %s, "F_Zd")", sockfd, infobuff, addrlen);*/
1034 Debug18("connect(%d,{0x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x}, "F_Zd
")",
1036 ((unsigned char *)serv_addr
)[0], ((unsigned char *)serv_addr
)[1],
1037 ((unsigned char *)serv_addr
)[2], ((unsigned char *)serv_addr
)[3],
1038 ((unsigned char *)serv_addr
)[4], ((unsigned char *)serv_addr
)[5],
1039 ((unsigned char *)serv_addr
)[6], ((unsigned char *)serv_addr
)[7],
1040 ((unsigned char *)serv_addr
)[8], ((unsigned char *)serv_addr
)[9],
1041 ((unsigned char *)serv_addr
)[10], ((unsigned char *)serv_addr
)[11],
1042 ((unsigned char *)serv_addr
)[12], ((unsigned char *)serv_addr
)[13],
1043 ((unsigned char *)serv_addr
)[14], ((unsigned char *)serv_addr
)[15],
1046 Debug4("connect(%d, {%d,%s}, "F_socklen
")",
1047 sockfd
, serv_addr
->sa_family
,
1048 sockaddr_info(serv_addr
, addrlen
, infobuff
, sizeof(infobuff
)),
1051 #endif /* WITH_SYCLS */
1052 result
= connect(sockfd
, serv_addr
, addrlen
);
1054 if (!diag_in_handler
) diag_flush();
1056 Debug1("connect() -> %d", result
);
1057 #endif /* WITH_SYCLS */
1061 #endif /* _WITH_SOCKET */
1066 int Listen(int s
, int backlog
) {
1068 Debug2("listen(%d, %d)", s
, backlog
);
1069 result
= listen(s
, backlog
);
1071 Debug1("listen() -> %d", result
);
1075 #endif /* _WITH_SOCKET */
1077 #endif /* WITH_SYCLS */
1080 /* don't forget to handle EINTR when using Accept() ! */
1081 int Accept(int s
, struct sockaddr
*addr
, socklen_t
*addrlen
) {
1084 if (!diag_in_handler
) diag_flush();
1086 FD_SET(s
, &accept_s
);
1087 if (diag_select(s
+1, &accept_s
, NULL
, NULL
, NULL
) < 0) {
1091 Debug3("accept(%d, %p, %p)", s
, addr
, addrlen
);
1092 #endif /* WITH_SYCLS */
1093 result
= accept(s
, addr
, addrlen
);
1095 if (!diag_in_handler
) diag_flush();
1099 sockaddr_info(addr
, *addrlen
, infobuff
, sizeof(infobuff
));
1100 Info5("accept(%d, {%d, %s}, "F_socklen
") -> %d", s
,
1102 sockaddr_info(addr
, *addrlen
, infobuff
, sizeof(infobuff
)),
1105 Debug1("accept(,,) -> %d", result
);
1107 #endif /* WITH_SYCLS */
1111 #endif /* _WITH_SOCKET */
1116 int Getsockname(int s
, struct sockaddr
*name
, socklen_t
*namelen
) {
1120 Debug4("getsockname(%d, %p, %p{"F_socklen
"})", s
, name
, namelen
, *namelen
);
1121 result
= getsockname(s
, name
, namelen
);
1123 /*Debug2("getsockname(,, {"F_socklen"}) -> %d",
1124 *namelen, result);*/
1125 Debug3("getsockname(, {%s}, {"F_socklen
"}) -> %d",
1126 sockaddr_info(name
, *namelen
, infobuff
, sizeof(infobuff
)),
1131 #endif /* _WITH_SOCKET */
1134 int Getpeername(int s
, struct sockaddr
*name
, socklen_t
*namelen
) {
1138 Debug4("getpeername(%d, %p, %p{"F_socklen
"})", s
, name
, namelen
, *namelen
);
1139 result
= getpeername(s
, name
, namelen
);
1141 sockaddr_info(name
, *namelen
, infobuff
, sizeof(infobuff
));
1142 Debug3("getpeername(, {%s}, {"F_socklen
"}) -> %d",
1143 infobuff
, *namelen
, result
);
1147 #endif /* _WITH_SOCKET */
1150 int Getsockopt(int s
, int level
, int optname
, void *optval
, socklen_t
*optlen
) {
1152 Debug5("getsockopt(%d, %d, %d, %p, {"F_socklen
"})",
1153 s
, level
, optname
, optval
, *optlen
);
1154 result
= getsockopt(s
, level
, optname
, optval
, optlen
);
1156 Debug3("getsockopt() -> (,,, 0x%08x, %d), %d",
1157 *(int *)optval
, *optlen
, result
);
1161 #endif /* _WITH_SOCKET */
1164 int Setsockopt(int s
, int level
, int optname
, const void *optval
, int optlen
) {
1166 if (optlen
<= sizeof(int)) {
1167 Debug5("setsockopt(%d, %d, %d, {0x%x}, %d)",
1168 s
, level
, optname
, *(unsigned int *)optval
, optlen
);
1170 Debug6("setsockopt(%d, %d, %d, {0x%08x,%08x}, %d)",
1172 ((unsigned int *)optval
)[0], ((unsigned int *)optval
)[1],
1175 result
= setsockopt(s
, level
, optname
, optval
, optlen
);
1177 Debug1("setsockopt() -> %d", result
);
1181 #endif /* _WITH_SOCKET */
1183 #endif /* WITH_SYCLS */
1186 int Recv(int s
, void *buf
, size_t len
, int flags
) {
1188 if (!diag_in_handler
) diag_flush();
1190 Debug4("recv(%d, %p, "F_Zu
", %d)", s
, buf
, len
, flags
);
1191 #endif /* WITH_SYCLS */
1192 retval
= recv(s
, buf
, len
, flags
);
1194 if (!diag_in_handler
) diag_flush();
1196 Debug1("recv() -> %d", retval
);
1197 #endif /* WITH_SYCLS */
1201 #endif /* _WITH_SOCKET */
1204 int Recvfrom(int s
, void *buf
, size_t len
, int flags
, struct sockaddr
*from
,
1205 socklen_t
*fromlen
) {
1208 if (!diag_in_handler
) diag_flush();
1210 Debug6("recvfrom(%d, %p, "F_Zu
", %d, %p, "F_socklen
")",
1211 s
, buf
, len
, flags
, from
, *fromlen
);
1212 #endif /* WITH_SYCLS */
1213 retval
= recvfrom(s
, buf
, len
, flags
, from
, fromlen
);
1215 if (!diag_in_handler
) diag_flush();
1218 Debug4("recvfrom(,,,, {%d,%s}, "F_socklen
") -> %d",
1220 sockaddr_info(from
, *fromlen
, infobuff
, sizeof(infobuff
)),
1223 Debug1("recvfrom(,,,, NULL, NULL) -> %d", retval
);
1225 #endif /* WITH_SYCLS */
1229 #endif /* _WITH_SOCKET */
1232 int Recvmsg(int s
, struct msghdr
*msgh
, int flags
) {
1234 if (!diag_in_handler
) diag_flush();
1237 #if defined(HAVE_STRUCT_MSGHDR_MSGCONTROL) && defined(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN) && defined(HAVE_STRUCT_MSGHDR_MSGFLAGS)
1238 Debug10("recvmsg(%d, %p{%p,%u,%p,"F_Zu
",%p,"F_Zu
",%d}, %d)", s
, msgh
,
1239 msgh
->msg_name
, msgh
->msg_namelen
, msgh
->msg_iov
, msgh
->msg_iovlen
,
1240 msgh
->msg_control
, msgh
->msg_controllen
, msgh
->msg_flags
, flags
);
1242 Debug7("recvmsg(%d, %p{%p,%u,%p,%u}, %d)", s
, msgh
,
1243 msgh
->msg_name
, msgh
->msg_namelen
, msgh
->msg_iov
, msgh
->msg_iovlen
,
1246 #endif /* WITH_SYCLS */
1247 retval
= recvmsg(s
, msgh
, flags
);
1249 if (!diag_in_handler
) diag_flush();
1251 #if defined(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN)
1252 Debug5("recvmsg(, {%s,%u,,"F_Zu
",,"F_Zu
",}, ) -> %d",
1253 msgh
->msg_name
?sockaddr_info(msgh
->msg_name
, msgh
->msg_namelen
, infobuff
, sizeof(infobuff
)):"NULL",
1254 msgh
->msg_namelen
, msgh
->msg_iovlen
, msgh
->msg_controllen
,
1257 Debug4("recvmsg(, {%s,%u,,%u,,}, ) -> %d",
1258 msgh
->msg_name
?sockaddr_info(msgh
->msg_name
, msgh
->msg_namelen
, infobuff
, sizeof(infobuff
)):"NULL",
1259 msgh
->msg_namelen
, msgh
->msg_iovlen
,
1262 #endif /* WITH_SYCLS */
1266 #endif /* _WITH_SOCKET */
1269 int Send(int s
, const void *mesg
, size_t len
, int flags
) {
1271 if (!diag_in_handler
) diag_flush();
1273 Debug5("send(%d, %p[%08x...], "F_Zu
", %d)",
1274 s
, mesg
, ntohl(*(unsigned long *)mesg
), len
, flags
);
1275 #endif /* WITH_SYCLS */
1276 retval
= send(s
, mesg
, len
, flags
);
1278 if (!diag_in_handler
) diag_flush();
1280 Debug1("send() -> %d", retval
);
1281 #endif /* WITH_SYCLS */
1285 #endif /* _WITH_SOCKET */
1288 int Sendto(int s
, const void *mesg
, size_t len
, int flags
,
1289 const struct sockaddr
*to
, socklen_t tolen
) {
1293 if (!diag_in_handler
) diag_flush();
1295 sockaddr_info(to
, tolen
, infobuff
, sizeof(infobuff
));
1296 Debug7("sendto(%d, %p[%08x...], "F_Zu
", %d, {%s}, %d)",
1297 s
, mesg
, htonl(*(unsigned long *)mesg
), len
, flags
, infobuff
, tolen
);
1298 #endif /* WITH_SYCLS */
1299 retval
= sendto(s
, mesg
, len
, flags
, to
, tolen
);
1301 if (!diag_in_handler
) diag_flush();
1303 Debug1("sendto() -> %d", retval
);
1304 #endif /* WITH_SYCLS */
1308 #endif /* _WITH_SOCKET */
1313 int Shutdown(int fd
, int how
) {
1315 Info2("shutdown(%d, %d)", fd
, how
);
1316 retval
= shutdown(fd
, how
);
1318 Debug1("shutdown() -> %d", retval
);
1322 #endif /* _WITH_SOCKET */
1324 unsigned int Sleep(unsigned int seconds
) {
1325 unsigned int retval
;
1326 Debug1("sleep(%u)", seconds
);
1327 retval
= sleep(seconds
);
1328 Debug1("sleep() -> %u", retval
);
1332 /* obsolete by POSIX.1-2001 */
1333 void Usleep(unsigned long usec
) {
1334 Debug1("usleep(%lu)", usec
);
1336 Debug("usleep() ->");
1341 unsigned int Nanosleep(const struct timespec
*req
, struct timespec
*rem
) {
1343 Debug3("nanosleep({"F_time
",%ld},%p)", req
->tv_sec
, req
->tv_nsec
, rem
);
1344 retval
= nanosleep(req
, rem
);
1347 Debug3("nanosleep(,{"F_time
",%ld}) -> %d",
1348 rem
->tv_sec
, rem
->tv_nsec
, retval
);
1350 Debug1("nanosleep() -> %d", retval
);
1355 #endif /* HAVE_NANOSLEEP */
1362 Debug1("pause() -> %d", retval
);
1367 #if ( _WITH_IP4 || _WITH_IP6 ) && HAVE_GETHOSTBYNAME
1368 struct hostent
*Gethostbyname(const char *name
) {
1369 struct hostent
*hent
;
1370 Debug1("gethostbyname(\"%s\")", name
);
1371 hent
= gethostbyname(name
);
1373 Debug("gethostbyname() -> NULL");
1375 Debug4("gethostbyname() -> %d.%d.%d.%d",
1376 ((unsigned char *)hent
->h_addr_list
[0])[0],
1377 ((unsigned char *)hent
->h_addr_list
[0])[1],
1378 ((unsigned char *)hent
->h_addr_list
[0])[2],
1379 ((unsigned char *)hent
->h_addr_list
[0])[3]);
1383 #endif /* ( _WITH_IP4 || _WITH_IP6 ) && HAVE_GETHOSTBYNAME */
1385 #if (_WITH_IP4 || _WITH_IP6) && HAVE_GETADDRINFO
1386 int Getaddrinfo(const char *node
, const char *service
,
1387 const struct addrinfo
*hints
, struct addrinfo
**res
) {
1389 Debug15("getaddrinfo(%s%s%s, %s%s%s, {%d,%d,%d,%d,"F_socklen
",%p,%p,%p}, %p)",
1390 node
?"\"":"", node
?node
:"NULL", node
?"\"":"",
1391 service
?"\"":"", service
?service
:"NULL", service
?"\"":"",
1392 hints
->ai_flags
, hints
->ai_family
, hints
->ai_socktype
,
1393 hints
->ai_protocol
, hints
->ai_addrlen
, hints
->ai_addr
,
1394 hints
->ai_canonname
, hints
->ai_next
, res
);
1395 result
= getaddrinfo(node
, service
, hints
, res
);
1398 sockaddr_info((*res
)->ai_addr
, hints
->ai_addrlen
, sockbuff
, sizeof(sockbuff
));
1399 Debug2("getaddrinfo(,,,{{%s, %s}) -> 0",
1401 (*res
)->ai_canonname
?(*res
)->ai_canonname
:"");
1403 Debug2("getaddrinfo(,,,{%p}) -> %d", *res
, result
);
1407 #endif /* (_WITH_IP4 || _WITH_IP6) && HAVE_GETADDRINFO */
1409 #if (WITH_IP4 || WITH_IP6) && HAVE_PROTOTYPE_LIB_getipnodebyname
1410 struct hostent
*Getipnodebyname(const char *name
, int af
, int flags
,
1412 struct hostent
*result
;
1413 Debug4("getipnodebyname(\"%s\", %d, %d, %p)", name
, af
, flags
, error_num
);
1414 result
= getipnodebyname(name
, af
, flags
, error_num
);
1415 if (result
== NULL
) {
1416 Debug1("getipnodebyname(,,, {%d}) -> NULL", *error_num
);
1418 Debug4("getipnodebyname() -> {\"%s\", %p, %d, %d, ???}",
1419 result
->h_name
, result
->h_aliases
, result
->h_addrtype
,
1424 #endif /* (WITH_IP4 || WITH_IP6) && HAVE_PROTOTYPE_LIB_getipnodebyname */
1426 void *Malloc(size_t size
) {
1428 Debug1("malloc("F_Zd
")", size
);
1429 result
= malloc(size
);
1430 Debug1("malloc() -> %p", result
);
1431 if (result
== NULL
) {
1432 Error1("malloc("F_Zd
"): out of memory", size
);
1438 void *Calloc(size_t nmemb
, size_t size
) {
1440 Debug2("calloc("F_Zd
", "F_Zd
")", nmemb
, size
);
1441 result
= calloc(nmemb
, size
);
1442 Debug1("calloc() -> %p", result
);
1443 if (result
== NULL
) {
1444 Error2("calloc("F_Zd
", "F_Zd
"): out of memory", nmemb
, size
);
1450 void *Realloc(void *ptr
, size_t size
) {
1452 Debug2("realloc(%p, "F_Zd
")", ptr
, size
);
1453 result
= realloc(ptr
, size
);
1454 Debug1("realloc() -> %p", result
);
1455 if (result
== NULL
) {
1456 Error2("realloc(%p, "F_Zd
"): out of memory", ptr
, size
);
1463 int Tcgetattr(int fd
, struct termios
*termios_p
) {
1464 int i
, result
, _errno
;
1465 char chars
[5*NCCS
], *cp
= chars
;
1467 Debug2("tcgetattr(%d, %p)", fd
, termios_p
);
1468 result
= tcgetattr(fd
, termios_p
);
1471 for (i
= 0; i
< NCCS
-1; ++i
) {
1472 cp
+= sprintf(cp
, "%02x,", termios_p
->c_cc
[i
]);
1474 sprintf(cp
, "%02x", termios_p
->c_cc
[i
]);
1475 #if HAVE_STRUCT_TERMIOS_C_ISPEED && HAVE_STRUCT_TERMIOS_C_OSPEED
1476 Debug8("tcgetattr(, {%08x,%08x,%08x,%08x, "F_speed
","F_speed
", %s}) -> %d",
1477 termios_p
->c_iflag
, termios_p
->c_oflag
,
1478 termios_p
->c_cflag
, termios_p
->c_lflag
,
1479 termios_p
->c_ispeed
, termios_p
->c_ospeed
,
1482 Debug6("tcgetattr(, {%08x,%08x,%08x,%08x,%s}) -> %d",
1483 termios_p
->c_iflag
, termios_p
->c_oflag
,
1484 termios_p
->c_cflag
, termios_p
->c_lflag
,
1490 #endif /* _WITH_TERMIOS */
1493 int Tcsetattr(int fd
, int optional_actions
, struct termios
*termios_p
) {
1494 int i
, result
, _errno
;
1495 char chars
[5*NCCS
], *cp
= chars
;
1497 for (i
= 0; i
< NCCS
-1; ++i
) {
1498 cp
+= sprintf(cp
, "%02x,", termios_p
->c_cc
[i
]);
1500 sprintf(cp
, "%02x", termios_p
->c_cc
[i
]);
1501 #if HAVE_STRUCT_TERMIOS_C_ISPEED && HAVE_STRUCT_TERMIOS_C_OSPEED
1502 Debug9("tcsetattr(%d, %d, {%08x,%08x,%08x,%08x, "F_speed
","F_speed
", %s})",
1503 fd
, optional_actions
,
1504 termios_p
->c_iflag
, termios_p
->c_oflag
,
1505 termios_p
->c_cflag
, termios_p
->c_lflag
,
1506 termios_p
->c_ispeed
, termios_p
->c_ospeed
,
1509 Debug7("tcsetattr(%d, %d, {%08x,%08x,%08x,%08x,%s})", fd
, optional_actions
,
1510 termios_p
->c_iflag
, termios_p
->c_oflag
,
1511 termios_p
->c_cflag
, termios_p
->c_lflag
, chars
);
1513 result
= tcsetattr(fd
, optional_actions
, termios_p
);
1515 Debug1("tcsetattr() -> %d", result
);
1519 #endif /* _WITH_TERMIOS */
1521 char *Ttyname(int fd
) {
1524 Debug1("ttyname(%d)", fd
);
1525 result
= ttyname(fd
);
1528 Debug1("ttyname() -> %s", result
);
1530 Debug("ttyname() -> NULL");
1535 int Isatty(int fd
) {
1537 Debug1("isatty(%d)", fd
);
1538 result
= isatty(fd
);
1540 Debug1("isatty() -> %d", result
);
1546 int Openpty(int *ptyfd
, int *ttyfd
, char *ptyname
, struct termios
*termp
,
1547 struct winsize
*winp
) {
1549 Debug5("openpty(%p, %p, %p, %p, %p)", ptyfd
, ttyfd
, ptyname
, termp
, winp
);
1550 result
= openpty(ptyfd
, ttyfd
, ptyname
, termp
, winp
);
1552 Info4("openpty({%d}, {%d}, {\"%s\"},,) -> %d", *ptyfd
, *ttyfd
, ptyname
,
1557 #endif /* HAVE_OPENPTY */
1560 int Grantpt(int fd
) {
1562 Debug1("grantpt(%d)", fd
);
1563 result
= grantpt(fd
);
1565 Debug1("grantpt() -> %d", result
);
1569 #endif /* HAVE_GRANTPT */
1572 int Unlockpt(int fd
) {
1574 Debug1("unlockpt(%d)", fd
);
1575 result
= unlockpt(fd
);
1577 Debug1("unlockpt() -> %d", result
);
1581 #endif /* HAVE_UNLOCKPT */
1583 #if HAVE_PROTOTYPE_LIB_ptsname /* AIX, not Linux */
1584 char *Ptsname(int fd
) {
1587 Debug1("ptsname(%d)", fd
);
1588 result
= ptsname(fd
);
1591 Debug1("ptsname() -> %s", result
);
1593 Debug("ptsname() -> NULL");
1597 #endif /* HAVE_PROTOTYPE_LIB_ptsname */
1599 int Uname(struct utsname
*buf
) {
1601 Debug1("uname(%p)", buf
);
1602 result
= uname(buf
);
1604 #if UNAME_DOMAINNAME
1605 Debug6("uname({%s, %s, %s, %s, %s, %s})",
1606 buf
->sysname
, buf
->nodename
, buf
->release
,
1607 buf
->version
, buf
->machine
, buf
->domainname
);
1609 Debug5("uname({%s, %s, %s, %s, %s})",
1610 buf
->sysname
, buf
->nodename
, buf
->release
,
1611 buf
->version
, buf
->machine
);
1617 int Gethostname(char *name
, size_t len
) {
1619 Debug2("gethostname(%p, "F_Zu
")", name
, len
);
1620 result
= gethostname(name
, len
);
1622 Debug2("gethostname(\"%s\", ) -> %d", name
, result
);
1627 /* due to Linux docu, it does not set errno */
1628 int Atexit(void (*func
)(void)) {
1630 Debug1("atexit(%p)", func
);
1631 result
= atexit(func
);
1632 Debug1("atexit() -> %d", result
);
1636 #endif /* WITH_SYCLS */
1638 void Exit(int status
) {
1639 if (!diag_in_handler
) diag_flush();
1641 Debug1("exit(%d)", status
);
1642 #endif /* WITH_SYCLS */
1653 int Mkstemp(char *template) {
1655 Debug1("mkstemp(\"%s\")", template);
1656 result
= mkstemp(template);
1658 Info2("mkstemp({%s}) -> %d", template, result
);
1663 int Setenv(const char *name
, const char *value
, int overwrite
) {
1665 Debug3("setenv(\"%s\", \"%s\", %d)", name
, value
, overwrite
);
1666 result
= setenv(name
, value
, overwrite
);
1668 Debug1("setenv() -> %d", result
);
1674 /* on Linux it returns int but on FreeBSD void.
1675 we do not expect many errors, so we take void which works on all systems. */
1676 void Unsetenv(const char *name
) {
1678 Debug1("unsetenv(\"%s\")", name
);
1681 Debug("unsetenv() ->");
1689 char *Readline(const char *prompt
) {
1693 Debug1("readline(\"%s\")", prompt
);
1695 Debug("readline(NULL)");
1697 result
= readline(prompt
);
1699 Debug("readline() -> \"...\"");
1701 Debug("readline() -> NULL");
1706 void Using_history(void) {
1707 Debug("using_history()");
1709 Debug("using_history() ->");
1712 int Read_history(const char *filename
) {
1716 Debug1("read_history(\"%s\")", filename
);
1718 Debug("read_history(NULL)");
1720 result
= read_history(filename
);
1722 Debug1("read_history() -> %d", result
);
1724 Debug("read_history() -> 0");
1729 int Write_history(const char *filename
) {
1733 Debug1("write_history(\"%s\")", filename
);
1735 Debug("write_history(NULL)");
1737 result
= write_history(filename
);
1739 Debug1("write_history() -> %d", result
);
1741 Debug("write_history() -> 0");
1746 int Append_history(int nelements
, const char *filename
) {
1750 Debug2("append_history(%d, \"%s\")", nelements
, filename
);
1752 Debug1("append_history(%d, NULL)", nelements
);
1754 result
= append_history(nelements
, filename
);
1756 Debug1("append_history() -> %d", result
);
1758 Debug("append_history() -> 0");
1763 int Where_history(void) {
1766 Debug("where_history()");
1767 result
= where_history();
1768 Debug1("where_history() -> %d", result
);
1772 void Add_history(const char *string
) {
1773 Debug1("add_history(\"%s\")", string
);
1774 add_history(string
);
1775 Debug("add_history() ->");
1778 #endif /* WITH_READLINE */
1780 #endif /* WITH_SYCLS */