From 91bd619c64a0e4773d34bfb62b3e806e571582e5 Mon Sep 17 00:00:00 2001 From: Chris Maynard Date: Tue, 31 May 2011 20:24:26 +0000 Subject: [PATCH] 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 --- editcap.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/editcap.c b/editcap.c index fa053529aa..ae9306736e 100644 --- a/editcap.c +++ b/editcap.c @@ -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? */