RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 04-Jul-2017 05:13:28 Branch: rpm-5_4 Handle: 2017070403132800 Modified files: (Branch: rpm-5_4) rpm/rpmio msqio.c Log: - rpmmsq: permit building --without-mq & --without-msq. Summary: Revision Changes Path 1.1.2.25 +79 -9 rpm/rpmio/msqio.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/rpmio/msqio.c ============================================================================ $ cvs diff -u -r1.1.2.24 -r1.1.2.25 msqio.c --- rpm/rpmio/msqio.c 3 Jun 2017 09:02:26 -0000 1.1.2.24 +++ rpm/rpmio/msqio.c 4 Jul 2017 03:13:28 -0000 1.1.2.25 @@ -5,20 +5,34 @@ #include "system.h" -#if defined(WITH_MQ) || defined(WITH_MSQ) -#if defined(HAVE_AIO_H) -# include <aio.h> +#if defined(HAVE_SYS_IPC_H) +# include <sys/ipc.h> #endif + +#if defined(WITH_MQ) || defined(WITH_MSQ) #if defined(HAVE_SYS_MSG_H) # include <sys/msg.h> #endif -#if defined(HAVE_SYS_IPC_H) -# include <sys/ipc.h> -#endif #if defined(HAVE_MQUEUE_H) # include <mqueue.h> #endif -#endif /* WITH_MQ */ + +#else /* WITH_MQ || WITH_MSQ */ + +/* XXX stub in enough to use struct mq_attr */ + +typedef int mqd_t; + +struct mq_attr +{ + long mq_flags; /* Message queue flags. */ + long mq_maxmsg; /* Maximum number of messages. */ + long mq_msgsize; /* Maximum message size. */ + long mq_curmsgs; /* Number of messages currently queued. */ + long __pad[4]; +}; + +#endif /* WITH_MQ || WITH_MSQ */ #include "rpmio_internal.h" #include <rpmlog.h> @@ -27,6 +41,60 @@ #include <rpmzlog.h> /* XXX rpmzLog type */ #include <yarn.h> +#if defined(WITH_AIO) + +#if defined(HAVE_AIO_H) +# include <aio.h> +#endif + +#else /* WITH_AIO */ + +/* XXX stub in enough to use struct aiocb_s pool */ +enum { + LIO_READ, + LIO_WRITE, + LIO_NOP, +}; + +struct aiocb +{ + int aio_fildes; /* File desriptor. */ + int aio_lio_opcode; /* Operation to be performed. */ + int aio_reqprio; /* Request priority offset. */ + volatile void *aio_buf; /* Location of buffer. */ + size_t aio_nbytes; /* Length of transfer. */ + struct sigevent aio_sigevent; /* Signal number and value. */ + + /* Internal members. */ + struct aiocb *__next_prio; + int __abs_prio; + int __policy; + int __error_code; + __ssize_t __return_value; + +#ifndef __USE_FILE_OFFSET64 + __off_t aio_offset; /* File offset. */ + char __pad[sizeof (__off64_t) - sizeof (__off_t)]; +#else + __off64_t aio_offset; /* File offset. */ +#endif + char __glibc_reserved[32]; +}; + +static ssize_t +aio_return (struct aiocb *aiocbp) +{ + return aiocbp->__return_value; +} + +static int +aio_error (const struct aiocb *aiocbp) +{ + return aiocbp->__error_code; +} + +#endif /* WITH_AIO */ + #define _RPMAIO_INTERNAL #include "rpmaio.h" @@ -822,9 +890,10 @@ static ssize_t rpmmsqReaderLoop(rpmmsq msq, int op, char *b, size_t nb, unsigned *priop) { - struct timespec ts = { 0, 1000 }; /* XXX move into msq for persistence? */ - ssize_t rc; + ssize_t rc = -2; /* assume error */ +#if defined(WITH_MQ) + struct timespec ts = { 0, 1000 }; /* XXX move into msq for persistence? */ errno = 0; do { @@ -863,6 +932,7 @@ #undef NSEC break; } while (rc < 0); +#endif /* WITH_MQ */ return rc; } @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org