|
|
| version 1.11, 2005/11/11 14:28:31 | version 1.12, 2006/12/08 03:01:47 |
|---|---|
| Line 323 msync_f( | Line 323 msync_f( |
| return 0; | return 0; |
| } | } |
| static int | |
| read_mapping( | |
| char *dest, | |
| off64_t offset, | |
| int dump, | |
| off64_t dumpoffset, | |
| size_t dumplength) | |
| { | |
| *dest = *(((char *)mapping->addr) + offset); | |
| if (offset % pagesize == 0) { | |
| if (dump == 2) | |
| dumpoffset += mapping->offset; | |
| if (dump) | |
| dump_buffer(dumpoffset, dumplength); | |
| return 1; | |
| } | |
| return 0; | |
| } | |
| static void | static void |
| mread_help(void) | mread_help(void) |
| { | { |
| Line 373 mread_f( | Line 353 mread_f( |
| int argc, | int argc, |
| char **argv) | char **argv) |
| { | { |
| off64_t offset, tmp; | off64_t offset, tmp, dumpoffset, printoffset; |
| ssize_t length; | ssize_t length; |
| size_t dumplen; | size_t dumplen, cnt = 0; |
| char *bp; | char *bp; |
| void *start; | void *start; |
| int dump = 0, rflag = 0, c; | int dump = 0, rflag = 0, c; |
| Line 422 mread_f( | Line 402 mread_f( |
| start = check_mapping_range(mapping, offset, length, 0); | start = check_mapping_range(mapping, offset, length, 0); |
| if (!start) | if (!start) |
| return 0; | return 0; |
| dumpoffset = offset - mapping->offset; | |
| if (dump == 2) | |
| printoffset = offset; | |
| else | |
| printoffset = dumpoffset; | |
| if (alloc_buffer(pagesize, 0, 0) < 0) | if (alloc_buffer(pagesize, 0, 0) < 0) |
| return 0; | return 0; |
| Line 432 mread_f( | Line 417 mread_f( |
| dumplen = pagesize; | dumplen = pagesize; |
| if (rflag) { | if (rflag) { |
| for (tmp = length, c = 0; tmp > 0; tmp--, bp++, c = 1) | for (tmp = length - 1, c = 0; tmp >= 0; tmp--, c = 1) { |
| if (read_mapping(bp, tmp, c? dump:0, offset, dumplen)) { | *bp = *(((char *)mapping->addr) + dumpoffset + tmp); |
| cnt++; | |
| if (c && cnt == dumplen) { | |
| if (dump) { | |
| dump_buffer(printoffset, dumplen); | |
| printoffset += dumplen; | |
| } | |
| bp = (char *)buffer; | bp = (char *)buffer; |
| dumplen = pagesize; | dumplen = pagesize; |
| cnt = 0; | |
| } else { | |
| bp++; | |
| } | } |
| } | |
| } else { | } else { |
| for (tmp = 0, c = 0; tmp < length; tmp++, bp++, c = 1) | for (tmp = 0, c = 0; tmp < length; tmp++, c = 1) { |
| if (read_mapping(bp, tmp, c? dump:0, offset, dumplen)) { | *bp = *(((char *)mapping->addr) + dumpoffset + tmp); |
| cnt++; | |
| if (c && cnt == dumplen) { | |
| if (dump) | |
| dump_buffer(printoffset + tmp - | |
| (dumplen - 1), dumplen); | |
| bp = (char *)buffer; | bp = (char *)buffer; |
| dumplen = pagesize; | dumplen = pagesize; |
| cnt = 0; | |
| } else { | |
| bp++; | |
| } | } |
| } | |
| /* dump the remaining (partial page) part of the read buffer */ | |
| if (dump) { | |
| if (rflag) | |
| dumplen = length % pagesize; | |
| else | |
| dumplen = tmp % pagesize; | |
| if (dumplen) { | |
| if (dump == 2) | |
| tmp += mapping->offset; | |
| dump_buffer(tmp, dumplen); | |
| } | } |
| } | } |
| return 0; | return 0; |
| Line 571 mwrite_f( | Line 563 mwrite_f( |
| return 0; | return 0; |
| if (rflag) { | if (rflag) { |
| for (tmp = offset + length; tmp > offset; tmp--) | for (tmp = offset + length -1; tmp >= offset; tmp--) |
| ((char *)mapping->addr)[tmp] = seed; | ((char *)mapping->addr)[tmp] = seed; |
| } else { | } else { |
| for (tmp = offset; tmp < offset + length; tmp++) | for (tmp = offset; tmp < offset + length; tmp++) |