socat/sycls.c

1640 lines
43 KiB
C

/* source: sycls.c */
/* Copyright Gerhard Rieger */
/* Published under the GNU General Public License V.2, see file COPYING */
/* explicit system call and C library trace function, for those who miss strace
*/
#include "config.h"
#include "xioconfig.h" /* what features are enabled */
#if WITH_SYCLS
#include "sysincludes.h"
#include "mytypes.h"
#include "compat.h"
#include "errno.h"
#include "error.h"
#include "filan.h"
#include "utils.h"
#include "sysutils.h"
#include "sycls.h"
mode_t Umask(mode_t mask) {
mode_t result;
int _errno;
Debug1("umask("F_mode")", mask);
result = umask(mask);
_errno = errno;
Debug1("umask() -> "F_mode, result);
errno = _errno;
return result;
}
int Open(const char *pathname, int flags, mode_t mode) {
int result, _errno;
if (!diag_in_handler) diag_flush();
Debug3("open(\"%s\", 0%o, 0%03o)", pathname, flags, mode);
result = open(pathname, flags, mode);
_errno = errno;
if (!diag_in_handler) diag_flush();
Info4("open(\"%s\", 0%o, 0%03o) -> %d", pathname, flags, mode, result);
errno = _errno;
return result;
}
int Creat(const char *pathname, mode_t mode) {
int result, _errno;
Debug2("creat(\"%s\", 0%03o)", pathname, mode);
result = creat(pathname, mode);
_errno = errno;
Info3("creat(\"%s\", 0%03o) -> %d", pathname, mode, result);
errno = _errno;
return result;
}
off_t Lseek(int fildes, off_t offset, int whence) {
int _errno;
off_t result;
Debug3("lseek(%d, "F_off", %d)", fildes, offset, whence);
result = lseek(fildes, offset, whence);
_errno = errno;
Debug1("lseek() -> "F_off, result);
errno = _errno;
return result;
}
#if HAVE_LSEEK64
off64_t Lseek64(int fildes, off64_t offset, int whence) {
int _errno;
off64_t result;
Debug3("lseek64(%d, "F_off64", %d)", fildes, offset, whence);
result = lseek64(fildes, offset, whence);
_errno = errno;
Debug1("lseek64() -> "F_off64, result);
errno = _errno;
return result;
}
#endif /* HAVE_LSEEK64 */
pid_t Getpid(void) {
pid_t result;
int _errno;
Debug("getpid()");
result = getpid();
_errno = errno;
Debug1("getpid() -> "F_pid, result);
errno = _errno;
return result;
}
pid_t Getppid(void) {
pid_t result;
int _errno;
Debug("getppid()");
result = getppid();
_errno = errno;
Debug1("getppid() -> "F_pid, result);
errno = _errno;
return result;
}
pid_t Getpgrp(void) {
pid_t result;
int _errno;
Debug("getpgrp()");
result = getpgrp();
_errno = errno;
Debug1("getpgrp() -> "F_pid, result);
errno = _errno;
return result;
}
#if 0 /* does not compile for FreeBSD */
/* setpgrp() is not BSD compatible, needs setpgid(..., ...) instead */
int Setpgrp(void) {
int result, _errno;
Debug("setpgrp()");
result = setpgrp();
_errno = errno;
Debug1("setpgrp() -> %d", result);
errno = _errno;
return result;
}
#endif
#if HAVE_GETPGID
int Getpgid(pid_t pid) {
pid_t result;
int _errno;
Debug1("getpgid("F_pid")", pid);
result = getpgid(pid);
_errno = errno;
Debug1("getpgid() -> "F_pid, result);
errno = _errno;
return result;
}
#endif
int Setpgid(pid_t pid, pid_t pgid) {
int result, _errno;
Debug2("setpgid("F_pid", "F_pid")", pid, pgid);
result = setpgid(pid, pgid);
_errno = errno;
Debug1("setpgid() -> %d", result);
errno = _errno;
return result;
}
pid_t Tcgetpgrp(int fd) {
int result, _errno;
Debug1("tcgetpgrp(%d)", fd);
result = tcgetpgrp(fd);
_errno = errno;
Debug1("tcgetpgrp() -> %d", result);
errno = _errno;
return result;
}
int Tcsetpgrp(int fd, pid_t pgrpid) {
int result, _errno;
Debug2("tcsetpgrp(%d, "F_pid")", fd, pgrpid);
result = tcsetpgrp(fd, pgrpid);
_errno = errno;
Debug1("tcsetpgrp() -> %d", result);
errno = _errno;
return result;
}
#if HAVE_GETSID
pid_t Getsid(pid_t pid) {
int result, _errno;
Debug1("getsid("F_pid")", pid);
result = getsid(pid);
_errno = errno;
Debug1("getsid() -> "F_pid, result);
errno = _errno;
return result;
}
#endif
pid_t Setsid(void) {
int result, _errno;
Debug("setsid()");
result = setsid();
_errno = errno;
Debug1("setsid() -> "F_pid, result);
errno = _errno;
return result;
}
uid_t Getuid(void) {
uid_t result;
int _errno;
Debug("getuid()");
result = getuid();
_errno = errno;
Debug1("getuid() -> "F_uid, result);
errno = _errno;
return result;
}
uid_t Geteuid(void) {
uid_t result;
int _errno;
Debug("geteuid()");
result = geteuid();
_errno = errno;
Debug1("geteuid() -> "F_uid, result);
errno = _errno;
return result;
}
int Setuid(uid_t uid) {
int result, _errno;
Debug1("setuid("F_uid")", uid);
result = setuid(uid);
_errno = errno;
Debug1("setuid() -> %d", result);
errno = _errno;
return result;
}
gid_t Getgid(void) {
gid_t result;
int _errno;
Debug("getgid()");
result = getgid();
_errno = errno;
Debug1("getgid() -> "F_gid, result);
errno = _errno;
return result;
}
gid_t Getegid(void) {
gid_t result;
int _errno;
Debug("getegid()");
result = getegid();
_errno = errno;
Debug1("getegid() -> "F_gid, result);
errno = _errno;
return result;
}
int Setgid(gid_t gid) {
int result, _errno;
Debug1("setgid("F_gid")", gid);
result = setgid(gid);
_errno = errno;
Debug1("setgid() -> %d", result);
errno = _errno;
return result;
}
int Initgroups(const char *user, gid_t group) {
int result, _errno;
Debug2("initgroups(\"%s\", "F_gid")", user, group);
result = initgroups(user, group);
_errno = errno;
Debug1("initgroups() -> %d", result);
errno = _errno;
return result;
}
int Getgroups(int size, gid_t list[]) {
int result, _errno;
Debug2("getgroups(%d, "F_gid",...)", size, list[0]);
result = getgroups(size, list);
_errno = errno;
Debug1("getgroups() -> %d", result);
errno = _errno;
return result;
}
#if HAVE_SETGROUPS
int Setgroups(size_t size, const gid_t *list) {
int result, _errno;
switch (size) {
case 0: Debug1("setgroups("F_Zu", [])", size); break;;
case 1: Debug2("setgroups("F_Zu", ["F_gid"])", size, list[0]); break;;
case 2: Debug3("setgroups("F_Zu", ["F_gid","F_gid"])", size, list[0], list[1]); break;;
default: Debug3("setgroups("F_Zu", ["F_gid","F_gid",...])", size, list[0], list[1]); break;;
}
result = setgroups(size, list);
_errno = errno;
Debug1("setgroups() -> %d", result);
errno = _errno;
return result;
}
#endif
#if HAVE_GETGROUPLIST
int Getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups) {
int n = *ngroups, result;
Debug4("getgrouplist(\"%s\", "F_gid", %p, [%d])", user, group, groups, n);
result = getgrouplist(user, group, groups, ngroups);
switch (Min(n,*ngroups)) {
case 0: Debug2("getgrouplist(,, [], [%d]) -> %d", *ngroups, result); break;
case 1: Debug3("getgrouplist(,, ["F_gid"], [%d]) -> %d", groups[0], *ngroups, result); break;
case 2: Debug4("getgrouplist(,, ["F_gid","F_gid"], [%d]) -> %d", groups[0], groups[1], *ngroups, result); break;
default: Debug4("getgrouplist(,, ["F_gid","F_gid",...], [%d]) -> %d", groups[0], groups[1], *ngroups, result); break;
}
return result;
}
#endif
int Chdir(const char *path) {
int result, _errno;
Debug1("chdir(\"%s\")", path);
result = chdir(path);
_errno = errno;
Debug1("chdir() -> %d", result);
errno = _errno;
return result;
}
int Chroot(const char *path) {
int result, _errno;
Debug1("chroot(\"%s\")", path);
result = chroot(path);
_errno = errno;
Debug1("chroot() -> %d", result);
errno = _errno;
return result;
}
int Gettimeofday(struct timeval *tv, struct timezone *tz) {
int result, _errno;
#if WITH_MSGLEVEL <= E_DEBUG
if (tz) {
Debug3("gettimeofday(%p, {%d,%d})",
tv, tz->tz_minuteswest, tz->tz_dsttime);
} else {
Debug1("gettimeofday(%p, NULL)", tv);
}
#endif /* WITH_MSGLEVEL <= E_DEBUG */
result = gettimeofday(tv, tz);
_errno = errno;
#if WITH_MSGLEVEL <= E_DEBUG
if (tz) {
Debug5("gettimeofday({%ld,%ld}, {%d,%d}) -> %d",
tv->tv_sec, tv->tv_usec, tz->tz_minuteswest, tz->tz_dsttime,
result);
} else {
Debug3("gettimeofday({%ld,%ld},) -> %d",
tv->tv_sec, tv->tv_usec, result);
}
#endif /* WITH_MSGLEVEL <= E_DEBUG */
errno = _errno;
return result;
}
int Mknod(const char *pathname, mode_t mode, dev_t dev) {
int result, _errno;
Debug3("mknod(\"%s\", 0%o, "F_dev")", pathname, mode, dev);
result = mknod(pathname, mode, dev);
_errno = errno;
Debug1("mknod() -> %d", result);
errno = _errno;
return result;
}
int Mkfifo(const char *pathname, mode_t mode) {
int result, _errno;
Debug2("mkfifo(\"%s\", 0%o)", pathname, mode);
result = mkfifo(pathname, mode);
_errno = errno;
Debug1("mkfifo() -> %d", result);
errno = _errno;
return result;
}
static void prtstat(const char *func, struct stat *buf, int result) {
char txt[256], *t = txt;
t += sprintf(t, "%s(, {"F_dev","F_st_ino","F_mode","F_st_nlink","F_uid","F_gid,
func, buf->st_dev, buf->st_ino,
buf->st_mode, buf->st_nlink, buf->st_uid, buf->st_gid);
#if HAVE_ST_RDEV
t += sprintf(t, ","F_dev, buf->st_rdev);
#endif
t += sprintf(t, ","F_st_size, buf->st_size);
#if HAVE_ST_BLKSIZE
t += sprintf(t, ","F_st_blksize, buf->st_blksize);
#endif
#if HAVE_ST_BLOCKS
t += sprintf(t, ","F_st_blocks, buf->st_blocks);
#endif
sprintf(t, ",...}) -> %d", result);
Debug(txt);
}
#if defined(HAVE_STAT64) || defined(HAVE_FSTAT64) || defined(HAVE_LSTAT64)
static void prtstat64(const char *func, struct stat64 *buf, int result) {
char txt[256], *t = txt;
if (result < 0) {
sprintf(t, "%s(, {}) -> %d", func, result);
} else {
t += sprintf(t, "%s(, {"F_dev","F_st64_ino","F_mode","F_st_nlink","F_uid","F_gid,
func, buf->st_dev, buf->st_ino,
buf->st_mode, buf->st_nlink, buf->st_uid, buf->st_gid);
#if HAVE_ST_RDEV
t += sprintf(t, ","F_dev, buf->st_rdev);
#endif
t += sprintf(t, ","F_st64_size, buf->st_size);
#if HAVE_ST_BLKSIZE
t += sprintf(t, ","F_st_blksize, buf->st_blksize);
#endif
#if HAVE_ST_BLOCKS
t += sprintf(t, ","F_st64_blocks, buf->st_blocks);
#endif
sprintf(t, ",...}) -> %d", result);
}
Debug(txt);
}
#endif /* defined(HAVE_STAT64) || defined(HAVE_FSTAT64) || defined(HAVE_LSTAT64) */
int Stat(const char *file_name, struct stat *buf) {
int result, _errno;
Debug2("stat(%s, %p)", file_name, buf);
result = stat(file_name, buf);
_errno = errno;
prtstat("stat", buf, result);
errno = _errno;
return result;
}
#if HAVE_STAT64
int Stat64(const char *file_name, struct stat64 *buf) {
int result, _errno;
Debug2("stat64(%s, %p)", file_name, buf);
result = stat64(file_name, buf);
_errno = errno;
prtstat64("stat64", buf, result);
errno = _errno;
return result;
}
#endif /* HAVE_STAT64 */
int Fstat(int filedes, struct stat *buf) {
int result, _errno;
Debug2("fstat(%d, %p)", filedes, buf);
result = fstat(filedes, buf);
_errno = errno;
prtstat("fstat", buf, result);
errno = _errno;
return result;
}
#if HAVE_FSTAT64
int Fstat64(int filedes, struct stat64 *buf) {
int result, _errno;
Debug2("fstat64(%d, %p)", filedes, buf);
result = fstat64(filedes, buf);
_errno = errno;
prtstat64("fstat64", buf, result);
errno = _errno;
return result;
}
#endif /* HAVE_FSTAT64 */
int Lstat(const char *file_name, struct stat *buf) {
int result, _errno;
Debug2("lstat(%s, %p)", file_name, buf);
result = lstat(file_name, buf);
_errno = errno;
prtstat("lstat", buf, result);
errno = _errno;
return result;
}
#if HAVE_LSTAT64
int Lstat64(const char *file_name, struct stat64 *buf) {
int result, _errno;
Debug2("lstat64(%s, %p)", file_name, buf);
result = lstat64(file_name, buf);
_errno = errno;
prtstat64("lstat64", buf, result);
errno = _errno;
return result;
}
#endif /* HAVE_LSTAT64 */
int Dup(int oldfd) {
int newfd, _errno;
Debug1("dup(%d)", oldfd);
newfd = dup(oldfd);
_errno = errno;
Info2("dup(%d) -> %d", oldfd, newfd);
errno = _errno;
return newfd;
}
int Dup2(int oldfd, int newfd) {
int result, _errno;
Debug2("dup2(%d, %d)", oldfd, newfd);
result = dup2(oldfd, newfd);
_errno = errno;
Info3("dup2(%d, %d) -> %d", oldfd, newfd, result);
errno = _errno;
return result;
}
int Pipe(int filedes[2]) {
int result, _errno;
Debug1("pipe(%p)", filedes);
result = pipe(filedes);
_errno = errno;
Info3("pipe({%d,%d}) -> %d", filedes[0], filedes[1], result);
errno = _errno;
return result;
}
ssize_t Read(int fd, void *buf, size_t count) {
ssize_t result;
int _errno;
if (!diag_in_handler) diag_flush();
Debug3("read(%d, %p, "F_Zu")", fd, buf, count);
result = read(fd, buf, count);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("read -> "F_Zd, result);
errno = _errno;
return result;
}
ssize_t Write(int fd, const void *buf, size_t count) {
ssize_t result;
int _errno;
if (!diag_in_handler) diag_flush();
Debug3("write(%d, %p, "F_Zu")", fd, buf, count);
result = write(fd, buf, count);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("write -> "F_Zd, result);
errno = _errno;
return result;
}
int Fcntl(int fd, int cmd) {
int result, _errno;
if (!diag_in_handler) diag_flush();
Debug2("fcntl(%d, %d)", fd, cmd);
result = fcntl(fd, cmd);
if (!diag_in_handler) diag_flush();
_errno = errno;
Debug1("fcntl() -> %d", result);
errno = _errno;
return result;
}
int Fcntl_l(int fd, int cmd, long arg) {
int result, _errno;
if (!diag_in_handler) diag_flush();
Debug3("fcntl(%d, %d, %ld)", fd, cmd, arg);
result = fcntl(fd, cmd, arg);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("fcntl() -> %d", result);
errno = _errno;
return result;
}
int Fcntl_lock(int fd, int cmd, struct flock *l) {
int result, _errno;
if (!diag_in_handler) diag_flush();
Debug7("fcntl(%d, %d, {type=%hd,whence=%hd,start="F_off",len="F_off",pid="F_pid"})",
fd, cmd, l->l_type, l->l_whence, l->l_start, l->l_len, l->l_pid);
result = fcntl(fd, cmd, l);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("fcntl() -> %d", result);
errno = _errno;
return result;
}
int Ftruncate(int fd, off_t length) {
int retval, _errno;
Debug2("ftruncate(%d, "F_off")", fd, length);
retval = ftruncate(fd, length);
_errno = errno;
Debug1("ftruncate() -> %d", retval);
errno = _errno;
return retval;
}
#if HAVE_FTRUNCATE64
int Ftruncate64(int fd, off64_t length) {
int retval, _errno;
Debug2("ftruncate64(%d, "F_off64")", fd, length);
retval = ftruncate64(fd, length);
_errno = errno;
Debug1("ftruncate64() -> %d", retval);
errno = _errno;
return retval;
}
#endif /* HAVE_FTRUNCATE64 */
#if HAVE_FLOCK
int Flock(int fd, int operation) {
int retval, _errno;
if (!diag_in_handler) diag_flush();
Debug2("flock(%d, %d)", fd, operation);
retval = flock(fd, operation);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("flock() -> %d", retval);
errno = _errno;
return retval;
}
#endif /* HAVE_FLOCK */
int Ioctl(int d, int request, void *argp) {
int retval, _errno;
if (!diag_in_handler) diag_flush();
if (argp > (void *)0x10000) { /* fuzzy...*/
Debug4("ioctl(%d, 0x%x, %p{%lu})", d, request, argp, *(unsigned long *)argp);
} else {
Debug3("ioctl(%d, 0x%x, 0x%p)", d, request, argp);
}
retval = ioctl(d, request, argp);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("ioctl() -> %d", retval);
errno = _errno;
return retval;
}
int Ioctl_int(int d, int request, int arg) {
int retval, _errno;
Debug3("ioctl(%d, 0x%x, %d)", d, request, arg);
retval = ioctl(d, request, arg);
_errno = errno;
Debug1("ioctl() -> %d", retval);
errno = _errno;
return retval;
}
int Close(int fd) {
int retval, _errno;
Info1("close(%d)", fd);
retval = close(fd);
_errno = errno;
Debug1("close() -> %d", retval);
errno = _errno;
return retval;
}
int Fchown(int fd, uid_t owner, gid_t group) {
int retval, _errno;
Debug3("fchown(%d, "F_uid", "F_gid")", fd, owner, group);
retval = fchown(fd, owner, group);
_errno = errno;
Debug1("fchown() -> %d", retval);
errno = _errno;
return retval;
}
int Fchmod(int fd, mode_t mode) {
int retval, _errno;
Debug2("fchmod(%d, 0%o)", fd, mode);
retval = fchmod(fd, mode);
_errno = errno;
Debug1("fchmod() -> %d", retval);
errno = _errno;
return retval;
}
int Unlink(const char *pathname) {
int retval, _errno;
Debug1("unlink(\"%s\")", pathname);
retval = unlink(pathname);
_errno = errno;
Debug1("unlink() -> %d", retval);
errno = _errno;
return retval;
}
int Symlink(const char *oldpath, const char *newpath) {
int retval, _errno;
Debug2("symlink(\"%s\", \"%s\")", oldpath, newpath);
retval = symlink(oldpath, newpath);
_errno = errno;
Debug1("symlink() -> %d", retval);
errno = _errno;
return retval;
}
int Readlink(const char *path, char *buf, size_t bufsiz) {
int retval, _errno;
Debug3("readlink(\"%s\", %p, "F_Zu")", path, buf, bufsiz);
retval = readlink(path, buf, bufsiz);
_errno = errno;
Debug1("readlink() -> %d", retval);
errno = _errno;
return retval;
}
int Chown(const char *path, uid_t owner, gid_t group) {
int retval, _errno;
Debug3("chown(\"%s\", "F_uid", "F_gid")", path, owner, group);
retval = chown(path, owner, group);
_errno = errno;
Debug1("chown() -> %d", retval);
errno = _errno;
return retval;
}
int Chmod(const char *path, mode_t mode) {
int retval, _errno;
Debug2("chmod(\"%s\", 0%o)", path, mode);
retval = chmod(path, mode);
_errno = errno;
Debug1("chmod() -> %d", retval);
errno = _errno;
return retval;
}
#if HAVE_POLL
/* we only show the first struct pollfd; hope this is enough for most cases. */
int Poll(struct pollfd *ufds, unsigned int nfds, int timeout) {
int _errno, result;
if (!diag_in_handler) diag_flush();
if (nfds == 4) {
Debug10("poll({%d,0x%02hx,}{%d,0x%02hx,}{%d,0x%02hx,}{%d,0x%02hx,}, %u, %d)",
ufds[0].fd, ufds[0].events, ufds[1].fd, ufds[1].events,
ufds[2].fd, ufds[2].events, ufds[3].fd, ufds[3].events,
nfds, timeout);
} else {
Debug4("poll({%d,0x%02hx,}, , %u, %d)", ufds[0].fd, ufds[0].events, nfds, timeout);
}
result = poll(ufds, nfds, timeout);
_errno = errno;
if (!diag_in_handler) diag_flush();
if (nfds == 4) {
Debug5("poll(, {,,0x%02hx}{,,0x%02hx}{,,0x%02hx}{,,0x%02hx}) -> %d",
ufds[0].revents, ufds[1].revents, ufds[2].revents, ufds[3].revents, result);
} else {
Debug2("poll(, {,,0x%02hx}) -> %d", ufds[0].revents, result);
}
errno = _errno;
return result;
}
#endif /* HAVE_POLL */
/* we only show the first word of the fd_set's; hope this is enough for most
cases. */
int Select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout) {
int result, _errno;
if (!diag_in_handler) diag_flush();
#if HAVE_FDS_BITS
Debug7("select(%d, &0x%lx, &0x%lx, &0x%lx, %s%lu."F_tv_usec")",
n, readfds?readfds->fds_bits[0]:0, writefds?writefds->fds_bits[0]:0,
exceptfds?exceptfds->fds_bits[0]:0,
timeout?"&":"NULL/", timeout?timeout->tv_sec:0,
timeout?timeout->tv_usec:0);
#else
Debug7("select(%d, &0x%lx, &0x%lx, &0x%lx, %s%lu.%06u)",
n, readfds?readfds->__fds_bits[0]:0, writefds?writefds->__fds_bits[0]:0,
exceptfds?exceptfds->__fds_bits[0]:0,
timeout?"&":"NULL/", timeout?timeout->tv_sec:0,
timeout?timeout->tv_usec:0);
#endif
result = select(n, readfds, writefds, exceptfds, timeout);
_errno = errno;
if (!diag_in_handler) diag_flush();
#if HAVE_FDS_BITS
Debug7("select -> (, 0x%lx, 0x%lx, 0x%lx, %s%lu."F_tv_usec"), %d",
readfds?readfds->fds_bits[0]:0, writefds?writefds->fds_bits[0]:0,
exceptfds?exceptfds->fds_bits[0]:0,
timeout?"&":"NULL/", timeout?timeout->tv_sec:0,
timeout?timeout->tv_usec:0, result);
#else
Debug7("select -> (, 0x%lx, 0x%lx, 0x%lx, %s%lu.%06u), %d",
readfds?readfds->__fds_bits[0]:0, writefds?writefds->__fds_bits[0]:0,
exceptfds?exceptfds->__fds_bits[0]:0,
timeout?"&":"NULL/", timeout?timeout->tv_sec:0,
timeout?timeout->tv_usec:0, result);
#endif
errno = _errno;
return result;
}
pid_t Fork(void) {
pid_t pid;
int _errno;
Debug("fork()");
pid = fork();
_errno = errno;
Debug1("fork() -> %d", pid); /* attention: called twice! */
errno = _errno;
return pid;
}
pid_t Waitpid(pid_t pid, int *status, int options) {
int _errno;
pid_t retval;
if (!diag_in_handler) diag_flush();
Debug3("waitpid("F_pid", %p, %d)", pid, status, options);
retval = waitpid(pid, status, options);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug2("waitpid(, {%d}, ) -> "F_pid, *status, retval);
errno = _errno;
return retval;
}
sighandler_t Signal(int signum, sighandler_t handler) {
int _errno;
sighandler_t retval;
Debug2("signal(%d, %p)", signum, handler);
retval = signal(signum, handler);
_errno = errno;
Debug1("signal() -> %p", retval);
errno = _errno;
return retval;
}
#if HAVE_SIGACTION
int Sigaction(int signum, const struct sigaction *act,
struct sigaction *oldact) {
int retval;
Debug3("sigaction(%d, %p, %p)", signum, act, oldact);
retval = sigaction(signum, act, oldact);
Debug1("sigaction() -> %d", retval);
return retval;
}
#endif /* HAVE_SIGACTION */
int Sigprocmask(int how, const sigset_t *set, sigset_t *oset) {
int retval;
Debug3("sigprocmask(%d, %p, %p)", how, set, oset);
retval = sigprocmask(how, set, oset);
Debug1("sigprocmask() -> %d", retval);
return retval;
}
unsigned int Alarm(unsigned int seconds) {
unsigned int retval;
Debug1("alarm(%u)", seconds);
retval = alarm(seconds);
Debug1("alarm() -> %u", retval);
return retval;
}
int Kill(pid_t pid, int sig) {
int retval, _errno;
Debug2("kill("F_pid", %d)", pid, sig);
retval = kill(pid, sig);
_errno = errno;
Debug1("kill() -> %d", retval);
errno = _errno;
return retval;
}
int Link(const char *oldpath, const char *newpath) {
int retval, _errno;
Debug2("link(\"%s\", \"%s\")", oldpath, newpath);
retval = link(oldpath, newpath);
_errno = errno;
Debug1("link() -> %d", retval);
errno = _errno;
return retval;
}
int Execvp(const char *file, char *const argv[]) {
int result, _errno;
if (argv[1] == NULL)
Debug2("execvp(\"%s\", \"%s\")", file, argv[0]);
else if (argv[2] == NULL)
Debug3("execvp(\"%s\", \"%s\" \"%s\")", file, argv[0], argv[1]);
else if (argv[3] == NULL)
Debug4("execvp(\"%s\", \"%s\" \"%s\" \"%s\")", file, argv[0], argv[1], argv[2]);
else if (argv[4] == NULL)
Debug5("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\")", file, argv[0], argv[1], argv[2], argv[3]);
else if (argv[5] == NULL)
Debug6("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\" \"%s\")", file, argv[0], argv[1], argv[2], argv[3], argv[4]);
else
Debug6("execvp(\"%s\", \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" ...)", file, argv[0], argv[1], argv[2], argv[3], argv[4]);
result = execvp(file, argv);
_errno = errno;
Debug1("execvp() -> %d", result);
errno = _errno;
return result;
}
int System(const char *string) {
int result, _errno;
Debug1("system(\"%s\")", string);
diag_immediate_exit = 1;
result = system(string);
diag_immediate_exit = 0;
_errno = errno;
Debug1("system() -> %d", result);
errno = _errno;
return result;
}
int Socketpair(int d, int type, int protocol, int sv[2]) {
int result, _errno;
Debug4("socketpair(%d, %d, %d, %p)", d, type, protocol, sv);
result = socketpair(d, type, protocol, sv);
_errno = errno;
Info6("socketpair(%d, %d, %d, {%d,%d}) -> %d", d, type, protocol, sv[0], sv[1], result);
errno = _errno;
return result;
}
#if _WITH_SOCKET
int Socket(int domain, int type, int protocol) {
int result, _errno;
Debug3("socket(%d, %d, %d)", domain, type, protocol);
result = socket(domain, type, protocol);
_errno = errno;
Info4("socket(%d, %d, %d) -> %d", domain, type, protocol, result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) {
int result, _errno;
char infobuff[256];
sockaddr_info(my_addr, addrlen, infobuff, sizeof(infobuff));
Debug3("bind(%d, %s, "F_socklen")", sockfd, infobuff, addrlen);
result = bind(sockfd, my_addr, addrlen);
_errno = errno;
Debug1("bind() -> %d", result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) {
int result, _errno;
char infobuff[256];
if (!diag_in_handler) diag_flush();
/*sockaddr_info(serv_addr, infobuff, sizeof(infobuff));
Debug3("connect(%d, %s, "F_Zd")", sockfd, infobuff, addrlen);*/
#if 0
Debug18("connect(%d,{0x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x}, "F_Zd")",
sockfd,
((unsigned char *)serv_addr)[0], ((unsigned char *)serv_addr)[1],
((unsigned char *)serv_addr)[2], ((unsigned char *)serv_addr)[3],
((unsigned char *)serv_addr)[4], ((unsigned char *)serv_addr)[5],
((unsigned char *)serv_addr)[6], ((unsigned char *)serv_addr)[7],
((unsigned char *)serv_addr)[8], ((unsigned char *)serv_addr)[9],
((unsigned char *)serv_addr)[10], ((unsigned char *)serv_addr)[11],
((unsigned char *)serv_addr)[12], ((unsigned char *)serv_addr)[13],
((unsigned char *)serv_addr)[14], ((unsigned char *)serv_addr)[15],
addrlen);
#else
Debug4("connect(%d, {%d,%s}, "F_socklen")",
sockfd, serv_addr->sa_family,
sockaddr_info(serv_addr, addrlen, infobuff, sizeof(infobuff)),
addrlen);
#endif
result = connect(sockfd, serv_addr, addrlen);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("connect() -> %d", result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Listen(int s, int backlog) {
int result, _errno;
Debug2("listen(%d, %d)", s, backlog);
result = listen(s, backlog);
_errno = errno;
Debug1("listen() -> %d", result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
/* don't forget to handle EINTR when using Accept() ! */
int Accept(int s, struct sockaddr *addr, socklen_t *addrlen) {
int result, _errno;
fd_set accept_s;
if (!diag_in_handler) diag_flush();
FD_ZERO(&accept_s);
FD_SET(s, &accept_s);
if (diag_select(s+1, &accept_s, NULL, NULL, NULL) < 0) {
return -1;
}
Debug3("accept(%d, %p, %p)", s, addr, addrlen);
result = accept(s, addr, addrlen);
_errno = errno;
if (!diag_in_handler) diag_flush();
if (result >= 0) {
char infobuff[256];
sockaddr_info(addr, *addrlen, infobuff, sizeof(infobuff));
Info5("accept(%d, {%d, %s}, "F_socklen") -> %d", s,
addr->sa_family,
sockaddr_info(addr, *addrlen, infobuff, sizeof(infobuff)),
*addrlen, result);
} else {
Debug1("accept(,,) -> %d", result);
}
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Getsockname(int s, struct sockaddr *name, socklen_t *namelen) {
int result, _errno;
char infobuff[256];
Debug4("getsockname(%d, %p, %p{"F_socklen"})", s, name, namelen, *namelen);
result = getsockname(s, name, namelen);
_errno = errno;
/*Debug2("getsockname(,, {"F_socklen"}) -> %d",
*namelen, result);*/
Debug3("getsockname(, {%s}, {"F_socklen"}) -> %d",
sockaddr_info(name, *namelen, infobuff, sizeof(infobuff)),
*namelen, result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Getpeername(int s, struct sockaddr *name, socklen_t *namelen) {
int result, _errno;
char infobuff[256];
Debug4("getpeername(%d, %p, %p{"F_socklen"})", s, name, namelen, *namelen);
result = getpeername(s, name, namelen);
_errno = errno;
sockaddr_info(name, *namelen, infobuff, sizeof(infobuff));
Debug3("getpeername(, {%s}, {"F_socklen"}) -> %d",
infobuff, *namelen, result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) {
int result, _errno;
Debug5("getsockopt(%d, %d, %d, %p, {"F_socklen"})",
s, level, optname, optval, *optlen);
result = getsockopt(s, level, optname, optval, optlen);
_errno = errno;
Debug3("getsockopt() -> (,,, 0x%08x, %d), %d",
*(int *)optval, *optlen, result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Setsockopt(int s, int level, int optname, const void *optval, int optlen) {
int result, _errno;
if (optlen <= sizeof(int)) {
Debug5("setsockopt(%d, %d, %d, {0x%x}, %d)",
s, level, optname, *(unsigned int *)optval, optlen);
} else {
Debug6("setsockopt(%d, %d, %d, {0x%08x,%08x}, %d)",
s, level, optname,
((unsigned int *)optval)[0], ((unsigned int *)optval)[1],
optlen);
}
result = setsockopt(s, level, optname, optval, optlen);
_errno = errno;
Debug1("setsockopt() -> %d", result);
errno = _errno;
return result;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Recv(int s, void *buf, size_t len, int flags) {
int retval, _errno;
if (!diag_in_handler) diag_flush();
Debug4("recv(%d, %p, "F_Zu", %d)", s, buf, len, flags);
retval = recv(s, buf, len, flags);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("recv() -> %d", retval);
errno = _errno;
return retval;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from,
socklen_t *fromlen) {
int retval, _errno;
char infobuff[256];
if (!diag_in_handler) diag_flush();
Debug6("recvfrom(%d, %p, "F_Zu", %d, %p, "F_socklen")",
s, buf, len, flags, from, *fromlen);
retval = recvfrom(s, buf, len, flags, from, fromlen);
_errno = errno;
if (!diag_in_handler) diag_flush();
if (from) {
Debug4("recvfrom(,,,, {%d,%s}, "F_socklen") -> %d",
from->sa_family,
sockaddr_info(from, *fromlen, infobuff, sizeof(infobuff)),
*fromlen, retval);
} else {
Debug1("recvfrom(,,,, NULL, NULL) -> %d", retval);
}
errno = _errno;
return retval;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Recvmsg(int s, struct msghdr *msgh, int flags) {
int retval, _errno;
if (!diag_in_handler) diag_flush();
char infobuff[256];
#if defined(HAVE_STRUCT_MSGHDR_MSGCONTROL) && defined(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN) && defined(HAVE_STRUCT_MSGHDR_MSGFLAGS)
Debug10("recvmsg(%d, %p{%p,%u,%p,"F_Zu",%p,"F_Zu",%d}, %d)", s, msgh,
msgh->msg_name, msgh->msg_namelen, msgh->msg_iov, msgh->msg_iovlen,
msgh->msg_control, msgh->msg_controllen, msgh->msg_flags, flags);
#else
Debug7("recvmsg(%d, %p{%p,%u,%p,%u}, %d)", s, msgh,
msgh->msg_name, msgh->msg_namelen, msgh->msg_iov, msgh->msg_iovlen,
flags);
#endif
retval = recvmsg(s, msgh, flags);
_errno = errno;
if (!diag_in_handler) diag_flush();
#if defined(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN)
Debug5("recvmsg(, {%s,%u,,"F_Zu",,"F_Zu",}, ) -> %d",
msgh->msg_name?sockaddr_info(msgh->msg_name, msgh->msg_namelen, infobuff, sizeof(infobuff)):"NULL",
msgh->msg_namelen, msgh->msg_iovlen, msgh->msg_controllen,
retval);
#else
Debug4("recvmsg(, {%s,%u,,%u,,}, ) -> %d",
msgh->msg_name?sockaddr_info(msgh->msg_name, msgh->msg_namelen, infobuff, sizeof(infobuff)):"NULL",
msgh->msg_namelen, msgh->msg_iovlen,
retval);
#endif
errno = _errno;
return retval;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Send(int s, const void *mesg, size_t len, int flags) {
int retval, _errno;
if (!diag_in_handler) diag_flush();
Debug5("send(%d, %p[%08x...], "F_Zu", %d)",
s, mesg, ntohl(*(unsigned long *)mesg), len, flags);
retval = send(s, mesg, len, flags);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("send() -> %d", retval);
errno = _errno;
return retval;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Sendto(int s, const void *mesg, size_t len, int flags,
const struct sockaddr *to, socklen_t tolen) {
int retval, _errno;
char infobuff[256];
if (!diag_in_handler) diag_flush();
sockaddr_info(to, tolen, infobuff, sizeof(infobuff));
Debug7("sendto(%d, %p[%08x...], "F_Zu", %d, {%s}, %d)",
s, mesg, htonl(*(unsigned long *)mesg), len, flags, infobuff, tolen);
retval = sendto(s, mesg, len, flags, to, tolen);
_errno = errno;
if (!diag_in_handler) diag_flush();
Debug1("sendto() -> %d", retval);
errno = _errno;
return retval;
}
#endif /* _WITH_SOCKET */
#if _WITH_SOCKET
int Shutdown(int fd, int how) {
int retval, _errno;
Info2("shutdown(%d, %d)", fd, how);
retval = shutdown(fd, how);
_errno = errno;
Debug1("shutdown() -> %d", retval);
errno = _errno;
return retval;
}
#endif /* _WITH_SOCKET */
unsigned int Sleep(unsigned int seconds) {
unsigned int retval;
Debug1("sleep(%u)", seconds);
retval = sleep(seconds);
Debug1("sleep() -> %u", retval);
return retval;
}
/* obsolete by POSIX.1-2001 */
void Usleep(unsigned long usec) {
Debug1("usleep(%lu)", usec);
usleep(usec);
Debug("usleep() ->");
return;
}
#if HAVE_NANOSLEEP
unsigned int Nanosleep(const struct timespec *req, struct timespec *rem) {
int retval, _errno;
Debug3("nanosleep({"F_time",%ld},%p)", req->tv_sec, req->tv_nsec, rem);
retval = nanosleep(req, rem);
_errno = errno;
if (rem) {
Debug3("nanosleep(,{"F_time",%ld}) -> %d",
rem->tv_sec, rem->tv_nsec, retval);
} else {
Debug1("nanosleep() -> %d", retval);
}
errno = _errno;
return retval;
}
#endif /* HAVE_NANOSLEEP */
int Pause(void) {
int retval, _errno;
Debug("pause()");
retval = pause();
_errno = errno;
Debug1("pause() -> %d", retval);
errno = _errno;
return retval;
}
#if WITH_IP4 || WITH_IP6
struct hostent *Gethostbyname(const char *name) {
struct hostent *hent;
Debug1("gethostbyname(\"%s\")", name);
hent = gethostbyname(name);
if (hent == NULL) {
Debug("gethostbyname() -> NULL");
} else {
Debug4("gethostbyname() -> %d.%d.%d.%d",
((unsigned char *)hent->h_addr_list[0])[0],
((unsigned char *)hent->h_addr_list[0])[1],
((unsigned char *)hent->h_addr_list[0])[2],
((unsigned char *)hent->h_addr_list[0])[3]);
}
return hent;
}
#endif /* WITH_IP4 || WITH_IP6 */
#if (_WITH_IP4 || _WITH_IP6) && HAVE_GETADDRINFO
int Getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints, struct addrinfo **res) {
int result;
Debug15("getaddrinfo(%s%s%s, %s%s%s, {%d,%d,%d,%d,"F_socklen",%p,%p,%p}, %p)",
node?"\"":"", node?node:"NULL", node?"\"":"",
service?"\"":"", service?service:"NULL", service?"\"":"",
hints->ai_flags, hints->ai_family, hints->ai_socktype,
hints->ai_protocol, hints->ai_addrlen, hints->ai_addr,
hints->ai_canonname, hints->ai_next, res);
result = getaddrinfo(node, service, hints, res);
if (result == 0) {
char sockbuff[256];
sockaddr_info((*res)->ai_addr, hints->ai_addrlen, sockbuff, sizeof(sockbuff));
Debug2("getaddrinfo(,,,{{%s, %s}) -> 0",
sockbuff,
(*res)->ai_canonname?(*res)->ai_canonname:"");
} else {
Debug2("getaddrinfo(,,,{%p}) -> %d", *res, result);
}
return result;
}
#endif /* (_WITH_IP4 || _WITH_IP6) && HAVE_GETADDRINFO */
#if (WITH_IP4 || WITH_IP6) && HAVE_PROTOTYPE_LIB_getipnodebyname
struct hostent *Getipnodebyname(const char *name, int af, int flags,
int *error_num) {
struct hostent *result;
Debug4("getipnodebyname(\"%s\", %d, %d, %p)", name, af, flags, error_num);
result = getipnodebyname(name, af, flags, error_num);
if (result == NULL) {
Debug1("getipnodebyname(,,, {%d}) -> NULL", *error_num);
} else {
Debug4("getipnodebyname() -> {\"%s\", %p, %d, %d, ???}",
result->h_name, result->h_aliases, result->h_addrtype,
result->h_length);
}
return result;
}
#endif /* (WITH_IP4 || WITH_IP6) && HAVE_PROTOTYPE_LIB_getipnodebyname */
void *Malloc(size_t size) {
void *result;
Debug1("malloc("F_Zd")", size);
result = malloc(size);
Debug1("malloc() -> %p", result);
if (result == NULL) {
Error1("malloc("F_Zd"): out of memory", size);
return NULL;
}
return result;
}
void *Calloc(size_t nmemb, size_t size) {
void *result;
Debug2("calloc("F_Zd", "F_Zd")", nmemb, size);
result = calloc(nmemb, size);
Debug1("calloc() -> %p", result);
if (result == NULL) {
Error2("calloc("F_Zd", "F_Zd"): out of memory", nmemb, size);
return NULL;
}
return result;
}
void *Realloc(void *ptr, size_t size) {
void *result;
Debug2("realloc(%p, "F_Zd")", ptr, size);
result = realloc(ptr, size);
Debug1("realloc() -> %p", result);
if (result == NULL) {
Error2("realloc(%p, "F_Zd"): out of memory", ptr, size);
return NULL;
}
return result;
}
#if _WITH_TERMIOS
int Tcgetattr(int fd, struct termios *termios_p) {
int i, result, _errno;
char chars[5*NCCS], *cp = chars;
Debug2("tcgetattr(%d, %p)", fd, termios_p);
result = tcgetattr(fd, termios_p);
_errno = errno;
for (i = 0; i < NCCS-1; ++i) {
cp += sprintf(cp, "%02x,", termios_p->c_cc[i]);
}
sprintf(cp, "%02x", termios_p->c_cc[i]);
Debug6("tcgetattr(, {%08x,%08x,%08x,%08x,%s}) -> %d",
termios_p->c_iflag, termios_p->c_oflag,
termios_p->c_cflag, termios_p->c_lflag,
chars, result);
errno = _errno;
return result;
}
#endif /* _WITH_TERMIOS */
#if _WITH_TERMIOS
int Tcsetattr(int fd, int optional_actions, struct termios *termios_p) {
int i, result, _errno;
char chars[5*NCCS], *cp = chars;
for (i = 0; i < NCCS-1; ++i) {
cp += sprintf(cp, "%02x,", termios_p->c_cc[i]);
}
sprintf(cp, "%02x", termios_p->c_cc[i]);
Debug7("tcsetattr(%d, %d, {%08x,%08x,%08x,%08x,%s})", fd, optional_actions,
termios_p->c_iflag, termios_p->c_oflag,
termios_p->c_cflag, termios_p->c_lflag, chars);
result = tcsetattr(fd, optional_actions, termios_p);
_errno = errno;
Debug1("tcsetattr() -> %d", result);
errno = _errno;
return result;
}
#endif /* _WITH_TERMIOS */
char *Ttyname(int fd) {
char *result;
int _errno;
Debug1("ttyname(%d)", fd);
result = ttyname(fd);
_errno = errno;
if (result)
Debug1("ttyname() -> %s", result);
else
Debug("ttyname() -> NULL");
errno = _errno;
return result;
}
int Isatty(int fd) {
int result, _errno;
Debug1("isatty(%d)", fd);
result = isatty(fd);
_errno = errno;
Debug1("isatty() -> %d", result);
errno = _errno;
return result;
}
#if HAVE_OPENPTY
int Openpty(int *ptyfd, int *ttyfd, char *ptyname, struct termios *termp,
struct winsize *winp) {
int result, _errno;
Debug5("openpty(%p, %p, %p, %p, %p)", ptyfd, ttyfd, ptyname, termp, winp);
result = openpty(ptyfd, ttyfd, ptyname, termp, winp);
_errno = errno;
Info4("openpty({%d}, {%d}, {\"%s\"},,) -> %d", *ptyfd, *ttyfd, ptyname,
result);
errno = _errno;
return result;
}
#endif /* HAVE_OPENPTY */
#if HAVE_GRANTPT
int Grantpt(int fd) {
int result, _errno;
Debug1("grantpt(%d)", fd);
result = grantpt(fd);
_errno = errno;
Debug1("grantpt() -> %d", result);
errno = _errno;
return result;
}
#endif /* HAVE_GRANTPT */
#if HAVE_UNLOCKPT
int Unlockpt(int fd) {
int result, _errno;
Debug1("unlockpt(%d)", fd);
result = unlockpt(fd);
_errno = errno;
Debug1("unlockpt() -> %d", result);
errno = _errno;
return result;
}
#endif /* HAVE_UNLOCKPT */
#if HAVE_PROTOTYPE_LIB_ptsname /* AIX, not Linux */
char *Ptsname(int fd) {
char *result;
int _errno;
Debug1("ptsname(%d)", fd);
result = ptsname(fd);
_errno = errno;
if (result)
Debug1("ptsname() -> %s", result);
else
Debug("ptsname() -> NULL");
errno = _errno;
return result;
}
#endif /* HAVE_PROTOTYPE_LIB_ptsname */
int Uname(struct utsname *buf) {
int result, _errno;
Debug1("uname(%p)", buf);
result = uname(buf);
_errno = errno;
#if UNAME_DOMAINNAME
Debug6("uname({%s, %s, %s, %s, %s, %s})",
buf->sysname, buf->nodename, buf->release,
buf->version, buf->machine, buf->domainname);
#else
Debug5("uname({%s, %s, %s, %s, %s})",
buf->sysname, buf->nodename, buf->release,
buf->version, buf->machine);
#endif
errno = _errno;
return result;
}
int Gethostname(char *name, size_t len) {
int result, _errno;
Debug2("gethostname(%p, "F_Zu")", name, len);
result = gethostname(name, len);
_errno = errno;
Debug2("gethostname(\"%s\", ) -> %d", name, result);
errno = _errno;
return result;
}
/* due to Linux docu, it does not set errno */
int Atexit(void (*func)(void)) {
int result;
Debug1("atexit(%p)", func);
result = atexit(func);
Debug1("atexit() -> %d", result);
return result;
}
void Exit(int status) {
if (!diag_in_handler) diag_flush();
Debug1("exit(%d)", status);
exit(status);
}
void Abort(void) {
Debug("abort()");
abort();
}
int Mkstemp(char *template) {
int result, _errno;
Debug1("mkstemp(\"%s\")", template);
result = mkstemp(template);
_errno = errno;
Info2("mkstemp({%s}) -> %d", template, result);
errno = _errno;
return result;
}
int Setenv(const char *name, const char *value, int overwrite) {
int result, _errno;
Debug3("setenv(\"%s\", \"%s\", %d)", name, value, overwrite);
result = setenv(name, value, overwrite);
_errno = errno;
Debug1("setenv() -> %d", result);
errno = _errno;
return result;
}
#if HAVE_UNSETENV
/* on Linux it returns int but on FreeBSD void.
we do not expect many errors, so we take void which works on all systems. */
void Unsetenv(const char *name) {
int _errno;
Debug1("unsetenv(\"%s\")", name);
unsetenv(name);
_errno = errno;
Debug("unsetenv() ->");
errno = _errno;
return;
}
#endif
#if WITH_READLINE
char *Readline(const char *prompt) {
char *result;
if (prompt) {
Debug1("readline(\"%s\")", prompt);
} else {
Debug("readline(NULL)");
}
result = readline(prompt);
if (result) {
Debug("readline() -> \"...\"");
} else {
Debug("readline() -> NULL");
}
return result;
}
void Using_history(void) {
Debug("using_history()");
using_history();
Debug("using_history() ->");
}
int Read_history(const char *filename) {
int result;
if (filename) {
Debug1("read_history(\"%s\")", filename);
} else {
Debug("read_history(NULL)");
}
result = read_history(filename);
if (result) {
Debug1("read_history() -> %d", result);
} else {
Debug("read_history() -> 0");
}
return result;
}
int Write_history(const char *filename) {
int result;
if (filename) {
Debug1("write_history(\"%s\")", filename);
} else {
Debug("write_history(NULL)");
}
result = write_history(filename);
if (result) {
Debug1("write_history() -> %d", result);
} else {
Debug("write_history() -> 0");
}
return result;
}
int Append_history(int nelements, const char *filename) {
int result;
if (filename) {
Debug2("append_history(%d, \"%s\")", nelements, filename);
} else {
Debug1("append_history(%d, NULL)", nelements);
}
result = append_history(nelements, filename);
if (result) {
Debug1("append_history() -> %d", result);
} else {
Debug("append_history() -> 0");
}
return result;
}
int Where_history(void) {
int result;
Debug("where_history()");
result = where_history();
Debug1("where_history() -> %d", result);
return result;
}
void Add_history(const char *string) {
Debug1("add_history(\"%s\")", string);
add_history(string);
Debug("add_history() ->");
}
#endif /* WITH_READLINE */
#endif /* WITH_SYCLS */