aboutsummaryrefslogtreecommitdiffstats
path: root/misc/buffer/files
diff options
context:
space:
mode:
Diffstat (limited to 'misc/buffer/files')
-rw-r--r--misc/buffer/files/patch-aa11
-rw-r--r--misc/buffer/files/patch-buffer.c170
-rw-r--r--misc/buffer/files/patch-buffer.man33
-rw-r--r--misc/buffer/files/patch-sem.c19
4 files changed, 222 insertions, 11 deletions
diff --git a/misc/buffer/files/patch-aa b/misc/buffer/files/patch-aa
deleted file mode 100644
index 5d2ab971088c..000000000000
--- a/misc/buffer/files/patch-aa
+++ /dev/null
@@ -1,11 +0,0 @@
---- buffer.c.orig Sun Jul 7 18:54:56 2002
-+++ buffer.c Sun Jul 7 18:55:06 2002
-@@ -117,8 +117,6 @@
- static char *rcsid = "$Header: /a/swan/home/swan/staff/csg/lmjm/src/buffer/RCS/buffer.c,v 1.17 1993/06/04 10:26:39 lmjm Exp lmjm $";
- #endif
-
--extern char *shmat();
--
- /* General macros */
- #define TRUE 1
- #define FALSE 0
diff --git a/misc/buffer/files/patch-buffer.c b/misc/buffer/files/patch-buffer.c
new file mode 100644
index 000000000000..fb108cda2767
--- /dev/null
+++ b/misc/buffer/files/patch-buffer.c
@@ -0,0 +1,170 @@
+--- buffer.c.orig Sat Jan 19 20:47:17 2002
++++ buffer.c Tue Dec 13 11:57:38 2005
+@@ -114,12 +114,17 @@
+ #include <signal.h>
+ #include <fcntl.h>
+ #include <errno.h>
++#include <machine/param.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/ipc.h>
++#include <sys/limits.h>
+ #include <sys/shm.h>
+ #include <sys/sem.h>
+ #include <sys/wait.h>
++#include <sys/time.h>
++#include <stdlib.h>
++#include <strings.h>
+ #include "sem.h"
+
+ #ifndef lint
+@@ -127,7 +132,6 @@
+ #endif
+
+ #ifndef __alpha
+-extern char *shmat();
+ #endif /* __alpha */
+
+ /* General macros */
+@@ -252,6 +256,8 @@
+ /* Number of K output */
+ unsigned long outk = 0;
+
++struct timeval starttime;
++
+ int
+ main( argc, argv )
+ int argc;
+@@ -263,6 +269,8 @@
+
+ buffer_allocate();
+
++ gettimeofday(&starttime, NULL);
++
+ start_reader_and_writer();
+
+ byee( 0 );
+@@ -384,8 +392,8 @@
+ fprintf( stderr, "Usage: %s [-B] [-t] [-S size] [-m memsize] [-b blocks] [-p percent] [-s blocksize] [-u pause] [-i infile] [-o outfile] [-z size]\n",
+ progname );
+ fprintf( stderr, "-B = blocked device - pad out last block\n" );
+- fprintf( stderr, "-t = show total amount writen at end\n" );
+- fprintf( stderr, "-S size = show amount writen every size bytes\n" );
++ fprintf( stderr, "-t = show total amount written at end\n" );
++ fprintf( stderr, "-S size = show amount written every size bytes\n" );
+ fprintf( stderr, "-m size = size of shared mem chunk to grab\n" );
+ fprintf( stderr, "-b num = number of blocks in queue\n" );
+ fprintf( stderr, "-p percent = don't start writing until percent blocks filled\n" );
+@@ -398,6 +406,11 @@
+ }
+ }
+
++ if (argc > optind) {
++ fprintf( stderr, "too many arguments\n" );
++ byee( -1 );
++ }
++
+ if (zflag) showevery = blocksize;
+
+ /* If -b was not given try and work out the max buffer size */
+@@ -507,9 +520,9 @@
+ get_buffer();
+
+ if( debug )
+- fprintf( stderr, "%s pbuffer is 0x%08x, buffer_size is %d [%d x %d]\n",
++ fprintf( stderr, "%s pbuffer is 0x%08lx, buffer_size is %d [%d x %d]\n",
+ proc_string,
+- (char *)pbuffer, buffer_size, blocks, blocksize );
++ (unsigned long)pbuffer, buffer_size, blocks, blocksize );
+
+ #ifdef SYS5
+ memset( (char *)pbuffer, '\0', buffer_size );
+@@ -526,9 +539,11 @@
+ lock( pbuffer->semid, pbuffer->blocks_used_lock );
+
+ pbuffer->blocks_free_lock = 1;
+- /* start this off so lock() can be called on it for each block
+- * till all the blocks are used up */
+- sem_set( pbuffer->semid, pbuffer->blocks_free_lock, blocks - 1 );
++ /* Initializing the semaphore to "blocks - 1" causes a hang when using option
++ * "-p 100" because it always keeps one block free, so we'll never reach 100% fill
++ * level. However, there doesn't seem to be a good reason to keep one block free,
++ * so we initialize the semaphore to "blocks" instead. */
++ sem_set( pbuffer->semid, pbuffer->blocks_free_lock, blocks );
+
+ /* Detattach the shared memory so the fork doesnt do anything odd */
+ shmdt( (char *)pbuffer );
+@@ -648,7 +663,7 @@
+ int
+ fill_block()
+ {
+- int bytes;
++ int bytes = 0;
+ char *start;
+ int toread;
+ static char eof_reached = 0;
+@@ -707,7 +722,7 @@
+ {
+ int filled = 0;
+ int maxfilled = (blocks * percent) / 100;
+- int first_block;
++ int first_block = 0;
+
+ if( debug )
+ fprintf( stderr, "\tW: Entering writer\n blocks = %d\n maxfilled = %d\n",
+@@ -914,13 +929,12 @@
+ do_size( arg )
+ char *arg;
+ {
+- char format[ 20 ];
+- int ret;
++ int ret = 0;
+
+- *format = '\0';
+- sscanf( arg, "%d%s", &ret, format );
++ char unit = '\0';
++ sscanf( arg, "%d%c", &ret, &unit );
+
+- switch( *format ){
++ switch( unit ){
+ case 'm':
+ case 'M':
+ ret = ret K K;
+@@ -941,7 +955,36 @@
+ void
+ pr_out()
+ {
+- fprintf( stderr, " %10luK\r", outk );
++ struct timeval now;
++ unsigned long ms_delta, k_per_s;
++
++ gettimeofday(&now, NULL);
++ ms_delta = (now.tv_sec - starttime.tv_sec) * 1000
++ + (now.tv_usec - starttime.tv_usec) / 1000;
++ if (ms_delta) {
++ /* Use increased accuracy for small amounts of data,
++ * decreased accuracy for *huge* throughputs > 4.1GB/s
++ * to avoid division by 0. This will overflow if your
++ * machine's throughput exceeds 4TB/s - you deserve to
++ * loose if you're still using 32 bit longs on such a
++ * beast ;-)
++ * <mbuck@debian.org>
++ */
++ if (outk < ULONG_MAX / 1000) {
++ k_per_s = (outk * 1000) / ms_delta;
++ } else if (ms_delta >= 1000) {
++ k_per_s = outk / (ms_delta / 1000);
++ } else {
++ k_per_s = (outk / ms_delta) * 1000;
++ }
++ fprintf( stderr, " %10luK, %10luK/s\r", outk, k_per_s );
++ } else {
++ if (outk) {
++ fprintf( stderr, " %10luK, ?K/s\r", outk );
++ } else {
++ fprintf( stderr, " 0K, 0K/s\r");
++ }
++ }
+ }
+
+ #ifdef SYS5
diff --git a/misc/buffer/files/patch-buffer.man b/misc/buffer/files/patch-buffer.man
new file mode 100644
index 000000000000..b2001a2cbec9
--- /dev/null
+++ b/misc/buffer/files/patch-buffer.man
@@ -0,0 +1,33 @@
+--- buffer.man.orig Tue Dec 13 11:55:36 2005
++++ buffer.man Tue Dec 13 11:56:56 2005
+@@ -37,7 +37,8 @@
+ Use the given file as the output file. The default is stdout.
+ .TP
+ .B \-S size
+-After every chunk this size has been writen print out how much been writen so far.
++After every chunk of this size has been written, print out how much
++been written so far. Also prints the total throughput.
+ By default this is not set.
+ .TP
+ .B \-s size
+@@ -71,9 +72,9 @@
+ throughput on some drives.)
+ .TP
+ .B \-B
+-Force each block writen to be padded out to the blocksize. This is needed by some tape
++Force each block written to be padded out to the blocksize. This is needed by some tape
+ and cartridge drives. Defaults to unpadded. This only affects the
+-last block writen.
++last block written.
+ .TP
+ .B \-t
+ On exiting print to stderr a brief message showing the total number of
+@@ -82,7 +83,7 @@
+ .B \-Z
+ If reading/writing directly to a character device (like a tape drive)
+ then after each gigabyte perform an lseek to the start of the file.
+-Use this flag with extreme care. If can only be used on devices where
++Use this flag with extreme care. It can only be used on devices where
+ an lseek does not rewind the tape but does reset the kernels position
+ flags. It is used to allow more than 2 gigabytes to be written.
+ .PP
diff --git a/misc/buffer/files/patch-sem.c b/misc/buffer/files/patch-sem.c
new file mode 100644
index 000000000000..f6fe3c210bc4
--- /dev/null
+++ b/misc/buffer/files/patch-sem.c
@@ -0,0 +1,19 @@
+--- sem.c.orig Tue Dec 13 00:33:03 2005
++++ sem.c Tue Dec 13 00:35:22 2005
+@@ -27,6 +27,7 @@
+ * semaphores */
+
+ #include <stdio.h>
++#include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/ipc.h>
+@@ -95,7 +96,7 @@
+ return sem;
+ }
+
+-static
++static void
+ do_sem( sem_id, pbuf, err )
+ int sem_id;
+ struct sembuf *pbuf;