diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index 01c78ce67c8ab91e684e7108461bad94b0a0cc94..bc776cc017b16ff23aa537db05f39159323d8b85 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -35,12 +35,6 @@
  * Note: If this box doesn't appear square, then you need to fix your tabs.	*
  ****************************************************************************/
 
-/* Compiler-specific headers */
-#if defined __WATCOMC__ || defined __TURBOC__ || defined _MSC_VER
-	#include <io.h>
-	#include <share.h>
-#endif
-
 #if defined __WATCOMC__ || defined __TURBOC__
 	#include <mem.h>
 #else
@@ -66,71 +60,19 @@
 
 /* SMB-specific headers */
 #include "smblib.h"
+#include "smbwrap.h"
 
 /* Use smb_ver() and smb_lib_ver() to obtain these values */
 #define SMBLIB_VERSION		"2.13"      /* SMB library version */
 #define SMB_VERSION 		0x0121		/* SMB format version */
 										/* High byte major, low byte minor */
 
-#ifdef _WIN32
-#include <windows.h>		/* OF_SHARE_ */
-
-#ifndef SH_DENYNO
-#define SH_DENYNO		   OF_SHARE_DENY_NONE
-#define SH_DENYRW		   OF_SHARE_EXCLUSIVE
-#endif
-
-#endif
-
-#if defined _MSC_VER || defined __MINGW32__
-
-#define sopen(f,o,s,p)	   _sopen(f,o,s,p)
-#define close(f)		   _close(f)
-
-#include <sys/locking.h>
-
-/* Fix MinGW locking.h typo */
-#if defined LK_UNLOCK && !defined LK_UNLCK
-#define LK_UNLCK LK_UNLOCK
-#endif
-
-int lock(int file, long offset, int size) 
-{
-	int	i;
-	long	pos;
-   
-	pos=tell(file);
-	if(offset!=pos)
-		lseek(file, offset, SEEK_SET);
-	i=_locking(file,LK_NBLCK,size);
-	if(offset!=pos)
-		lseek(file, pos, SEEK_SET);
-	return(i);
-}
-
-int unlock(int file, long offset, int size)
-{
-	int	i;
-	long	pos;
-   
-	pos=tell(file);
-	if(offset!=pos)
-		lseek(file, offset, SEEK_SET);
-	i=_locking(file,LK_UNLCK,size);
-	if(offset!=pos)
-		lseek(file, pos, SEEK_SET);
-	return(i);
-}
-
-#endif
-
-
 int SMBCALL smb_ver(void)
 {
 	return(SMB_VERSION);
 }
 
-char*  SMBCALL smb_lib_ver(void)
+char* SMBCALL smb_lib_ver(void)
 {
 	return(SMBLIB_VERSION);
 }
@@ -149,7 +91,7 @@ int SMBCALL smb_open(smb_t* smb)
 		smb->retry_time=10;
 	smb->shd_fp=smb->sdt_fp=smb->sid_fp=NULL;
 	sprintf(str,"%s.SHD",smb->file);
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
+	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO))==-1
 		|| (smb->shd_fp=fdopen(file,"r+b"))==NULL) {
 		sprintf(smb->last_error,"%d opening %s",errno,str);
 		if(file!=-1)
@@ -193,7 +135,7 @@ int SMBCALL smb_open(smb_t* smb)
 	setvbuf(smb->shd_fp,smb->shd_buf,_IOFBF,SHD_BLOCK_LEN);
 
 	sprintf(str,"%s.SDT",smb->file);
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
+	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO))==-1
 		|| (smb->sdt_fp=fdopen(file,"r+b"))==NULL) {
 		sprintf(smb->last_error,"%d opening %s",errno,str);
 		if(file!=-1)
@@ -204,7 +146,7 @@ int SMBCALL smb_open(smb_t* smb)
 	setvbuf(smb->sdt_fp,NULL,_IOFBF,2*1024);
 
 	sprintf(str,"%s.SID",smb->file);
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
+	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO))==-1
 		|| (smb->sid_fp=fdopen(file,"r+b"))==NULL) {
 		sprintf(smb->last_error,"%d opening %s",errno,str);
 		if(file!=-1)
@@ -246,7 +188,7 @@ int SMBCALL smb_open_da(smb_t* smb)
 
 	sprintf(str,"%s.SDA",smb->file);
 	while(1) {
-		if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
+		if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW))!=-1)
 			break;
 		if(errno!=EACCES) {
 			sprintf(smb->last_error,"%d opening %s",errno,str);
@@ -289,7 +231,7 @@ int SMBCALL smb_open_ha(smb_t* smb)
 
 	sprintf(str,"%s.SHA",smb->file);
 	while(1) {
-		if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
+		if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW))!=-1)
 			break;
 		if(errno!=EACCES) {
 			sprintf(smb->last_error,"%d opening %s",errno,str);
@@ -946,7 +888,7 @@ int SMBCALL smb_addcrc(smb_t* smb, ulong crc)
 
 	sprintf(str,"%s.SCH",smb->file);
 	while(1) {
-		if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
+		if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW))!=-1)
 			break;
 		if(errno!=EACCES) {
 			sprintf(smb->last_error,"%d opening %s", errno, str);