summaryrefslogtreecommitdiff
path: root/misc/mbuffer/files/patch-mbuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc/mbuffer/files/patch-mbuffer.c')
-rw-r--r--misc/mbuffer/files/patch-mbuffer.c124
1 files changed, 83 insertions, 41 deletions
diff --git a/misc/mbuffer/files/patch-mbuffer.c b/misc/mbuffer/files/patch-mbuffer.c
index 04b2a034199e..c74f0794c56b 100644
--- a/misc/mbuffer/files/patch-mbuffer.c
+++ b/misc/mbuffer/files/patch-mbuffer.c
@@ -1,10 +1,14 @@
---- mbuffer.c.orig Fri Jul 28 23:05:14 2006
-+++ mbuffer.c Mon Dec 18 13:22:57 2006
-@@ -16,15 +16,18 @@
- #include <stdlib.h>
- #include <strings.h>
- #include <string.h>
--#include <stropts.h>
+--- mbuffer.c.orig 2008-12-24 12:17:41.000000000 +0800
++++ mbuffer.c 2008-12-24 12:36:47.000000000 +0800
+@@ -32,7 +32,6 @@
+ #include <fcntl.h>
+ #include <libgen.h>
+ #include <limits.h>
+-#include <malloc.h>
+ #include <math.h>
+ #include <pthread.h>
+ #include <semaphore.h>
+@@ -45,6 +44,8 @@
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/time.h>
@@ -13,52 +17,79 @@
#include <termios.h>
#include <unistd.h>
- #ifdef HAVE_SENDFILE
--#include <sys/sendfile.h>
+@@ -52,6 +53,9 @@
+ #ifdef HAVE_SENDFILE_H
+ #include <sys/sendfile.h>
+ #endif
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
/* if this sendfile implementation does not support sending from buffers,
disable sendfile support */
#ifndef SFV_FD_SELF
-@@ -1033,11 +1036,13 @@
- totalmem = calcint(argv,c,totalmem);
- optMset = 1;
- if (totalmem < 100) {
-- long pgsz, nump;
-+ long pgsz;
-+ unsigned long nump;
-+ size_t nump_size = sizeof(nump_size);
- pgsz = sysconf(_SC_PAGESIZE);
- assert(pgsz > 0);
-- nump = sysconf(_SC_PHYS_PAGES);
-- assert(pgsz > 0);
-+ sysctlbyname("hw.availptotals", &nump, &nump_size, NULL, 0);
-+ assert(nump > 0);
- debugmsg("total # of phys pages: %li (pagesize %li)\n",nump,pgsz);
- totalmem = ((unsigned long long) nump * pgsz * totalmem) / 100 ;
- }
-@@ -1046,8 +1051,8 @@
- Numblocks = (atoi(argv[c])) ? ((unsigned long long) atoll(argv[c])) : Numblocks;
- optBset = 1;
- debugmsg("Numblocks = %llu\n",Numblocks);
--#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
- } else if (!argcheck("-d",argv,&c)) {
-+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
- setOutsize = 1;
- debugmsg("setting output size according to the blocksize of the device\n");
- #else
-@@ -1112,7 +1117,7 @@
+@@ -855,7 +859,7 @@
+ err = fsync(fd);
+ while ((err != 0) && (errno == EINTR));
+ if (err != 0) {
+- if ((errno == EINVAL) || (errno == EBADRQC)) {
++ if ((errno == EINVAL)) {
+ infomsg("syncing unsupported on %s: omitted.\n",d->arg);
+ } else {
+ warningmsg("unable to sync %s: %s\n",d->arg,strerror(errno));
+@@ -1126,7 +1130,7 @@
+ err = fsync(d->fd);
+ while ((err != 0) && (errno == EINTR));
+ if (err != 0) {
+- if ((errno == EINVAL) || (errno == EBADRQC)) {
++ if ((errno == EINVAL)) {
+ infomsg("syncing unsupported on %s: omitted.\n",d->arg);
+ } else {
+ warningmsg("unable to sync %s: %s\n",d->arg,strerror(errno));
+@@ -1608,12 +1612,22 @@
+ const char *outfile = 0;
+ struct sigaction sig;
+ dest_t *dest = 0;
+-#if defined(_SC_AVPHYS_PAGES) && defined(_SC_PAGESIZE) && !defined(__CYGWIN__)
+- long pgsz, nump;
++#if (defined(_SC_AVPHYS_PAGES) && defined(_SC_PAGESIZE) && !defined(__CYGWIN__)) || defined(__FreeBSD__)
++#if defined(__FreeBSD__)
++ unsigned long nump;
++ size_t nump_size = sizeof(nump_size);
++#else
++ long nump;
++#endif
++ long pgsz;
+
+ pgsz = sysconf(_SC_PAGESIZE);
+ assert(pgsz > 0);
++#if defined(__FreeBSD__)
++ sysctlbyname("hw.availpages", &nump, &nump_size, NULL, 0);
++#else
+ nump = sysconf(_SC_AVPHYS_PAGES);
++#endif
+ assert(nump > 0);
+ Blocksize = pgsz;
+ Numblocks = nump/50;
+@@ -1664,6 +1678,8 @@
+ debugmsg("Verbose = %d\n",Verbose);
+ #if defined(_SC_AVPHYS_PAGES) && defined(_SC_PAGESIZE) && !defined(__CYGWIN__)
+ debugmsg("total # of phys pages: %li (pagesize %li)\n",nump,pgsz);
++#elif defined(__FreeBSD__)
++ debugmsg("total # of phys pages: %li (pagesize %li)\n",nump,pgsz);
+ #endif
+ debugmsg("default buffer set to %d blocks of %lld bytes\n",Numblocks,Blocksize);
+ } else if (!argcheck("-u",argv,&c,argc)) {
+@@ -1760,7 +1776,7 @@
Status = 0;
} else if (!strcmp("-c",argv[c])) {
debugmsg("enabling full synchronous I/O\n");
- OptSync = O_DSYNC;
+ OptSync = O_FSYNC;
- } else if (!argcheck("-a",argv,&c)) {
+ } else if (!argcheck("-a",argv,&c,argc)) {
Autoloader = 1;
Autoload_time = atoi(argv[c]);
-@@ -1202,7 +1207,14 @@
- fatal("multi volume support for input needs an explicit given input device (option -i)\n");
+@@ -1864,7 +1880,14 @@
+ /* SPW END */
/* check that we stay within system limits */
- mxnrsem = sysconf(_SC_SEM_VALUE_MAX);
@@ -72,4 +103,15 @@
+ }
if (-1 == mxnrsem) {
warningmsg("unable to determine maximum value of semaphores\n");
- } else if (Numblocks > (unsigned long long) mxnrsem)
+ } else if (Numblocks > (unsigned long long) mxnrsem) {
+@@ -1874,8 +1897,8 @@
+ if ((Blocksize * (long long)Numblocks) > (long long)SSIZE_MAX)
+ fatal("Cannot address so much memory (%lld*%d=%lld>%lld).\n",Blocksize,Numblocks,Blocksize*(long long)Numblocks,(long long)SSIZE_MAX);
+ /* create buffer */
+- Buffer = (char **) memalign(sysconf(_SC_PAGESIZE),Numblocks * sizeof(char *));
+- if (!Buffer)
++ err = posix_memalign(&Buffer,sysconf(_SC_PAGESIZE),Numblocks * sizeof(char *));
++ if (err || !Buffer)
+ fatal("Could not allocate enough memory (%d requested): %s\n",Numblocks * sizeof(char *),strerror(errno));
+ if (Memmap) {
+ infomsg("mapping temporary file to memory with %llu blocks with %llu byte (%llu kB total)...\n",(unsigned long long) Numblocks,(unsigned long long) Blocksize,(unsigned long long) ((Numblocks*Blocksize) >> 10));