Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/librumphijack hijack:



details:   https://anonhg.NetBSD.org/src/rev/1525a431b50e
branches:  trunk
changeset: 762467:1525a431b50e
user:      pooka <pooka%NetBSD.org@localhost>
date:      Mon Feb 21 12:51:06 2011 +0000

description:
hijack:
  1) {,f,l}chflags (used e.g. by cp(1))
  2) p{read,write}{,v} (used by many)

diffstat:

 lib/librumphijack/hijack.c |  55 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 51 insertions(+), 4 deletions(-)

diffs (146 lines):

diff -r 812269246b26 -r 1525a431b50e lib/librumphijack/hijack.c
--- a/lib/librumphijack/hijack.c        Mon Feb 21 12:49:49 2011 +0000
+++ b/lib/librumphijack/hijack.c        Mon Feb 21 12:51:06 2011 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: hijack.c,v 1.59 2011/02/20 23:47:04 pooka Exp $       */
+/*      $NetBSD: hijack.c,v 1.60 2011/02/21 12:51:06 pooka Exp $       */
 
 /*-
  * Copyright (c) 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: hijack.c,v 1.59 2011/02/20 23:47:04 pooka Exp $");
+__RCSID("$NetBSD: hijack.c,v 1.60 2011/02/21 12:51:06 pooka Exp $");
 
 #define __ssp_weak_name(fun) _hijack_ ## fun
 
@@ -59,7 +59,7 @@
 #include <unistd.h>
 
 enum dualcall {
-       DUALCALL_WRITE, DUALCALL_WRITEV,
+       DUALCALL_WRITE, DUALCALL_WRITEV, DUALCALL_PWRITE, DUALCALL_PWRITEV,
        DUALCALL_IOCTL, DUALCALL_FCNTL,
        DUALCALL_SOCKET, DUALCALL_ACCEPT, DUALCALL_BIND, DUALCALL_CONNECT,
        DUALCALL_GETPEERNAME, DUALCALL_GETSOCKNAME, DUALCALL_LISTEN,
@@ -67,7 +67,7 @@
        DUALCALL_SENDTO, DUALCALL_SENDMSG,
        DUALCALL_GETSOCKOPT, DUALCALL_SETSOCKOPT,
        DUALCALL_SHUTDOWN,
-       DUALCALL_READ, DUALCALL_READV,
+       DUALCALL_READ, DUALCALL_READV, DUALCALL_PREAD, DUALCALL_PREADV,
        DUALCALL_DUP2,
        DUALCALL_CLOSE,
        DUALCALL_POLLTS,
@@ -88,6 +88,7 @@
        DUALCALL_FSYNC, DUALCALL_FSYNC_RANGE,
        DUALCALL_MOUNT, DUALCALL_UNMOUNT,
        DUALCALL___GETCWD,
+       DUALCALL_CHFLAGS, DUALCALL_LCHFLAGS, DUALCALL_FCHFLAGS,
        DUALCALL__NUM
 };
 
@@ -120,6 +121,8 @@
 #define REALFUTIMES __futimes50
 #endif
 #define REALREAD _sys_read
+#define REALPREAD _sys_pread
+#define REALPWRITE _sys_pwrite
 #define REALGETDENTS __getdents30
 #define REALMOUNT __mount50
 #define REALLSEEK _lseek
@@ -130,6 +133,8 @@
 int REALKEVENT(int, const struct kevent *, size_t, struct kevent *, size_t,
               const struct timespec *);
 ssize_t REALREAD(int, void *, size_t);
+ssize_t REALPREAD(int, void *, size_t, off_t);
+ssize_t REALPWRITE(int, const void *, size_t, off_t);
 int REALSTAT(const char *, struct stat *);
 int REALLSTAT(const char *, struct stat *);
 int REALFSTAT(int, struct stat *);
@@ -163,8 +168,12 @@
        { DUALCALL_SHUTDOWN,    "shutdown",     RSYS_NAME(SHUTDOWN)     },
        { DUALCALL_READ,        S(REALREAD),    RSYS_NAME(READ)         },
        { DUALCALL_READV,       "readv",        RSYS_NAME(READV)        },
+       { DUALCALL_PREAD,       S(REALPREAD),   RSYS_NAME(PREAD)        },
+       { DUALCALL_PREADV,      "preadv",       RSYS_NAME(PREADV)       },
        { DUALCALL_WRITE,       "write",        RSYS_NAME(WRITE)        },
        { DUALCALL_WRITEV,      "writev",       RSYS_NAME(WRITEV)       },
+       { DUALCALL_PWRITE,      S(REALPWRITE),  RSYS_NAME(PWRITE)       },
+       { DUALCALL_PWRITEV,     "pwritev",      RSYS_NAME(PWRITEV)      },
        { DUALCALL_IOCTL,       "ioctl",        RSYS_NAME(IOCTL)        },
        { DUALCALL_FCNTL,       "fcntl",        RSYS_NAME(FCNTL)        },
        { DUALCALL_DUP2,        "dup2",         RSYS_NAME(DUP2)         },
@@ -203,6 +212,9 @@
        { DUALCALL_MOUNT,       S(REALMOUNT),   RSYS_NAME(MOUNT)        },
        { DUALCALL_UNMOUNT,     "unmount",      RSYS_NAME(UNMOUNT)      },
        { DUALCALL___GETCWD,    "__getcwd",     RSYS_NAME(__GETCWD)     },
+       { DUALCALL_CHFLAGS,     "chflags",      RSYS_NAME(CHFLAGS)      },
+       { DUALCALL_LCHFLAGS,    "lchflags",     RSYS_NAME(LCHFLAGS)     },
+       { DUALCALL_FCHFLAGS,    "fchflags",     RSYS_NAME(FCHFLAGS)     },
 };
 #undef S
 
@@ -1614,11 +1626,31 @@
        (int, const struct iovec *, int),                               \
        (fd, iov, iovcnt))
 
+FDCALL(ssize_t, REALPREAD, DUALCALL_PREAD,                             \
+       (int fd, void *buf, size_t nbytes, off_t offset),               \
+       (int, void *, size_t, off_t),                                   \
+       (fd, buf, nbytes, offset))
+
+FDCALL(ssize_t, preadv, DUALCALL_PREADV,                               \
+       (int fd, const struct iovec *iov, int iovcnt, off_t offset),    \
+       (int, const struct iovec *, int, off_t),                        \
+       (fd, iov, iovcnt, offset))
+
 FDCALL(ssize_t, writev, DUALCALL_WRITEV,                               \
        (int fd, const struct iovec *iov, int iovcnt),                  \
        (int, const struct iovec *, int),                               \
        (fd, iov, iovcnt))
 
+FDCALL(ssize_t, REALPWRITE, DUALCALL_PWRITE,                           \
+       (int fd, const void *buf, size_t nbytes, off_t offset),         \
+       (int, const void *, size_t, off_t),                             \
+       (fd, buf, nbytes, offset))
+
+FDCALL(ssize_t, pwritev, DUALCALL_PWRITEV,                             \
+       (int fd, const struct iovec *iov, int iovcnt, off_t offset),    \
+       (int, const struct iovec *, int, off_t),                        \
+       (fd, iov, iovcnt, offset))
+
 FDCALL(int, REALFSTAT, DUALCALL_FSTAT,                                 \
        (int fd, struct stat *sb),                                      \
        (int, struct stat *),                                           \
@@ -1669,6 +1701,11 @@
        (int, const struct timeval *),                                  \
        (fd, tv))
 
+FDCALL(int, fchflags, DUALCALL_FCHFLAGS,                               \
+       (int fd, u_long flags),                                         \
+       (int, u_long),                                                  \
+       (fd, flags))
+
 /*
  * path-based selectors
  */
@@ -1743,6 +1780,16 @@
        (const char *, const struct timeval *),                         \
        (path, tv))
 
+PATHCALL(int, chflags, DUALCALL_CHFLAGS,                               \
+       (const char *path, u_long flags),                               \
+       (const char *, u_long),                                         \
+       (path, flags))
+
+PATHCALL(int, lchflags, DUALCALL_LCHFLAGS,                             \
+       (const char *path, u_long flags),                               \
+       (const char *, u_long),                                         \
+       (path, flags))
+
 PATHCALL(int, truncate, DUALCALL_TRUNCATE,                             \
        (const char *path, off_t length),                               \
        (const char *, off_t),                                          \



Home | Main Index | Thread Index | Old Index