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;
}