Thanks.
BAPper
On Thu, Mar 30, 2000 at 11:21:49AM -0800, Scott Lurndal wrote:
> >
> > Would it be possible to get the source code to the dd.raw file that is
> > on the web page for the rawio patch? I just wanted it for a reference
> > on how to use the rawio facility. Plus, I can't run it since I'm
> > working with Linux on the Alpha platform.
> >
> >
> > BAPper
> >
>
> I sent the diffs off to the fileutil's maintainer quite
> some time ago.
>
> *** /tmp/dd.c.orig Wed Jul 7 16:19:02 1999
> --- dd.c Wed Jul 7 16:33:14 1999
> ***************
> *** 532,547 ****
> copy (void)
> {
> unsigned char *ibuf, *bufstart; /* Input buffer. */
> int nread; /* Bytes read in the current block. */
> int exit_status = 0;
>
> /* Leave at least one extra byte at the beginning and end of `ibuf'
> for conv=swab, but keep the buffer address even. But some peculiar
> device drivers work only with word-aligned buffers, so leave an
> extra two bytes. */
>
> ! ibuf = (unsigned char *) xmalloc (input_blocksize + 2 *
> SWAB_ALIGN_OFFSET);
> ! ibuf += SWAB_ALIGN_OFFSET;
>
> if (conversions_mask & C_TWOBUFS)
> obuf = (unsigned char *) xmalloc (output_blocksize);
> --- 532,572 ----
> copy (void)
> {
> unsigned char *ibuf, *bufstart; /* Input buffer. */
> + unsigned char *realbuf; /* real buffer address before alignment */
> int nread; /* Bytes read in the current block. */
> int exit_status = 0;
> + int bump; /* Skip this amount to page align buffer */
> + unsigned long pagesize;
>
> /* Leave at least one extra byte at the beginning and end of `ibuf'
> for conv=swab, but keep the buffer address even. But some peculiar
> device drivers work only with word-aligned buffers, so leave an
> extra two bytes. */
>
> ! /*
> ! * Some devices require alignment on a sector or page boundary
> ! * (e.g. character disk devices). Align the input buffer to a
> ! * page boundary to cover all bases. Note that due to the swab
> ! * algorithm, we must have at least one byte in the page before
> ! * the input buffer; thus we allocate 2 pages of slop in the
> ! * real buffer. 8k above the blocksize shouldn't bother anyone.
> ! */
> !
> ! #if defined(HAVE_GETPAGESIZE)
> ! pagesize = getpagesize();
> ! #else
> ! pagesize = 4096;
> ! #endif
> !
> ! realbuf = (unsigned char *) xmalloc(input_blocksize +
> ! (2 * SWAB_ALIGN_OFFSET) +
> ! (2 * pagesize) - 1);
> ! ibuf = realbuf;
> ! ibuf += SWAB_ALIGN_OFFSET; /* allow space for swab */
> ! bump = ((unsigned long) ibuf) & (pagesize - 1);
> ! if (bump) {
> ! ibuf += (pagesize - bump);
> ! }
>
> if (conversions_mask & C_TWOBUFS)
> obuf = (unsigned char *) xmalloc (output_blocksize);
> ***************
> *** 684,690 ****
> }
> }
>
> ! free (ibuf - SWAB_ALIGN_OFFSET);
> if (obuf != ibuf)
> free (obuf);
>
> --- 709,715 ----
> }
> }
>
> ! free (realbuf);
> if (obuf != ibuf)
> free (obuf);
|