summaryrefslogtreecommitdiff
path: root/editcap.c
diff options
context:
space:
mode:
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;
}