2 /* Copyright Gerhard Rieger */
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 */
13 #include "sysincludes.h"
26 mode_t
Umask(mode_t mask
) {
29 Debug1("umask("F_mode
")", mask
);
32 Debug1("umask() -> "F_mode
, result
);
37 int Open(const char *pathname
, int flags
, mode_t mode
) {
39 if (!diag_in_handler
) diag_flush();
40 Debug3("open(\"%s\", 0%o, 0%03o)", pathname
, flags
, mode
);
41 result
= open(pathname
, flags
, mode
);
43 if (!diag_in_handler
) diag_flush();
44 Info4("open(\"%s\", 0%o, 0%03o) -> %d", pathname
, flags
, mode
, result
);
49 int Creat(const char *pathname
, mode_t mode
) {
51 Debug2("creat(\"%s\", 0%03o)", pathname
, mode
);
52 result
= creat(pathname
, mode
);
54 Info3("creat(\"%s\", 0%03o) -> %d", pathname
, mode
, result
);
59 off_t
Lseek(int fildes
, off_t offset
, int whence
) {
62 Debug3("lseek(%d, "F_off
", %d)", fildes
, offset
, whence
);
63 result
= lseek(fildes
, offset
, whence
);
65 Debug1("lseek() -> "F_off
, result
);
71 off64_t
Lseek64(int fildes
, off64_t offset
, int whence
) {
74 Debug3("lseek64(%d, "F_off64
", %d)", fildes
, offset
, whence
);
75 result
= lseek64(fildes
, offset
, whence
);
77 Debug1("lseek64() -> "F_off64
, result
);
81 #endif /* HAVE_LSEEK64 */
89 Debug1("getpid() -> "F_pid
, result
);
100 Debug1("getppid() -> "F_pid
, result
);
105 pid_t
Getpgrp(void) {
111 Debug1("getpgrp() -> "F_pid
, result
);
116 #if 0 /* does not compile for FreeBSD */
117 /* setpgrp() is not BSD compatible, needs setpgid(..., ...) instead */
123 Debug1("setpgrp() -> %d", result
);
130 int Getpgid(pid_t pid
) {
133 Debug1("getpgid("F_pid
")", pid
);
134 result
= getpgid(pid
);
136 Debug1("getpgid() -> "F_pid
, result
);
142 int Setpgid(pid_t pid
, pid_t pgid
) {
144 Debug2("setpgid("F_pid
", "F_pid
")", pid
, pgid
);
145 result
= setpgid(pid
, pgid
);
147 Debug1("setpgid() -> %d", result
);
152 pid_t
Tcgetpgrp(int fd
) {
154 Debug1("tcgetpgrp(%d)", fd
);
155 result
= tcgetpgrp(fd
);
157 Debug1("tcgetpgrp() -> %d", result
);
162 int Tcsetpgrp(int fd
, pid_t pgrpid
) {
164 Debug2("tcsetpgrp(%d, "F_pid
")", fd
, pgrpid
);
165 result
= tcsetpgrp(fd
, pgrpid
);
167 Debug1("tcsetpgrp() -> %d", result
);
173 pid_t
Getsid(pid_t pid
) {
175 Debug1("getsid("F_pid
")", pid
);
176 result
= getsid(pid
);
178 Debug1("getsid() -> "F_pid
, result
);
189 Debug1("setsid() -> "F_pid
, result
);
200 Debug1("getuid() -> "F_uid
, result
);
205 uid_t
Geteuid(void) {
211 Debug1("geteuid() -> "F_uid
, result
);
216 int Setuid(uid_t uid
) {
218 Debug1("setuid("F_uid
")", uid
);
219 result
= setuid(uid
);
221 Debug1("setuid() -> %d", result
);
232 Debug1("getgid() -> "F_gid
, result
);
237 gid_t
Getegid(void) {
243 Debug1("getegid() -> "F_gid
, result
);
248 int Setgid(gid_t gid
) {
250 Debug1("setgid("F_gid
")", gid
);
251 result
= setgid(gid
);
253 Debug1("setgid() -> %d", result
);
258 int Initgroups(const char *user
, gid_t group
) {
260 Debug2("initgroups(\"%s\", "F_gid
")", user
, group
);
261 result
= initgroups(user
, group
);
263 Debug1("initgroups() -> %d", result
);
268 int Getgroups(int size
, gid_t list
[]) {
270 Debug2("getgroups(%d, "F_gid
",...)", size
, list
[0]);
271 result
= getgroups(size
, list
);
273 Debug1("getgroups() -> %d", result
);
279 int Setgroups(size_t size
, const gid_t
*list
) {
282 case 0: Debug1("setgroups("F_Zu
", [])", size
); break;;
283 case 1: Debug2("setgroups("F_Zu
", ["F_gid
"])", size
, list
[0]); break;;
284 case 2: Debug3("setgroups("F_Zu
", ["F_gid
","F_gid
"])", size
, list
[0], list
[1]); break;;
285 default: Debug3("setgroups("F_Zu
", ["F_gid
","F_gid
",...])", size
, list
[0], list
[1]); break;;
287 result
= setgroups(size
, list
);
289 Debug1("setgroups() -> %d", result
);
295 #if HAVE_GETGROUPLIST
296 int Getgrouplist(const char *user
, gid_t group
, gid_t
*groups
, int *ngroups
) {
297 int n
= *ngroups
, result
;
298 Debug4("getgrouplist(\"%s\", "F_gid
", %p, [%d])", user
, group
, groups
, n
);
299 result
= getgrouplist(user
, group
, groups
, ngroups
);
300 switch (Min(n
,*ngroups
)) {
301 case 0: Debug2("getgrouplist(,, [], [%d]) -> %d", *ngroups
, result
); break;
302 case 1: Debug3("getgrouplist(,, ["F_gid
"], [%d]) -> %d", groups
[0], *ngroups
, result
); break;
303 case 2: Debug4("getgrouplist(,, ["F_gid
","F_gid
"], [%d]) -> %d", groups
[0], groups
[1], *ngroups
, result
); break;
304 default: Debug4("getgrouplist(,, ["F_gid
","F_gid
",...], [%d]) -> %d", groups
[0], groups
[1], *ngroups
, result
); break;
310 int Chdir(const char *path
) {
312 Debug1("chdir(\"%s\")", path
);
313 result
= chdir(path
);
315 Debug1("chdir() -> %d", result
);
320 int Chroot(const char *path
) {
322 Debug1("chroot(\"%s\")", path
);
323 result
= chroot(path
);
325 Debug1("chroot() -> %d", result
);
330 int Gettimeofday(struct timeval
*tv
, struct timezone
*tz
) {
332 #if WITH_MSGLEVEL <= E_DEBUG
334 Debug3("gettimeofday(%p, {%d,%d})",
335 tv
, tz
->tz_minuteswest
, tz
->tz_dsttime
);
337 Debug1("gettimeofday(%p, NULL)", tv
);
339 #endif /* WITH_MSGLEVEL <= E_DEBUG */
340 result
= gettimeofday(tv
, tz
);
342 #if WITH_MSGLEVEL <= E_DEBUG
344 Debug5("gettimeofday({%ld,%ld}, {%d,%d}) -> %d",
345 tv
->tv_sec
, tv
->tv_usec
, tz
->tz_minuteswest
, tz
->tz_dsttime
,
348 Debug3("gettimeofday({%ld,%ld},) -> %d",
349 tv
->tv_sec
, tv
->tv_usec
, result
);
351 #endif /* WITH_MSGLEVEL <= E_DEBUG */
356 int Mknod(const char *pathname
, mode_t mode
, dev_t dev
) {
358 Debug3("mknod(\"%s\", 0%o, "F_dev
")", pathname
, mode
, dev
);
359 result
= mknod(pathname
, mode
, dev
);
361 Debug1("mknod() -> %d", result
);
366 int Mkfifo(const char *pathname
, mode_t mode
) {
368 Debug2("mkfifo(\"%s\", 0%o)", pathname
, mode
);
369 result
= mkfifo(pathname
, mode
);
371 Debug1("mkfifo() -> %d", result
);
376 static void prtstat(const char *func
, struct stat
*buf
, int result
) {
377 char txt
[256], *t
= txt
;
379 t
+= sprintf(t
, "%s(, {"F_dev
","F_st_ino
","F_mode
","F_st_nlink
","F_uid
","F_gid
,
380 func
, buf
->st_dev
, buf
->st_ino
,
381 buf
->st_mode
, buf
->st_nlink
, buf
->st_uid
, buf
->st_gid
);
383 t
+= sprintf(t
, ","F_dev
, buf
->st_rdev
);
385 t
+= sprintf(t
, ","F_st_size
, buf
->st_size
);
387 t
+= sprintf(t
, ","F_st_blksize
, buf
->st_blksize
);
390 t
+= sprintf(t
, ","F_st_blocks
, buf
->st_blocks
);
392 sprintf(t
, ",...}) -> %d", result
);
396 #if defined(HAVE_STAT64) || defined(HAVE_FSTAT64) || defined(HAVE_LSTAT64)
397 static void prtstat64(const char *func
, struct stat64
*buf
, int result
) {
398 char txt
[256], *t
= txt
;
401 sprintf(t
, "%s(, {}) -> %d", func
, result
);
403 t
+= sprintf(t
, "%s(, {"F_dev
","F_st64_ino
","F_mode
","F_st_nlink
","F_uid
","F_gid
,
404 func
, buf
->st_dev
, buf
->st_ino
,
405 buf
->st_mode
, buf
->st_nlink
, buf
->st_uid
, buf
->st_gid
);
407 t
+= sprintf(t
, ","F_dev
, buf
->st_rdev
);
409 t
+= sprintf(t
, ","F_st64_size
, buf
->st_size
);
411 t
+= sprintf(t
, ","F_st_blksize
, buf
->st_blksize
);
414 t
+= sprintf(t
, ","F_st64_blocks
, buf
->st_blocks
);
416 sprintf(t
, ",...}) -> %d", result
);
420 #endif /* defined(HAVE_STAT64) || defined(HAVE_FSTAT64) || defined(HAVE_LSTAT64) */
422 int Stat(const char *file_name
, struct stat
*buf
) {
424 Debug2("stat(%s, %p)", file_name
, buf
);
425 result
= stat(file_name
, buf
);
427 prtstat("stat", buf
, result
);
433 int Stat64(const char *file_name
, struct stat64
*buf
) {
435 Debug2("stat64(%s, %p)", file_name
, buf
);
436 result
= stat64(file_name
, buf
);
438 prtstat64("stat64", buf
, result
);
442 #endif /* HAVE_STAT64 */
444 int Fstat(int filedes
, struct stat
*buf
) {
446 Debug2("fstat(%d, %p)", filedes
, buf
);
447 result
= fstat(filedes
, buf
);
449 prtstat("fstat", buf
, result
);
455 int Fstat64(int filedes
, struct stat64
*buf
) {
457 Debug2("fstat64(%d, %p)", filedes
, buf
);
458 result
= fstat64(filedes
, buf
);
460 prtstat64("fstat64", buf
, result
);
464 #endif /* HAVE_FSTAT64 */
466 int Lstat(const char *file_name
, struct stat
*buf
) {
468 Debug2("lstat(%s, %p)", file_name
, buf
);
469 result
= lstat(file_name
, buf
);
471 prtstat("lstat", buf
, result
);
477 int Lstat64(const char *file_name
, struct stat64
*buf
) {
479 Debug2("lstat64(%s, %p)", file_name
, buf
);
480 result
= lstat64(file_name
, buf
);
482 prtstat64("lstat64", buf
, result
);
486 #endif /* HAVE_LSTAT64 */
490 Debug1("dup(%d)", oldfd
);
493 Info2("dup(%d) -> %d", oldfd
, newfd
);
498 int Dup2(int oldfd
, int newfd
) {
500 Debug2("dup2(%d, %d)", oldfd
, newfd
);
501 result
= dup2(oldfd
, newfd
);
503 Info3("dup2(%d, %d) -> %d", oldfd
, newfd
, result
);
508 int Pipe(int filedes
[2]) {
510 Debug1("pipe(%p)", filedes
);
511 result
= pipe(filedes
);
513 Info3("pipe({%d,%d}) -> %d", filedes
[0], filedes
[1], result
);
518 ssize_t
Read(int fd
, void *buf
, size_t count
) {
521 if (!diag_in_handler
) diag_flush();
522 Debug3("read(%d, %p, "F_Zu
")", fd
, buf
, count
);
523 result
= read(fd
, buf
, count
);
525 if (!diag_in_handler
) diag_flush();
526 Debug1("read -> "F_Zd
, result
);
531 ssize_t
Write(int fd
, const void *buf
, size_t count
) {
534 if (!diag_in_handler
) diag_flush();
535 Debug3("write(%d, %p, "F_Zu
")", fd
, buf
, count
);
536 result
= write(fd
, buf
, count
);
538 if (!diag_in_handler
) diag_flush();
539 Debug1("write -> "F_Zd
, result
);
544 int Fcntl(int fd
, int cmd
) {
546 if (!diag_in_handler
) diag_flush();
547 Debug2("fcntl(%d, %d)", fd
, cmd
);
548 result
= fcntl(fd
, cmd
);
549 if (!diag_in_handler
) diag_flush();
551 Debug1("fcntl() -> %d", result
);
556 int Fcntl_l(int fd
, int cmd
, long arg
) {
558 if (!diag_in_handler
) diag_flush();
559 Debug3("fcntl(%d, %d, %ld)", fd
, cmd
, arg
);
560 result
= fcntl(fd
, cmd
, arg
);
562 if (!diag_in_handler
) diag_flush();
563 Debug1("fcntl() -> %d", result
);
568 int Fcntl_lock(int fd
, int cmd
, struct flock
*l
) {
570 if (!diag_in_handler
) diag_flush();
571 Debug7("fcntl(%d, %d, {type=%hd,whence=%hd,start="F_off
",len="F_off
",pid="F_pid
"})",
572 fd
, cmd
, l
->l_type
, l
->l_whence
, l
->l_start
, l
->l_len
, l
->l_pid
);
573 result
= fcntl(fd
, cmd
, l
);
575 if (!diag_in_handler
) diag_flush();
576 Debug1("fcntl() -> %d", result
);
581 int Ftruncate(int fd
, off_t length
) {
583 Debug2("ftruncate(%d, "F_off
")", fd
, length
);
584 retval
= ftruncate(fd
, length
);
586 Debug1("ftruncate() -> %d", retval
);
592 int Ftruncate64(int fd
, off64_t length
) {
594 Debug2("ftruncate64(%d, "F_off64
")", fd
, length
);
595 retval
= ftruncate64(fd
, length
);
597 Debug1("ftruncate64() -> %d", retval
);
601 #endif /* HAVE_FTRUNCATE64 */
604 int Flock(int fd
, int operation
) {
606 if (!diag_in_handler
) diag_flush();
607 Debug2("flock(%d, %d)", fd
, operation
);
608 retval
= flock(fd
, operation
);
610 if (!diag_in_handler
) diag_flush();
611 Debug1("flock() -> %d", retval
);
615 #endif /* HAVE_FLOCK */
617 int Ioctl(int d
, int request
, void *argp
) {
619 if (!diag_in_handler
) diag_flush();
620 if (argp
> (void *)0x10000) { /* fuzzy...*/
621 Debug4("ioctl(%d, 0x%x, %p{%lu})", d
, request
, argp
, *(unsigned long *)argp
);
623 Debug3("ioctl(%d, 0x%x, 0x%p)", d
, request
, argp
);
625 retval
= ioctl(d
, request
, argp
);
627 if (!diag_in_handler
) diag_flush();
628 Debug1("ioctl() -> %d", retval
);
633 int Ioctl_int(int d
, int request
, int arg
) {
635 Debug3("ioctl(%d, 0x%x, %d)", d
, request
, arg
);
636 retval
= ioctl(d
, request
, arg
);
638 Debug1("ioctl() -> %d", retval
);
645 Info1("close(%d)", fd
);
648 Debug1("close() -> %d", retval
);
653 int Fchown(int fd
, uid_t owner
, gid_t group
) {
655 Debug3("fchown(%d, "F_uid
", "F_gid
")", fd
, owner
, group
);
656 retval
= fchown(fd
, owner
, group
);
658 Debug1("fchown() -> %d", retval
);
663 int Fchmod(int fd
, mode_t mode
) {
665 Debug2("fchmod(%d, 0%o)", fd
, mode
);
666 retval
= fchmod(fd
, mode
);
668 Debug1("fchmod() -> %d", retval
);
673 int Unlink(const char *pathname
) {
675 Debug1("unlink(\"%s\")", pathname
);
676 retval
= unlink(pathname
);
678 Debug1("unlink() -> %d", retval
);
683 int Symlink(const char *oldpath
, const char *newpath
) {
685 Debug2("symlink(\"%s\", \"%s\")", oldpath
, newpath
);
686 retval
= symlink(oldpath
, newpath
);
688 Debug1("symlink() -> %d", retval
);
693 int Readlink(const char *path
, char *buf
, size_t bufsiz
) {
695 Debug3("readlink(\"%s\", %p, "F_Zu
")", path
, buf
, bufsiz
);
696 retval
= readlink(path
, buf
, bufsiz
);
698 Debug1("readlink() -> %d", retval
);
703 int Chown(const char *path
, uid_t owner
, gid_t group
) {
705 Debug3("chown(\"%s\", "F_uid
", "F_gid
")", path
, owner
, group
);
706 retval
= chown(path
, owner
, group
);
708 Debug1("chown() -> %d", retval
);
713 int Chmod(const char *path
, mode_t mode
) {
715 Debug2("chmod(\"%s\", 0%o)", path
, mode
);
716 retval
= chmod(path
, mode
);
718 Debug1("chmod() -> %d", retval
);
724 /* we only show the first struct pollfd; hope this is enough for most cases. */
725 int Poll(struct pollfd
*ufds
, unsigned int nfds
, int timeout
) {
727 if (!diag_in_handler
) diag_flush();
729 Debug10("poll({%d,0x%02hx,}{%d,0x%02hx,}{%d,0x%02hx,}{%d,0x%02hx,}, %u, %d)",
730 ufds
[0].fd
, ufds
[0].events
, ufds
[1].fd
, ufds
[1].events
,
731 ufds
[2].fd
, ufds
[2].events
, ufds
[3].fd
, ufds
[3].events
,
734 Debug4("poll({%d,0x%02hx,}, , %u, %d)", ufds
[0].fd
, ufds
[0].events
, nfds
, timeout
);
736 result
= poll(ufds
, nfds
, timeout
);
738 if (!diag_in_handler
) diag_flush();
740 Debug5("poll(, {,,0x%02hx}{,,0x%02hx}{,,0x%02hx}{,,0x%02hx}) -> %d",
741 ufds
[0].revents
, ufds
[1].revents
, ufds
[2].revents
, ufds
[3].revents
, result
);
743 Debug2("poll(, {,,0x%02hx}) -> %d", ufds
[0].revents
, result
);
748 #endif /* HAVE_POLL */
750 /* we only show the first word of the fd_set's; hope this is enough for most
752 int Select(int n
, fd_set
*readfds
, fd_set
*writefds
, fd_set
*exceptfds
,
753 struct timeval
*timeout
) {
755 if (!diag_in_handler
) diag_flush();
757 Debug7("select(%d, &0x%lx, &0x%lx, &0x%lx, %s%lu."F_tv_usec
")",
758 n
, readfds
?readfds
->fds_bits
[0]:0, writefds
?writefds
->fds_bits
[0]:0,
759 exceptfds
?exceptfds
->fds_bits
[0]:0,
760 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
761 timeout
?timeout
->tv_usec
:0);
763 Debug7("select(%d, &0x%lx, &0x%lx, &0x%lx, %s%lu.%06u)",
764 n
, readfds
?readfds
->__fds_bits
[0]:0, writefds
?writefds
->__fds_bits
[0]:0,
765 exceptfds
?exceptfds
->__fds_bits
[0]:0,
766 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
767 timeout
?timeout
->tv_usec
:0);
769 result
= select(n
, readfds
, writefds
, exceptfds
, timeout
);
771 if (!diag_in_handler
) diag_flush();
773 Debug7("select -> (, 0x%lx, 0x%lx, 0x%lx, %s%lu."F_tv_usec
"), %d",
774 readfds
?readfds
->fds_bits
[0]:0, writefds
?writefds
->fds_bits
[0]:0,
775 exceptfds
?exceptfds
->fds_bits
[0]:0,
776 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
777 timeout
?timeout
->tv_usec
:0, result
);
779 Debug7("select -> (, 0x%lx, 0x%lx, 0x%lx, %s%lu.%06u), %d",
780 readfds
?readfds
->__fds_bits
[0]:0, writefds
?writefds
->__fds_bits
[0]:0,
781 exceptfds
?exceptfds
->__fds_bits
[0]:0,
782 timeout
?"&":"NULL/", timeout
?timeout
->tv_sec
:0,
783 timeout
?timeout
->tv_usec
:0, result
);
796 Debug1("fork() -> %d", pid
); /* attention: called twice! */
801 pid_t
Waitpid(pid_t pid
, int *status
, int options
) {
804 if (!diag_in_handler
) diag_flush();
805 Debug3("waitpid("F_pid
", %p, %d)", pid
, status
, options
);
806 retval
= waitpid(pid
, status
, options
);
808 if (!diag_in_handler
) diag_flush();
809 Debug2("waitpid(, {%d}, ) -> "F_pid
, *status
, retval
);
814 sighandler_t
Signal(int signum
, sighandler_t handler
) {
817 Debug2("signal(%d, %p)", signum
, handler
);
818 retval
= signal(signum
, handler
);
820 Debug1("signal() -> %p", retval
);
826 int Sigaction(int signum
, const struct sigaction
*act
,
827 struct sigaction
*oldact
) {
829 Debug3("sigaction(%d, %p, %p)", signum
, act
, oldact
);
830 retval
= sigaction(signum
, act
, oldact
);
831 Debug1("sigaction() -> %d", retval
);
834 #endif /* HAVE_SIGACTION */
836 int Sigprocmask(int how
, const sigset_t
*set
, sigset_t
*oset
) {
838 Debug3("sigprocmask(%d, %p, %p)", how
, set
, oset
);
839 retval
= sigprocmask(how
, set
, oset
);
840 Debug1("sigprocmask() -> %d", retval
);
844 unsigned int Alarm(unsigned int seconds
) {
846 Debug1("alarm(%u)", seconds
);
847 retval
= alarm(seconds
);
848 Debug1("alarm() -> %u", retval
);
852 int Kill(pid_t pid
, int sig
) {
854 Debug2("kill("F_pid
", %d)", pid
, sig
);
855 retval
= kill(pid
, sig
);
857 Debug1("kill() -> %d", retval
);
862 int Link(const char *oldpath
, const char *newpath
) {
864 Debug2("link(\"%s\", \"%s\")", oldpath
, newpath
);
865 retval
= link(oldpath
, newpath
);
867 Debug1("link() -> %d", retval
);
872 int Execvp(const char *file
, char *const argv
[]) {
875 Debug2("execvp(\"%s\", \"%s\")", file
, argv
[0]);
876 else if (argv
[2] == NULL
)
877 Debug3("execvp(\"%s\", \"%s\" \"%s\")", file
, argv
[0], argv
[1]);
878 else if (argv
[3] == NULL
)
879 Debug4("execvp(\"%s\", \"%s\" \"%s\" \"%s\")", file
, argv
[0], argv
[1], argv
[2]);
880 else if (argv
[4] == NULL
)
881 Debug5("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\")", file
, argv
[0], argv
[1], argv
[2], argv
[3]);
882 else if (argv
[5] == NULL
)
883 Debug6("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\" \"%s\")", file
, argv
[0], argv
[1], argv
[2], argv
[3], argv
[4]);
885 Debug6("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" ...)", file
, argv
[0], argv
[1], argv
[2], argv
[3], argv
[4]);
887 result
= execvp(file
, argv
);
889 Debug1("execvp() -> %d", result
);
894 int System(const char *string
) {
896 Debug1("system(\"%s\")", string
);
897 diag_immediate_exit
= 1;
898 result
= system(string
);
899 diag_immediate_exit
= 0;
901 Debug1("system() -> %d", result
);
906 int Socketpair(int d
, int type
, int protocol
, int sv
[2]) {
908 Debug4("socketpair(%d, %d, %d, %p)", d
, type
, protocol
, sv
);
909 result
= socketpair(d
, type
, protocol
, sv
);
911 Info6("socketpair(%d, %d, %d, {%d,%d}) -> %d", d
, type
, protocol
, sv
[0], sv
[1], result
);
917 int Socket(int domain
, int type
, int protocol
) {
919 Debug3("socket(%d, %d, %d)", domain
, type
, protocol
);
920 result
= socket(domain
, type
, protocol
);
922 Info4("socket(%d, %d, %d) -> %d", domain
, type
, protocol
, result
);
926 #endif /* _WITH_SOCKET */
929 int Bind(int sockfd
, struct sockaddr
*my_addr
, socklen_t addrlen
) {
933 sockaddr_info(my_addr
, addrlen
, infobuff
, sizeof(infobuff
));
934 Debug3("bind(%d, %s, "F_socklen
")", sockfd
, infobuff
, addrlen
);
935 result
= bind(sockfd
, my_addr
, addrlen
);
937 Debug1("bind() -> %d", result
);
941 #endif /* _WITH_SOCKET */
944 int Connect(int sockfd
, const struct sockaddr
*serv_addr
, socklen_t addrlen
) {
948 if (!diag_in_handler
) diag_flush();
949 /*sockaddr_info(serv_addr, infobuff, sizeof(infobuff));
950 Debug3("connect(%d, %s, "F_Zd")", sockfd, infobuff, addrlen);*/
952 Debug18("connect(%d,{0x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x}, "F_Zd
")",
954 ((unsigned char *)serv_addr
)[0], ((unsigned char *)serv_addr
)[1],
955 ((unsigned char *)serv_addr
)[2], ((unsigned char *)serv_addr
)[3],
956 ((unsigned char *)serv_addr
)[4], ((unsigned char *)serv_addr
)[5],
957 ((unsigned char *)serv_addr
)[6], ((unsigned char *)serv_addr
)[7],
958 ((unsigned char *)serv_addr
)[8], ((unsigned char *)serv_addr
)[9],
959 ((unsigned char *)serv_addr
)[10], ((unsigned char *)serv_addr
)[11],
960 ((unsigned char *)serv_addr
)[12], ((unsigned char *)serv_addr
)[13],
961 ((unsigned char *)serv_addr
)[14], ((unsigned char *)serv_addr
)[15],
964 Debug4("connect(%d, {%d,%s}, "F_socklen
")",
965 sockfd
, serv_addr
->sa_family
,
966 sockaddr_info(serv_addr
, addrlen
, infobuff
, sizeof(infobuff
)),
969 result
= connect(sockfd
, serv_addr
, addrlen
);
971 if (!diag_in_handler
) diag_flush();
972 Debug1("connect() -> %d", result
);
976 #endif /* _WITH_SOCKET */
979 int Listen(int s
, int backlog
) {
981 Debug2("listen(%d, %d)", s
, backlog
);
982 result
= listen(s
, backlog
);
984 Debug1("listen() -> %d", result
);
988 #endif /* _WITH_SOCKET */
991 /* don't forget to handle EINTR when using Accept() ! */
992 int Accept(int s
, struct sockaddr
*addr
, socklen_t
*addrlen
) {
995 if (!diag_in_handler
) diag_flush();
997 FD_SET(s
, &accept_s
);
998 if (diag_select(s
+1, &accept_s
, NULL
, NULL
, NULL
) < 0) {
1001 Debug3("accept(%d, %p, %p)", s
, addr
, addrlen
);
1002 result
= accept(s
, addr
, addrlen
);
1004 if (!diag_in_handler
) diag_flush();
1007 sockaddr_info(addr
, *addrlen
, infobuff
, sizeof(infobuff
));
1008 Info5("accept(%d, {%d, %s}, "F_socklen
") -> %d", s
,
1010 sockaddr_info(addr
, *addrlen
, infobuff
, sizeof(infobuff
)),
1013 Debug1("accept(,,) -> %d", result
);
1018 #endif /* _WITH_SOCKET */
1021 int Getsockname(int s
, struct sockaddr
*name
, socklen_t
*namelen
) {
1025 Debug4("getsockname(%d, %p, %p{"F_socklen
"})", s
, name
, namelen
, *namelen
);
1026 result
= getsockname(s
, name
, namelen
);
1028 /*Debug2("getsockname(,, {"F_socklen"}) -> %d",
1029 *namelen, result);*/
1030 Debug3("getsockname(, {%s}, {"F_socklen
"}) -> %d",
1031 sockaddr_info(name
, *namelen
, infobuff
, sizeof(infobuff
)),
1036 #endif /* _WITH_SOCKET */
1039 int Getpeername(int s
, struct sockaddr
*name
, socklen_t
*namelen
) {
1043 Debug4("getpeername(%d, %p, %p{"F_socklen
"})", s
, name
, namelen
, *namelen
);
1044 result
= getpeername(s
, name
, namelen
);
1046 sockaddr_info(name
, *namelen
, infobuff
, sizeof(infobuff
));
1047 Debug3("getpeername(, {%s}, {"F_socklen
"}) -> %d",
1048 infobuff
, *namelen
, result
);
1052 #endif /* _WITH_SOCKET */
1055 int Getsockopt(int s
, int level
, int optname
, void *optval
, socklen_t
*optlen
) {
1057 Debug5("getsockopt(%d, %d, %d, %p, {"F_socklen
"})",
1058 s
, level
, optname
, optval
, *optlen
);
1059 result
= getsockopt(s
, level
, optname
, optval
, optlen
);
1061 Debug3("getsockopt() -> (,,, 0x%08x, %d), %d",
1062 *(int *)optval
, *optlen
, result
);
1066 #endif /* _WITH_SOCKET */
1069 int Setsockopt(int s
, int level
, int optname
, const void *optval
, int optlen
) {
1071 if (optlen
<= sizeof(int)) {
1072 Debug5("setsockopt(%d, %d, %d, {0x%x}, %d)",
1073 s
, level
, optname
, *(unsigned int *)optval
, optlen
);
1075 Debug6("setsockopt(%d, %d, %d, {0x%08x,%08x}, %d)",
1077 ((unsigned int *)optval
)[0], ((unsigned int *)optval
)[1],
1080 result
= setsockopt(s
, level
, optname
, optval
, optlen
);
1082 Debug1("setsockopt() -> %d", result
);
1086 #endif /* _WITH_SOCKET */
1089 int Recv(int s
, void *buf
, size_t len
, int flags
) {
1091 if (!diag_in_handler
) diag_flush();
1092 Debug4("recv(%d, %p, "F_Zu
", %d)", s
, buf
, len
, flags
);
1093 retval
= recv(s
, buf
, len
, flags
);
1095 if (!diag_in_handler
) diag_flush();
1096 Debug1("recv() -> %d", retval
);
1100 #endif /* _WITH_SOCKET */
1103 int Recvfrom(int s
, void *buf
, size_t len
, int flags
, struct sockaddr
*from
,
1104 socklen_t
*fromlen
) {
1107 if (!diag_in_handler
) diag_flush();
1108 Debug6("recvfrom(%d, %p, "F_Zu
", %d, %p, "F_socklen
")",
1109 s
, buf
, len
, flags
, from
, *fromlen
);
1110 retval
= recvfrom(s
, buf
, len
, flags
, from
, fromlen
);
1112 if (!diag_in_handler
) diag_flush();
1114 Debug4("recvfrom(,,,, {%d,%s}, "F_socklen
") -> %d",
1116 sockaddr_info(from
, *fromlen
, infobuff
, sizeof(infobuff
)),
1119 Debug1("recvfrom(,,,, NULL, NULL) -> %d", retval
);
1124 #endif /* _WITH_SOCKET */
1127 int Recvmsg(int s
, struct msghdr
*msgh
, int flags
) {
1129 if (!diag_in_handler
) diag_flush();
1131 #if defined(HAVE_STRUCT_MSGHDR_MSGCONTROL) && defined(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN) && defined(HAVE_STRUCT_MSGHDR_MSGFLAGS)
1132 Debug10("recvmsg(%d, %p{%p,%u,%p,"F_Zu
",%p,"F_Zu
",%d}, %d)", s
, msgh
,
1133 msgh
->msg_name
, msgh
->msg_namelen
, msgh
->msg_iov
, msgh
->msg_iovlen
,
1134 msgh
->msg_control
, msgh
->msg_controllen
, msgh
->msg_flags
, flags
);
1136 Debug7("recvmsg(%d, %p{%p,%u,%p,%u}, %d)", s
, msgh
,
1137 msgh
->msg_name
, msgh
->msg_namelen
, msgh
->msg_iov
, msgh
->msg_iovlen
,
1140 retval
= recvmsg(s
, msgh
, flags
);
1142 if (!diag_in_handler
) diag_flush();
1143 #if defined(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN)
1144 Debug5("recvmsg(, {%s,%u,,"F_Zu
",,"F_Zu
",}, ) -> %d",
1145 msgh
->msg_name
?sockaddr_info(msgh
->msg_name
, msgh
->msg_namelen
, infobuff
, sizeof(infobuff
)):"NULL",
1146 msgh
->msg_namelen
, msgh
->msg_iovlen
, msgh
->msg_controllen
,
1149 Debug4("recvmsg(, {%s,%u,,%u,,}, ) -> %d",
1150 msgh
->msg_name
?sockaddr_info(msgh
->msg_name
, msgh
->msg_namelen
, infobuff
, sizeof(infobuff
)):"NULL",
1151 msgh
->msg_namelen
, msgh
->msg_iovlen
,
1157 #endif /* _WITH_SOCKET */
1160 int Send(int s
, const void *mesg
, size_t len
, int flags
) {
1162 if (!diag_in_handler
) diag_flush();
1163 Debug5("send(%d, %p[%08x...], "F_Zu
", %d)",
1164 s
, mesg
, ntohl(*(unsigned long *)mesg
), len
, flags
);
1165 retval
= send(s
, mesg
, len
, flags
);
1167 if (!diag_in_handler
) diag_flush();
1168 Debug1("send() -> %d", retval
);
1172 #endif /* _WITH_SOCKET */
1175 int Sendto(int s
, const void *mesg
, size_t len
, int flags
,
1176 const struct sockaddr
*to
, socklen_t tolen
) {
1180 if (!diag_in_handler
) diag_flush();
1181 sockaddr_info(to
, tolen
, infobuff
, sizeof(infobuff
));
1182 Debug7("sendto(%d, %p[%08x...], "F_Zu
", %d, {%s}, %d)",
1183 s
, mesg
, htonl(*(unsigned long *)mesg
), len
, flags
, infobuff
, tolen
);
1184 retval
= sendto(s
, mesg
, len
, flags
, to
, tolen
);
1186 if (!diag_in_handler
) diag_flush();
1187 Debug1("sendto() -> %d", retval
);
1191 #endif /* _WITH_SOCKET */
1194 int Shutdown(int fd
, int how
) {
1196 Info2("shutdown(%d, %d)", fd
, how
);
1197 retval
= shutdown(fd
, how
);
1199 Debug1("shutdown() -> %d", retval
);
1203 #endif /* _WITH_SOCKET */
1205 unsigned int Sleep(unsigned int seconds
) {
1206 unsigned int retval
;
1207 Debug1("sleep(%u)", seconds
);
1208 retval
= sleep(seconds
);
1209 Debug1("sleep() -> %u", retval
);
1213 /* obsolete by POSIX.1-2001 */
1214 void Usleep(unsigned long usec
) {
1215 Debug1("usleep(%lu)", usec
);
1217 Debug("usleep() ->");
1222 unsigned int Nanosleep(const struct timespec
*req
, struct timespec
*rem
) {
1224 Debug3("nanosleep({"F_time
",%ld},%p)", req
->tv_sec
, req
->tv_nsec
, rem
);
1225 retval
= nanosleep(req
, rem
);
1228 Debug3("nanosleep(,{"F_time
",%ld}) -> %d",
1229 rem
->tv_sec
, rem
->tv_nsec
, retval
);
1231 Debug1("nanosleep() -> %d", retval
);
1236 #endif /* HAVE_NANOSLEEP */
1243 Debug1("pause() -> %d", retval
);
1248 #if WITH_IP4 || WITH_IP6
1249 struct hostent
*Gethostbyname(const char *name
) {
1250 struct hostent
*hent
;
1251 Debug1("gethostbyname(\"%s\")", name
);
1252 hent
= gethostbyname(name
);
1254 Debug("gethostbyname() -> NULL");
1256 Debug4("gethostbyname() -> %d.%d.%d.%d",
1257 ((unsigned char *)hent
->h_addr_list
[0])[0],
1258 ((unsigned char *)hent
->h_addr_list
[0])[1],
1259 ((unsigned char *)hent
->h_addr_list
[0])[2],
1260 ((unsigned char *)hent
->h_addr_list
[0])[3]);
1264 #endif /* WITH_IP4 || WITH_IP6 */
1266 #if (_WITH_IP4 || _WITH_IP6) && HAVE_GETADDRINFO
1267 int Getaddrinfo(const char *node
, const char *service
,
1268 const struct addrinfo
*hints
, struct addrinfo
**res
) {
1270 Debug15("getaddrinfo(%s%s%s, %s%s%s, {%d,%d,%d,%d,"F_socklen
",%p,%p,%p}, %p)",
1271 node
?"\"":"", node
?node
:"NULL", node
?"\"":"",
1272 service
?"\"":"", service
?service
:"NULL", service
?"\"":"",
1273 hints
->ai_flags
, hints
->ai_family
, hints
->ai_socktype
,
1274 hints
->ai_protocol
, hints
->ai_addrlen
, hints
->ai_addr
,
1275 hints
->ai_canonname
, hints
->ai_next
, res
);
1276 result
= getaddrinfo(node
, service
, hints
, res
);
1279 sockaddr_info((*res
)->ai_addr
, hints
->ai_addrlen
, sockbuff
, sizeof(sockbuff
));
1280 Debug2("getaddrinfo(,,,{{%s, %s}) -> 0",
1282 (*res
)->ai_canonname
?(*res
)->ai_canonname
:"");
1284 Debug2("getaddrinfo(,,,{%p}) -> %d", *res
, result
);
1288 #endif /* (_WITH_IP4 || _WITH_IP6) && HAVE_GETADDRINFO */
1290 #if (WITH_IP4 || WITH_IP6) && HAVE_PROTOTYPE_LIB_getipnodebyname
1291 struct hostent
*Getipnodebyname(const char *name
, int af
, int flags
,
1293 struct hostent
*result
;
1294 Debug4("getipnodebyname(\"%s\", %d, %d, %p)", name
, af
, flags
, error_num
);
1295 result
= getipnodebyname(name
, af
, flags
, error_num
);
1296 if (result
== NULL
) {
1297 Debug1("getipnodebyname(,,, {%d}) -> NULL", *error_num
);
1299 Debug4("getipnodebyname() -> {\"%s\", %p, %d, %d, ???}",
1300 result
->h_name
, result
->h_aliases
, result
->h_addrtype
,
1305 #endif /* (WITH_IP4 || WITH_IP6) && HAVE_PROTOTYPE_LIB_getipnodebyname */
1307 void *Malloc(size_t size
) {
1309 Debug1("malloc("F_Zd
")", size
);
1310 result
= malloc(size
);
1311 Debug1("malloc() -> %p", result
);
1312 if (result
== NULL
) {
1313 Error1("malloc("F_Zd
"): out of memory", size
);
1319 void *Calloc(size_t nmemb
, size_t size
) {
1321 Debug2("calloc("F_Zd
", "F_Zd
")", nmemb
, size
);
1322 result
= calloc(nmemb
, size
);
1323 Debug1("calloc() -> %p", result
);
1324 if (result
== NULL
) {
1325 Error2("calloc("F_Zd
", "F_Zd
"): out of memory", nmemb
, size
);
1331 void *Realloc(void *ptr
, size_t size
) {
1333 Debug2("realloc(%p, "F_Zd
")", ptr
, size
);
1334 result
= realloc(ptr
, size
);
1335 Debug1("realloc() -> %p", result
);
1336 if (result
== NULL
) {
1337 Error2("realloc(%p, "F_Zd
"): out of memory", ptr
, size
);
1344 int Tcgetattr(int fd
, struct termios
*termios_p
) {
1345 int i
, result
, _errno
;
1346 char chars
[5*NCCS
], *cp
= chars
;
1348 Debug2("tcgetattr(%d, %p)", fd
, termios_p
);
1349 result
= tcgetattr(fd
, termios_p
);
1352 for (i
= 0; i
< NCCS
-1; ++i
) {
1353 cp
+= sprintf(cp
, "%02x,", termios_p
->c_cc
[i
]);
1355 sprintf(cp
, "%02x", termios_p
->c_cc
[i
]);
1356 Debug6("tcgetattr(, {%08x,%08x,%08x,%08x,%s}) -> %d",
1357 termios_p
->c_iflag
, termios_p
->c_oflag
,
1358 termios_p
->c_cflag
, termios_p
->c_lflag
,
1363 #endif /* _WITH_TERMIOS */
1366 int Tcsetattr(int fd
, int optional_actions
, struct termios
*termios_p
) {
1367 int i
, result
, _errno
;
1368 char chars
[5*NCCS
], *cp
= chars
;
1370 for (i
= 0; i
< NCCS
-1; ++i
) {
1371 cp
+= sprintf(cp
, "%02x,", termios_p
->c_cc
[i
]);
1373 sprintf(cp
, "%02x", termios_p
->c_cc
[i
]);
1374 Debug7("tcsetattr(%d, %d, {%08x,%08x,%08x,%08x,%s})", fd
, optional_actions
,
1375 termios_p
->c_iflag
, termios_p
->c_oflag
,
1376 termios_p
->c_cflag
, termios_p
->c_lflag
, chars
);
1377 result
= tcsetattr(fd
, optional_actions
, termios_p
);
1379 Debug1("tcsetattr() -> %d", result
);
1383 #endif /* _WITH_TERMIOS */
1385 char *Ttyname(int fd
) {
1388 Debug1("ttyname(%d)", fd
);
1389 result
= ttyname(fd
);
1392 Debug1("ttyname() -> %s", result
);
1394 Debug("ttyname() -> NULL");
1399 int Isatty(int fd
) {
1401 Debug1("isatty(%d)", fd
);
1402 result
= isatty(fd
);
1404 Debug1("isatty() -> %d", result
);
1410 int Openpty(int *ptyfd
, int *ttyfd
, char *ptyname
, struct termios
*termp
,
1411 struct winsize
*winp
) {
1413 Debug5("openpty(%p, %p, %p, %p, %p)", ptyfd
, ttyfd
, ptyname
, termp
, winp
);
1414 result
= openpty(ptyfd
, ttyfd
, ptyname
, termp
, winp
);
1416 Info4("openpty({%d}, {%d}, {\"%s\"},,) -> %d", *ptyfd
, *ttyfd
, ptyname
,
1421 #endif /* HAVE_OPENPTY */
1424 int Grantpt(int fd
) {
1426 Debug1("grantpt(%d)", fd
);
1427 result
= grantpt(fd
);
1429 Debug1("grantpt() -> %d", result
);
1433 #endif /* HAVE_GRANTPT */
1436 int Unlockpt(int fd
) {
1438 Debug1("unlockpt(%d)", fd
);
1439 result
= unlockpt(fd
);
1441 Debug1("unlockpt() -> %d", result
);
1445 #endif /* HAVE_UNLOCKPT */
1447 #if HAVE_PROTOTYPE_LIB_ptsname /* AIX, not Linux */
1448 char *Ptsname(int fd
) {
1451 Debug1("ptsname(%d)", fd
);
1452 result
= ptsname(fd
);
1455 Debug1("ptsname() -> %s", result
);
1457 Debug("ptsname() -> NULL");
1461 #endif /* HAVE_PROTOTYPE_LIB_ptsname */
1463 int Uname(struct utsname
*buf
) {
1465 Debug1("uname(%p)", buf
);
1466 result
= uname(buf
);
1468 #if UNAME_DOMAINNAME
1469 Debug6("uname({%s, %s, %s, %s, %s, %s})",
1470 buf
->sysname
, buf
->nodename
, buf
->release
,
1471 buf
->version
, buf
->machine
, buf
->domainname
);
1473 Debug5("uname({%s, %s, %s, %s, %s})",
1474 buf
->sysname
, buf
->nodename
, buf
->release
,
1475 buf
->version
, buf
->machine
);
1481 int Gethostname(char *name
, size_t len
) {
1483 Debug2("gethostname(%p, "F_Zu
")", name
, len
);
1484 result
= gethostname(name
, len
);
1486 Debug2("gethostname(\"%s\", ) -> %d", name
, result
);
1491 /* due to Linux docu, it does not set errno */
1492 int Atexit(void (*func
)(void)) {
1494 Debug1("atexit(%p)", func
);
1495 result
= atexit(func
);
1496 Debug1("atexit() -> %d", result
);
1501 void Exit(int status
) {
1502 if (!diag_in_handler
) diag_flush();
1503 Debug1("exit(%d)", status
);
1512 int Mkstemp(char *template) {
1514 Debug1("mkstemp(\"%s\")", template);
1515 result
= mkstemp(template);
1517 Info2("mkstemp({%s}) -> %d", template, result
);
1522 int Setenv(const char *name
, const char *value
, int overwrite
) {
1524 Debug3("setenv(\"%s\", \"%s\", %d)", name
, value
, overwrite
);
1525 result
= setenv(name
, value
, overwrite
);
1527 Debug1("setenv() -> %d", result
);
1533 /* on Linux it returns int but on FreeBSD void.
1534 we do not expect many errors, so we take void which works on all systems. */
1535 void Unsetenv(const char *name
) {
1537 Debug1("unsetenv(\"%s\")", name
);
1540 Debug("unsetenv() ->");
1548 char *Readline(const char *prompt
) {
1552 Debug1("readline(\"%s\")", prompt
);
1554 Debug("readline(NULL)");
1556 result
= readline(prompt
);
1558 Debug("readline() -> \"...\"");
1560 Debug("readline() -> NULL");
1565 void Using_history(void) {
1566 Debug("using_history()");
1568 Debug("using_history() ->");
1571 int Read_history(const char *filename
) {
1575 Debug1("read_history(\"%s\")", filename
);
1577 Debug("read_history(NULL)");
1579 result
= read_history(filename
);
1581 Debug1("read_history() -> %d", result
);
1583 Debug("read_history() -> 0");
1588 int Write_history(const char *filename
) {
1592 Debug1("write_history(\"%s\")", filename
);
1594 Debug("write_history(NULL)");
1596 result
= write_history(filename
);
1598 Debug1("write_history() -> %d", result
);
1600 Debug("write_history() -> 0");
1605 int Append_history(int nelements
, const char *filename
) {
1609 Debug2("append_history(%d, \"%s\")", nelements
, filename
);
1611 Debug1("append_history(%d, NULL)", nelements
);
1613 result
= append_history(nelements
, filename
);
1615 Debug1("append_history() -> %d", result
);
1617 Debug("append_history() -> 0");
1622 int Where_history(void) {
1625 Debug("where_history()");
1626 result
= where_history();
1627 Debug1("where_history() -> %d", result
);
1631 void Add_history(const char *string
) {
1632 Debug1("add_history(\"%s\")", string
);
1633 add_history(string
);
1634 Debug("add_history() ->");
1637 #endif /* WITH_READLINE */
1639 #endif /* WITH_SYCLS */