diff options
author | Chris Maynard <Christopher.Maynard@GTECH.COM> | 2011-05-31 20:24:26 +0000 |
---|---|---|
committer | Chris Maynard <Christopher.Maynard@GTECH.COM> | 2011-05-31 20:24:26 +0000 |
commit | 91bd619c64a0e4773d34bfb62b3e806e571582e5 (patch) | |
tree | dc1d6ab2da34097258be191d4febf6c38eb7e366 /editcap.c | |
parent | c681f0434e511892e2d23a67e54c4cbb8656c168 (diff) |
Handle snaplen before choplen for consistency. Also, if chopping more bytes
than present, just chop all by setting caplen to 0. In all cases, don't touch
len. In other words, change incl_len but leave orig_len alone.
svn path=/trunk/; revision=37488
Diffstat (limited to 'editcap.c')
-rw-r--r-- | editcap.c | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -1221,23 +1221,26 @@ main(int argc, char *argv[]) phdr = wtap_phdr(wth); - if (choplen < 0 && (phdr->caplen + choplen) > 0) { + if (snaplen != 0 && phdr->caplen > snaplen) { snap_phdr = *phdr; - snap_phdr.caplen += choplen; + snap_phdr.caplen = snaplen; phdr = &snap_phdr; } - if (choplen > 0 && phdr->caplen > (unsigned int) choplen) { + if (choplen < 0) { snap_phdr = *phdr; - snap_phdr.caplen -= choplen; - snap_phdr.len -= choplen; - buf += choplen; + if (((signed int) phdr->caplen + choplen) > 0) + snap_phdr.caplen += choplen; + else + snap_phdr.caplen = 0; phdr = &snap_phdr; - } - - if (snaplen != 0 && phdr->caplen > snaplen) { + } else if (choplen > 0) { snap_phdr = *phdr; - snap_phdr.caplen = snaplen; + if (phdr->caplen > (unsigned int) choplen) { + snap_phdr.caplen -= choplen; + buf += choplen; + } else + snap_phdr.caplen = 0; phdr = &snap_phdr; } |