SOURCES: buffer-debian-1.19-7.patch (NEW), buffer-1.17_suse.patch ...

areq areq at pld-linux.org
Sat Jun 18 22:53:37 CEST 2005


Author: areq                         Date: Sat Jun 18 20:53:37 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- debian patch

---- Files affected:
SOURCES:
   buffer-debian-1.19-7.patch (NONE -> 1.1)  (NEW), buffer-1.17_suse.patch (1.1 -> 1.2) 

---- Diffs:

================================================================
Index: SOURCES/buffer-debian-1.19-7.patch
diff -u /dev/null SOURCES/buffer-debian-1.19-7.patch:1.1
--- /dev/null	Sat Jun 18 22:53:37 2005
+++ SOURCES/buffer-debian-1.19-7.patch	Sat Jun 18 22:53:32 2005
@@ -0,0 +1,370 @@
+--- buffer-1.19.orig/buffer.man
++++ buffer-1.19/buffer.man
+@@ -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 has
++been written so far. Also prints the total througput.
+ 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
+--- buffer-1.19.orig/buffer.c
++++ buffer-1.19/buffer.c
+@@ -78,7 +78,7 @@
+  * Christoph Wicki <wicki at iis.ethz.ch>
+  *
+  * Revision 1.7  1992/07/23  20:42:03  lmjm
+- * Added 't' option to print total writen at end.
++ * Added 't' option to print total written at end.
+  *
+  * Revision 1.6  1992/04/07  19:57:30  lmjm
+  * Added Kevins -B and -p options.
+@@ -93,7 +93,7 @@
+  * Make sofar printing size an option.
+  * 
+  * Revision 1.3  90/05/15  23:27:46  lmjm
+- * Added -S option (show how much has been writen).
++ * Added -S option (show how much has been written).
+  * Added -m option to specify how much shared memory to grab.
+  * Now tries to fill this with blocks.
+  * reader waits for writer to terminate and then frees the shared mem and sems.
+@@ -109,6 +109,9 @@
+  * Initial revision
+  * 
+  */
++#include <stdlib.h>
++#include <string.h>
++#include <limits.h>
+ #include <unistd.h>
+ #include <stdio.h>
+ #include <signal.h>
+@@ -120,15 +123,16 @@
+ #include <sys/shm.h>
+ #include <sys/sem.h>
+ #include <sys/wait.h>
++#include <sys/time.h>
+ #include "sem.h"
+ 
+ #ifndef lint
+ static char *rcsid = "$Header$";
+ #endif
+ 
+-#ifndef __alpha
++#ifndef __linux__
+ extern char *shmat();
+-#endif /* __alpha */
++#endif /* __linux__ */
+ 
+ /* General macros */
+ #define TRUE 1
+@@ -136,6 +140,14 @@
+ #define K *1024
+ #define M *1024*1024
+ 
++#if defined __GNUC__ || __STDC_VERSION__ >= 199901L
++#define NUM_K_TYPE unsigned long long
++#define NUM_K_FMT "llu"
++#else
++#define NUM_K_TYPE unsigned long
++#define NUM_K_FMT "lu"
++#endif
++
+ /* Some forward declarations */
+ void byee();
+ void start_reader_and_writer();
+@@ -159,7 +171,7 @@
+ void pr_out();
+ void end_writer();
+ 
+-/* When showing print a note every this many bytes writen */
++/* When showing print a note every this many bytes written */
+ int showevery = 0;
+ #define PRINT_EVERY 10 K
+ 
+@@ -250,7 +262,9 @@
+ 
+ char print_total = 0;
+ /* Number of K output */
+-unsigned long outk = 0;
++NUM_K_TYPE outk = 0;
++
++struct timeval starttime;
+ 
+ int
+ main( argc, argv )
+@@ -262,6 +276,8 @@
+ 	set_handlers();
+ 
+ 	buffer_allocate();
++	
++	gettimeofday(&starttime, NULL);
+ 
+ 	start_reader_and_writer();
+ 
+@@ -287,7 +303,7 @@
+ 
+ 	while( (c = getopt( argc, argv, "BS:Zdm:s:b:p:u:ti:o:z:" )) != -1 ){
+ 		switch( c ){
+-		case 't': /* Print to stderr the total no of bytes writen */
++		case 't': /* Print to stderr the total no of bytes written */
+ 			print_total++;
+ 			break;
+ 		case 'u': /* pause after write for given microseconds */
+@@ -384,8 +400,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" );
+@@ -397,6 +413,11 @@
+ 			byee( -1 );
+ 		}
+ 	}
++	
++	if (argc > optind) {
++		fprintf( stderr, "too many arguments\n" );
++		byee( -1 );
++	}
+ 
+ 	if (zflag) showevery = blocksize;
+ 
+@@ -507,9 +528,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 );
+@@ -528,7 +549,17 @@
+ 	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 */
++	/* 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.
++	 * <mbuck at debian.org> 2004-01-11
++	 */	
++#if 0
+ 	sem_set( pbuffer->semid, pbuffer->blocks_free_lock, blocks - 1 );
++#else
++	sem_set( pbuffer->semid, pbuffer->blocks_free_lock, blocks );
++#endif
+ 
+ 	/* Detattach the shared memory so the fork doesnt do anything odd */
+ 	shmdt( (char *)pbuffer );
+@@ -648,7 +679,7 @@
+ int
+ fill_block()
+ {
+-	int bytes;
++	int bytes = 0;
+ 	char *start;
+ 	int toread;
+ 	static char eof_reached = 0;
+@@ -707,7 +738,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",
+@@ -742,7 +773,7 @@
+ 	}
+ 
+ 	if( print_total ){
+-		fprintf( stderr, "Kilobytes Out %lu\n", outk );
++		fprintf( stderr, "Kilobytes Out %" NUM_K_FMT "\n", outk );
+ 	}
+ 
+ 	if( debug )
+@@ -783,14 +814,14 @@
+ void
+ write_block_to_stdout()
+ {
+-	static unsigned long out = 0;
++	unsigned long out = 0;
+ 	static unsigned long last_gb = 0;
+-	static unsigned long next_k = 0;
++	static NUM_K_TYPE next_k = 0;
+ 	int written;
+ 
+ 	if( next_k == 0 && showevery ){
+ 		if( debug > 3 )
+-			fprintf( stderr, "W: next_k = %lu showevery = %d\n", next_k, showevery );
++			fprintf( stderr, "W: next_k = %" NUM_K_FMT " showevery = %d\n", next_k, showevery );
+ 		showevery = showevery / 1024;
+ 		next_k = showevery;
+ 	}
+@@ -798,7 +829,7 @@
+ 	if( (written = write( fdout, curr_block->data, curr_block->bytes )) != curr_block->bytes ){
+ 		report_proc();
+ 		perror( "write of data failed" );
+-		fprintf( stderr, "bytes to write=%d, bytes written=%d, total written %10luK\n", curr_block->bytes, written, outk );
++		fprintf( stderr, "bytes to write=%d, bytes written=%d, total written %10" NUM_K_FMT "K\n", curr_block->bytes, written, outk );
+ 		byee( -1 );
+ 	}
+ 
+@@ -825,7 +856,7 @@
+ 	}
+ 	if( showevery ){
+ 		if( debug > 3 )
+-			fprintf( stderr, "W: outk = %lu, next_k = %lu\n",
++			fprintf( stderr, "W: outk = %" NUM_K_FMT ", next_k = %" NUM_K_FMT "\n",
+ 				outk, next_k );
+ 		if( outk >= next_k ){
+ 			pr_out();
+@@ -914,13 +945,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 +971,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 at 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, " %10" NUM_K_FMT "K, %10luK/s\r", outk, k_per_s );
++	} else {
++		if (outk) {
++			fprintf( stderr, " %10" NUM_K_FMT "K,          ?K/s\r", outk );
++		} else {
++			fprintf( stderr, "          0K,          0K/s\r");
++		}
++	}
+ }
+ 
+ #ifdef SYS5
+--- buffer-1.19.orig/sem.c
++++ buffer-1.19/sem.c
+@@ -27,6 +27,7 @@
+  * semaphores */
+ 
+ #include <stdio.h>
++#include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/ipc.h>
+@@ -34,6 +35,20 @@
+ #include <errno.h>
+ #include "sem.h"
+ 
++/* If we've got a version of glibc that doesn't define union semun, we do
++ * it ourseleves like in semctl(2). Otherwise, fall back to the original
++ * buffer behaviour of defining it (differetly!) only on some systems.
++ *
++ * mbuck at debian.org, 1999/08/29
++ */
++#if defined(__GNU_LIBRARY__) && defined(_SEM_SEMUN_UNDEFINED)
++union semun {
++	int val;			/* value for SETVAL              */
++	struct semid_ds *buf;		/* buffer for IPC_STAT & IPC_SET */
++	unsigned short int *array;	/* array for GETALL & SETALL     */
++	struct seminfo *__buf;		/* buffer for IPC_INFO           */
++};
++#else
+ #if defined(SYS5) || defined(ultrix) || defined(_AIX)
+ union semun {
+ 	int val;
+@@ -41,6 +56,7 @@
+ 	ushort *array;
+ };
+ #endif
++#endif   
+ 
+ /* IMPORTS */
+ 
+@@ -95,7 +111,7 @@
+ 	return sem;
+ }
+ 
+-static
++static void
+ do_sem( sem_id, pbuf, err )
+ 	int sem_id;
+ 	struct sembuf *pbuf;
+@@ -149,10 +165,13 @@
+ remove_sems( sem_id )
+ 	int sem_id;
+ {
++	union semun arg;
++
+ 	if( sem_id == -1 )
+ 		return;
+ 
+-	if( semctl( sem_id, 0, IPC_RMID, NULL ) == -1 ){
++	arg.val = 0;
++	if( semctl( sem_id, 0, IPC_RMID, arg ) == -1 ){
+ 		report_proc();
+ 		perror( "internal error, failed to remove semaphore" );
+ 	}

================================================================
Index: SOURCES/buffer-1.17_suse.patch
diff -u SOURCES/buffer-1.17_suse.patch:1.1 SOURCES/buffer-1.17_suse.patch:1.2
--- SOURCES/buffer-1.17_suse.patch:1.1	Mon Nov 20 00:53:07 2000
+++ SOURCES/buffer-1.17_suse.patch	Sat Jun 18 22:53:32 2005
@@ -24,23 +24,3 @@
 +install:
 +	make install
 +
---- sem.c
-+++ sem.c	1998/11/09 12:19:25
-@@ -33,7 +33,7 @@
- #include <sys/sem.h>
- #include <errno.h>
- 
--#if defined(SYS5) || defined(ultrix) || defined(_AIX)
-+#if defined(SYS5) || defined(ultrix) || defined(_AIX) || defined _SEM_SEMUN_UNDEFINED
- union semun {
- 	int val;
- 	struct semid_ds *buf;
-@@ -151,7 +151,7 @@
- 	if( sem_id == -1 )
- 		return;
- 
--	if( semctl( sem_id, 0, IPC_RMID, NULL ) == -1 ){
-+	if( semctl( sem_id, 0, IPC_RMID, (union semun)0 ) == -1 ){
- 		report_proc();
- 		perror( "internal error, failed to remove semaphore" );
- 	}
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/buffer-1.17_suse.patch?r1=1.1&r2=1.2&f=u




More information about the pld-cvs-commit mailing list