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
This commit is contained in:
Chris Maynard 2011-05-31 20:24:26 +00:00
parent c681f0434e
commit 91bd619c64
1 changed files with 17 additions and 14 deletions

View File

@ -1221,26 +1221,29 @@ main(int argc, char *argv[])
phdr = wtap_phdr(wth);
if (choplen < 0 && (phdr->caplen + choplen) > 0) {
snap_phdr = *phdr;
snap_phdr.caplen += choplen;
phdr = &snap_phdr;
}
if (choplen > 0 && phdr->caplen > (unsigned int) choplen) {
snap_phdr = *phdr;
snap_phdr.caplen -= choplen;
snap_phdr.len -= choplen;
buf += choplen;
phdr = &snap_phdr;
}
if (snaplen != 0 && phdr->caplen > snaplen) {
snap_phdr = *phdr;
snap_phdr.caplen = snaplen;
phdr = &snap_phdr;
}
if (choplen < 0) {
snap_phdr = *phdr;
if (((signed int) phdr->caplen + choplen) > 0)
snap_phdr.caplen += choplen;
else
snap_phdr.caplen = 0;
phdr = &snap_phdr;
} else if (choplen > 0) {
snap_phdr = *phdr;
if (phdr->caplen > (unsigned int) choplen) {
snap_phdr.caplen -= choplen;
buf += choplen;
} else
snap_phdr.caplen = 0;
phdr = &snap_phdr;
}
/*
* Do we adjust timestamps to insure strict chronologically order?
*/