aboutsummaryrefslogtreecommitdiffstats
path: root/editcap.c
diff options
context:
space:
mode:
authorChris Maynard <Christopher.Maynard@GTECH.COM>2011-05-31 20:24:26 +0000
committerChris Maynard <Christopher.Maynard@GTECH.COM>2011-05-31 20:24:26 +0000
commit91bd619c64a0e4773d34bfb62b3e806e571582e5 (patch)
treedc1d6ab2da34097258be191d4febf6c38eb7e366 /editcap.c
parentc681f0434e511892e2d23a67e54c4cbb8656c168 (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.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/editcap.c b/editcap.c
index fa053529aa..ae9306736e 100644
--- a/editcap.c
+++ b/editcap.c
@@ -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;
}