Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 37859 Details for
Bug 61118
sys-apps/buffer-1.19-r2 failed; bad patch
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
fixed patch
1.19-deb-gentoo.patch (text/plain), 8.44 KB, created by
Sebastian
on 2004-08-21 05:27:07 UTC
(
hide
)
Description:
fixed patch
Filename:
MIME Type:
Creator:
Sebastian
Created:
2004-08-21 05:27:07 UTC
Size:
8.44 KB
patch
obsolete
>diff -u buffer-1.19/buffer.c buffer-1.19-patched/buffer.c >--- buffer-1.19/buffer.c 2002-01-19 23:47:39.000000000 +0100 >+++ buffer-1.19-patched/buffer.c 2004-08-21 14:16:42.981279288 +0200 >@@ -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: /a/swan/home/swan/staff/csg/lmjm/src/buffer/RCS/buffer.c,v 1.19 1995/08/24 17:46:28 lmjm Exp lmjm $"; > #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(); >@@ -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(); > >@@ -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@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@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 >Nur in buffer-1.19-patched: buffer.c.orig. >Nur in buffer-1.19-patched: buffer.c.rej. >diff -u buffer-1.19/buffer.man buffer-1.19-patched/buffer.man >--- buffer-1.19/buffer.man 2002-01-19 23:47:39.000000000 +0100 >+++ buffer-1.19-patched/buffer.man 2004-08-21 14:13:06.896129224 +0200 >@@ -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 >diff -u buffer-1.19/sem.c buffer-1.19-patched/sem.c >--- buffer-1.19/sem.c 2002-01-19 23:47:39.000000000 +0100 >+++ buffer-1.19-patched/sem.c 2004-08-21 14:13:06.897129072 +0200 >@@ -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;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 61118
:
37848
| 37859