#define SMB_ROUNDUP_ALLOCATION(s) ((s) ? (SMB_ROUNDUP((SMB_OFF_T)((s)+1), ((SMB_OFF_T)SMB_ROUNDUP_ALLOCATION_SIZE))) : 0 )
/* Extra macros added by Ying Chen at IBM - speed increase by inlining. */
-#define smb_buf(buf) (buf + smb_size + CVAL(buf,smb_wct)*2)
+#define smb_buf(buf) ((buf) + smb_size + CVAL(buf,smb_wct)*2)
#define smb_buflen(buf) (SVAL(buf,smb_vwv0 + (int)CVAL(buf, smb_wct)*2))
+/* the remaining number of bytes in smb buffer 'buf' from pointer 'p'. */
+#define smb_bufrem(buf, p) (smb_buflen(buf)-PTR_DIFF(p, smb_buf(buf)))
+
/* Note that chain_size must be available as an extern int to this macro. */
#define smb_offset(p,buf) (PTR_DIFF(p,buf+4) + chain_size)
dest_len = sizeof(pstring);
}
- if (flags & STR_TERMINATE) src_len = strlen(src)+1;
+ if (src_len == -1 && (flags & STR_TERMINATE)) src_len = strlen(src)+1;
ret = convert_string(CH_DOS, CH_UNIX, src, src_len, dest, dest_len);
flags can have:
STR_TERMINATE means the string in src is null terminated
STR_NOALIGN means don't try to align
-if STR_TERMINATE is set then src_len is ignored
+if STR_TERMINATE is set then src_len is ignored if it is -1
src_len is the length of the source area in bytes
return the number of bytes occupied by the string in src
the resulting string in "dest" is always null terminated
if (src_len > 0) src_len--;
}
- if (flags & STR_TERMINATE) src_len = strlen_w(src)*2+2;
+ if (src_len == -1 && (flags & STR_TERMINATE)) src_len = strlen_w(src)*2+2;
/* ucs2 is always a multiple of 2 bytes */
src_len &= ~1;
dest_len = sizeof(pstring);
}
- if (flags & STR_TERMINATE) src_len = strlen(src)+1;
+ if (src_len == -1 && (flags & STR_TERMINATE)) src_len = strlen(src)+1;
ret = convert_string(CH_UTF8, CH_UNIX, src, src_len, dest, dest_len);
if (dest_len) dest[MIN(ret, dest_len-1)] = 0;
STR_UNICODE means to force as unicode
STR_ASCII use ascii even with unicode packet
STR_NOALIGN means don't do alignment
-if STR_TERMINATE is set then src_len is ignored
+if STR_TERMINATE is set then src_len is ignored is it is -1
src_len is the length of the source area in bytes
return the number of bytes occupied by the string in src
the resulting string in "dest" is always null terminated