diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c index 2698c62f8a319efaf692cbaaacf5102d8ecc3ffb..f98797b6ed814df473571483ff718fded1f7b21b 100644 --- a/src/smblib/smblib.c +++ b/src/smblib/smblib.c @@ -1497,6 +1497,28 @@ int SMBCALL smb_incdat(smb_t* smb, ulong offset, ulong length, ushort headers) return(0); } +/****************************************************************************/ +/* Increments data allocation records (message references) by number of */ +/* headers specified (usually 1) */ +/* The opposite function of smb_freemsg() */ +/****************************************************************************/ +int SMBCALL smb_incmsg(smb_t* smb, smbmsg_t* msg) +{ + int i; + ushort x; + + if(smb->status.attr&SMB_HYPERALLOC) /* Nothing to do */ + return(0); + + for(x=0;x<msg->hdr.total_dfields;x++) { + if((i=smb_incdat(smb,msg->hdr.offset+msg->dfield[x].offset + ,msg->dfield[x].length,1))!=0) + return(i); + } + + return(0); +} + /****************************************************************************/ /* De-allocates blocks for header record */ /* Returns non-zero on error */ diff --git a/src/smblib/smblib.h b/src/smblib/smblib.h index 58419677ba238a5ec1f676cf2bc33bfab1d8f825..9274c0e3fd10b91fbcada7013fe18990e838e141 100644 --- a/src/smblib/smblib.h +++ b/src/smblib/smblib.h @@ -127,6 +127,7 @@ SMBEXPORT long SMBCALL smb_hallochdr(smb_t* smb); SMBEXPORT long SMBCALL smb_allocdat(smb_t* smb, ulong length, ushort headers); SMBEXPORT long SMBCALL smb_fallocdat(smb_t* smb, ulong length, ushort headers); SMBEXPORT long SMBCALL smb_hallocdat(smb_t* smb); +SMBEXPORT int SMBCALL smb_incmsg(smb_t* smb, smbmsg_t* msg); SMBEXPORT int SMBCALL smb_incdat(smb_t* smb, ulong offset, ulong length, ushort headers); SMBEXPORT int SMBCALL smb_freemsg(smb_t* smb, smbmsg_t* msg); SMBEXPORT int SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length, ushort headers);