/* Bail out if "*(p)" was not captured */
#define ND_TCHECK_SIZE(p) ND_TCHECK_LEN(p, sizeof(*(p)))
+/*
+ * Number of bytes between two pointers.
+ */
+#define ND_BYTES_BETWEEN(p1, p2) ((u_int)(((const uint8_t *)(p1)) - (const uint8_t *)(p2)))
+
/*
* Number of bytes remaining in the captured data, starting at the
* byte pointed to by the argument.
*/
-#define ND_BYTES_AVAILABLE_AFTER(p) ((u_int)(ndo->ndo_snapend - (p)))
+#define ND_BYTES_AVAILABLE_AFTER(p) ND_BYTES_BETWEEN(ndo->ndo_snapend, (p))
#define ND_PRINT(...) (ndo->ndo_printf)(ndo, __VA_ARGS__)
#define ND_DEFAULTPRINT(ap, length) (*ndo->ndo_default_print)(ndo, ap, length)
ND_PRINT(", no SNPA");
}
- add_path4 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 32);
- add_path6 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 128);
+ add_path4 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 32);
+ add_path6 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 128);
while (tptr < pptr + len) {
switch (af<<8 | safi) {
tptr += 3;
- add_path4 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 32);
- add_path6 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 128);
+ add_path4 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 32);
+ add_path6 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 128);
while (tptr < pptr + len) {
switch (af<<8 | safi) {
}
p++; /* skip terminating \0 */
- return (int)(p - p0);
+ return ND_BYTES_BETWEEN(p, p0);
trunc:
return -1;
ND_PRINT("%02x", GET_U_1(p));
p++;
}
- return (int)(p - p0);
+ return ND_BYTES_BETWEEN(p, p0);
trunc:
return -1;
}
}
- return p - p0;
+ return ND_BYTES_BETWEEN(p, p0);
trunc:
return -1;
* preceding the \r\n. That includes the opcode, so don't print
* that.
*/
- len = (bp_ptr - bp);
+ len = ND_BYTES_BETWEEN(bp_ptr, bp);
RESP_PRINT_SEGMENT(ndo, bp, len);
ret_len = 1 /*<opcode>*/ + len /*<string>*/ + 2 /*<CRLF>*/;
* Found it; bp_ptr points to the \r or \n, so bp_ptr - bp is the
* Length of the line text that precedes it. Print it.
*/
- len = (bp_ptr - bp);
+ len = ND_BYTES_BETWEEN(bp_ptr, bp);
RESP_PRINT_SEGMENT(ndo, bp, len);
/*
smb_fdata(ndo, words + 1, f1, min(words + 1 + wct * 2, maxbuf),
unicodestr);
else
- smb_data_print(ndo, words + 1, min(wct * 2, PTR_DIFF(maxbuf, words + 1)));
+ smb_data_print(ndo, words + 1, min(wct * 2, ND_BYTES_BETWEEN(maxbuf, words + 1)));
ND_TCHECK_2(data);
bcc = GET_LE_U_2(data);
maxbuf), unicodestr);
else
smb_data_print(ndo, data + 2,
- min(GET_LE_U_2(data), PTR_DIFF(maxbuf, data + 2)));
+ min(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2)));
}
return;
trunc:
smb_fdata(ndo, words + 1, f1, min(words + 1 + wct * 2, maxbuf),
unicodestr);
else
- smb_data_print(ndo, words + 1, min(wct * 2, PTR_DIFF(maxbuf, words + 1)));
+ smb_data_print(ndo, words + 1, min(wct * 2, ND_BYTES_BETWEEN(maxbuf, words + 1)));
ND_TCHECK_2(data);
bcc = GET_LE_U_2(data);
maxbuf), unicodestr);
else
smb_data_print(ndo, data + 2,
- min(GET_LE_U_2(data), PTR_DIFF(maxbuf, data + 2)));
+ min(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2)));
}
return;
trunc:
maxbuf), unicodestr);
else
smb_data_print(ndo, data + 2,
- min(GET_LE_U_2(data), PTR_DIFF(maxbuf, data + 2)));
+ min(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2)));
}
return;
trunc:
} else {
if (bcc > 0) {
ND_PRINT("smb_buf[]=\n");
- smb_data_print(ndo, data + 2, min(bcc, PTR_DIFF(maxbuf, data + 2)));
+ smb_data_print(ndo, data + 2, min(bcc, ND_BYTES_BETWEEN(maxbuf, data + 2)));
}
}
}
#define TRANSACT2_FINDNOTIFYNEXT 12
#define TRANSACT2_MKDIR 13
-#define PTR_DIFF(p1, p2) ((size_t)(((const char *)(p1)) - (const char *)(p2)))
-
/* some protos */
const u_char *smb_fdata(netdissect_options *, const u_char *, const char *, const u_char *, int);
extern const char *smb_errstr(int, int);
s += GET_U_1(s) + 1;
ND_TCHECK_1(s);
}
- return(PTR_DIFF(s, s0) + 1);
+ return(ND_BYTES_BETWEEN(s, s0) + 1);
trunc:
return(-1); /* name goes past the end of the buffer */
u_int i = 0;
while ((p = strchr(fmt, '|'))) {
- size_t l = PTR_DIFF(p, fmt);
+ u_int l = ND_BYTES_BETWEEN(p, fmt);
if (l && (val & (1 << i)))
ND_PRINT("%.*s ", (int)l, fmt);
fmt = p + 1;
u_int l;
p = strchr(++fmt, '}');
- l = PTR_DIFF(p, fmt);
+ l = ND_BYTES_BETWEEN(p, fmt);
if (l > sizeof(bitfmt) - 1)
l = sizeof(bitfmt)-1;
switch (t) {
case 1:
- name_type = name_extract(ndo, startbuf, PTR_DIFF(buf, startbuf),
+ name_type = name_extract(ndo, startbuf, ND_BYTES_BETWEEN(buf, startbuf),
maxbuf, nbuf);
if (name_type < 0)
goto trunc;
}
}
if (!depth && buf < maxbuf) {
- size_t len = PTR_DIFF(maxbuf, buf);
- ND_PRINT("Data: (%lu bytes)\n", (unsigned long)len);
+ u_int len = ND_BYTES_BETWEEN(maxbuf, buf);
+ ND_PRINT("Data: (%u bytes)\n", len);
smb_data_print(ndo, buf, len);
return(buf + len);
}