"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "testing/sgh_dd.cpp" between
sg3_utils-1.47r908.tgz and sg3_utils-1.47r915.tar.xz

About: sg3_utils contains utilities that send SCSI commands to devices. Beta version.

sgh_dd.cpp  (sg3_utils-1.47r908.tgz):sgh_dd.cpp  (sg3_utils-1.47r915.tar.xz)
skipping to change at line 39 skipping to change at line 39
* sgp_dd and sg_dd only perform special tasks when one or both of the given * sgp_dd and sg_dd only perform special tasks when one or both of the given
* devices belong to the Linux sg driver. * devices belong to the Linux sg driver.
* *
* sgh_dd further extends sgp_dd to use the experimental kernel buffer * sgh_dd further extends sgp_dd to use the experimental kernel buffer
* sharing feature added in 3.9.02 . * sharing feature added in 3.9.02 .
* N.B. This utility was previously called sgs_dd but there was already an * N.B. This utility was previously called sgs_dd but there was already an
* archived version of a dd variant called sgs_dd so this utility name was * archived version of a dd variant called sgs_dd so this utility name was
* renamed [20181221] * renamed [20181221]
*/ */
static const char * version_str = "2.14 20210801"; static const char * version_str = "2.16 20210906";
#define _XOPEN_SOURCE 600 #define _XOPEN_SOURCE 600
#ifndef _GNU_SOURCE #ifndef _GNU_SOURCE
#define _GNU_SOURCE 1 #define _GNU_SOURCE 1
#endif #endif
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
skipping to change at line 319 skipping to change at line 319
int resid; int resid;
int rd_p_id; int rd_p_id;
int rep_count; int rep_count;
int rq_id; int rq_id;
int mmap_len; int mmap_len;
int mrq_id; int mrq_id;
int mrq_index; int mrq_index;
uint32_t in_mrq_q_blks; uint32_t in_mrq_q_blks;
uint32_t out_mrq_q_blks; uint32_t out_mrq_q_blks;
long seed; long seed;
struct drand48_data drand; /* opaque, used by srand48_r and mrand48_r */ #ifdef HAVE_SRAND48_R /* gcc extension. N.B. non-reentrant version slower */
struct drand48_data drand;/* opaque, used by srand48_r and mrand48_r */
#endif
pthread_t mrq_abort_thread_id; pthread_t mrq_abort_thread_id;
Mrq_abort_info mai; Mrq_abort_info mai;
} Rq_elem; } Rq_elem;
typedef struct thread_info typedef struct thread_info
{ {
int id; int id;
struct global_collection * gcp; struct global_collection * gcp;
pthread_t a_pthr; pthread_t a_pthr;
} Thread_info; } Thread_info;
skipping to change at line 1534 skipping to change at line 1536
if (ssz < (ssize_t)sizeof(rep->seed)) { if (ssz < (ssize_t)sizeof(rep->seed)) {
pr2serr_lk("thread=%d: getrandom() failed, ret=%d\n", pr2serr_lk("thread=%d: getrandom() failed, ret=%d\n",
rep->id, (int)ssz); rep->id, (int)ssz);
rep->seed = (long)time(NULL); rep->seed = (long)time(NULL);
} }
#else #else
rep->seed = (long)time(NULL); /* use seconds since epoch as proxy */ rep->seed = (long)time(NULL); /* use seconds since epoch as proxy */
#endif #endif
if (vb > 1) if (vb > 1)
pr2serr_lk("thread=%d: seed=%ld\n", rep->id, rep->seed); pr2serr_lk("thread=%d: seed=%ld\n", rep->id, rep->seed);
#ifdef HAVE_SRAND48_R
srand48_r(rep->seed, &rep->drand); srand48_r(rep->seed, &rep->drand);
#else
srand48(rep->seed);
#endif
} }
if (clp->in_flags.same_fds || clp->out_flags.same_fds) if (clp->in_flags.same_fds || clp->out_flags.same_fds)
; ;
else { else {
int fd; int fd;
if (in_is_sg && clp->infp) { if (in_is_sg && clp->infp) {
fd = sg_in_open(clp, clp->infp, (in_mmap ? &rep->buffp : NULL), fd = sg_in_open(clp, clp->infp, (in_mmap ? &rep->buffp : NULL),
(in_mmap ? &rep->mmap_len : NULL)); (in_mmap ? &rep->mmap_len : NULL));
if (fd < 0) if (fd < 0)
skipping to change at line 1855 skipping to change at line 1861
uint8_t * bp; uint8_t * bp;
if (clp->in_flags.zero) if (clp->in_flags.zero)
memset(rep->buffp, 0, blocks * clp->bs); memset(rep->buffp, 0, blocks * clp->bs);
else if (clp->in_flags.ff) else if (clp->in_flags.ff)
memset(rep->buffp, 0xff, blocks * clp->bs); memset(rep->buffp, 0xff, blocks * clp->bs);
else { else {
for (k = 0, bp = rep->buffp; k < blocks; ++k, bp += clp->bs) { for (k = 0, bp = rep->buffp; k < blocks; ++k, bp += clp->bs) {
for (j = 0; j < clp->bs; j += jbump) { for (j = 0; j < clp->bs; j += jbump) {
/* mrand48 takes uniformly from [-2^31, 2^31) */ /* mrand48 takes uniformly from [-2^31, 2^31) */
#ifdef HAVE_SRAND48_R
mrand48_r(&rep->drand, &rn); mrand48_r(&rep->drand, &rn);
#else
rn = mrand48();
#endif
*((uint32_t *)(bp + j)) = (uint32_t)rn; *((uint32_t *)(bp + j)) = (uint32_t)rn;
} }
} }
} }
clp->in_rem_count -= blocks; clp->in_rem_count -= blocks;
return stop_after_write; return stop_after_write;
} }
if (! same_fds) { /* each has own file pointer, so we need to move it */ if (! same_fds) { /* each has own file pointer, so we need to move it */
int64_t pos = rep->iblk * clp->bs; int64_t pos = rep->iblk * clp->bs;
 End of changes. 6 change blocks. 
2 lines changed or deleted 12 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)