mirror of
https://github.com/samba-team/samba.git
synced 2025-01-13 13:18:06 +03:00
added unlink() and rename() support to smbwrapper
This commit is contained in:
parent
e246a20230
commit
b85d961447
@ -197,7 +197,8 @@ SMBWRAPPER_OBJ = smbwrapper/open.o smbwrapper/stat.o \
|
||||
smbwrapper/smbw.o smbwrapper/fstat.o smbwrapper/read.o \
|
||||
smbwrapper/lstat.o smbwrapper/close.o smbwrapper/getdents.o \
|
||||
smbwrapper/fcntl.o smbwrapper/access.o smbwrapper/chdir.o \
|
||||
smbwrapper/write.o smbwrapper/readlink.o \
|
||||
smbwrapper/write.o smbwrapper/readlink.o smbwrapper/unlink.o \
|
||||
smbwrapper/rename.o \
|
||||
$(LIBSMB_OBJ) $(PARAM_OBJ) \
|
||||
$(UBIQX_OBJ) $(LIB_OBJ)
|
||||
|
||||
|
@ -335,7 +335,7 @@ char *unistr2(uint16 *buf);
|
||||
int struni2(uint16 *p, char *buf);
|
||||
char *unistr(char *buf);
|
||||
int unistrcpy(char *dst, char *src);
|
||||
char *safe_strcpy(char *dest, char *src, int maxlength);
|
||||
char *safe_strcpy(char *dest,const char *src, int maxlength);
|
||||
char *safe_strcat(char *dest, char *src, int maxlength);
|
||||
char *align2(char *q, char *base);
|
||||
void print_asc(int level, unsigned char *buf,int len);
|
||||
@ -361,7 +361,7 @@ BOOL cli_api(struct cli_state *cli,
|
||||
char **rparam, int *rprcnt,
|
||||
char **rdata, int *rdrcnt);
|
||||
BOOL cli_NetWkstaUserLogon(struct cli_state *cli,char *user, char *workstation);
|
||||
BOOL cli_RNetShareEnum(struct cli_state *cli, void (*fn)(char *, uint32, char *));
|
||||
BOOL cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, char *));
|
||||
BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
|
||||
void (*fn)(char *, uint32, char *));
|
||||
BOOL cli_session_setup(struct cli_state *cli,
|
||||
@ -373,7 +373,7 @@ BOOL cli_ulogoff(struct cli_state *cli);
|
||||
BOOL cli_send_tconX(struct cli_state *cli,
|
||||
char *share, char *dev, char *pass, int passlen);
|
||||
BOOL cli_tdis(struct cli_state *cli);
|
||||
BOOL cli_mv(struct cli_state *cli, char *fname_src, char *fname_dst);
|
||||
BOOL cli_rename(struct cli_state *cli, char *fname_src, char *fname_dst);
|
||||
BOOL cli_unlink(struct cli_state *cli, char *fname);
|
||||
BOOL cli_mkdir(struct cli_state *cli, char *dname);
|
||||
BOOL cli_rmdir(struct cli_state *cli, char *dname);
|
||||
|
@ -4596,7 +4596,7 @@ int unistrcpy(char *dst, char *src)
|
||||
safe string copy into a known length string. maxlength does not
|
||||
include the terminating zero.
|
||||
********************************************************************/
|
||||
char *safe_strcpy(char *dest, char *src, int maxlength)
|
||||
char *safe_strcpy(char *dest,const char *src, int maxlength)
|
||||
{
|
||||
int len;
|
||||
|
||||
|
@ -448,7 +448,7 @@ BOOL cli_NetWkstaUserLogon(struct cli_state *cli,char *user, char *workstation)
|
||||
/****************************************************************************
|
||||
call a NetShareEnum - try and browse available connections on a host
|
||||
****************************************************************************/
|
||||
BOOL cli_RNetShareEnum(struct cli_state *cli, void (*fn)(char *, uint32, char *))
|
||||
BOOL cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, char *))
|
||||
{
|
||||
char *rparam = NULL;
|
||||
char *rdata = NULL;
|
||||
@ -807,11 +807,10 @@ BOOL cli_tdis(struct cli_state *cli)
|
||||
return CVAL(cli->inbuf,smb_rcls) == 0;
|
||||
}
|
||||
|
||||
#if UNUSED_CODE
|
||||
/****************************************************************************
|
||||
rename a file
|
||||
****************************************************************************/
|
||||
BOOL cli_mv(struct cli_state *cli, char *fname_src, char *fname_dst)
|
||||
BOOL cli_rename(struct cli_state *cli, char *fname_src, char *fname_dst)
|
||||
{
|
||||
char *p;
|
||||
|
||||
@ -844,7 +843,6 @@ BOOL cli_mv(struct cli_state *cli, char *fname_src, char *fname_dst)
|
||||
|
||||
return True;
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
delete a file
|
||||
@ -2167,7 +2165,13 @@ int cli_error(struct cli_state *cli, uint8 *eclass, uint32 *num)
|
||||
if (!IS_BITS_SET_ALL(nt_err, 0xc0000000)) return 0;
|
||||
|
||||
switch (nt_err & 0xFFFFFF) {
|
||||
case NT_STATUS_ACCESS_VIOLATION: return EPERM;
|
||||
case NT_STATUS_ACCESS_VIOLATION: return EACCES;
|
||||
case NT_STATUS_NO_SUCH_FILE: return ENOENT;
|
||||
case NT_STATUS_NO_SUCH_DEVICE: return ENODEV;
|
||||
case NT_STATUS_INVALID_HANDLE: return EBADF;
|
||||
case NT_STATUS_NO_MEMORY: return ENOMEM;
|
||||
case NT_STATUS_ACCESS_DENIED: return EACCES;
|
||||
case NT_STATUS_OBJECT_NAME_NOT_FOUND: return ENOENT;
|
||||
}
|
||||
|
||||
/* for all other cases - a default code */
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#include "wrapper.h"
|
||||
|
||||
int access(__const char *name, int mode)
|
||||
int access(const char *name, int mode)
|
||||
{
|
||||
if (smbw_path(name)) {
|
||||
return smbw_access(name, mode);
|
||||
|
@ -25,7 +25,7 @@
|
||||
__asm__(".globl __chdir; __chdir = chdir");
|
||||
#endif
|
||||
|
||||
int chdir(__const char *name)
|
||||
int chdir(const char *name)
|
||||
{
|
||||
return smbw_chdir(name);
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#include "wrapper.h"
|
||||
|
||||
int __lxstat(int vers, __const char *name, struct stat *st)
|
||||
int __lxstat(int vers, const char *name, struct stat *st)
|
||||
{
|
||||
struct kernel_stat kbuf;
|
||||
int ret;
|
||||
|
@ -26,7 +26,7 @@
|
||||
__asm__(".globl __open; __open = open");
|
||||
#endif
|
||||
|
||||
int open(__const char *name, int flags, mode_t mode)
|
||||
int open(const char *name, int flags, mode_t mode)
|
||||
{
|
||||
if (smbw_path(name)) {
|
||||
return smbw_open(name, flags, mode);
|
||||
|
39
source/smbwrapper/rename.c
Normal file
39
source/smbwrapper/rename.c
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
Unix SMB/Netbios implementation.
|
||||
Version 2.0
|
||||
SMB wrapper functions
|
||||
Copyright (C) Andrew Tridgell 1998
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "wrapper.h"
|
||||
|
||||
int rename(const char *oldname,const char *newname)
|
||||
{
|
||||
int p1, p2;
|
||||
p1 = smbw_path(oldname);
|
||||
p2 = smbw_path(newname);
|
||||
if (p1 ^ p2) {
|
||||
/* can't cross filesystem boundaries */
|
||||
errno = EXDEV;
|
||||
return -1;
|
||||
}
|
||||
if (p1 && p2) {
|
||||
return smbw_rename(oldname, newname);
|
||||
}
|
||||
|
||||
return real_rename(oldname, newname);
|
||||
}
|
@ -219,17 +219,12 @@ void clean_fname(char *name)
|
||||
/*****************************************************
|
||||
parse a smb path into its components.
|
||||
*******************************************************/
|
||||
char *smbw_parse_path(char *fname, char **server, char **share, char **path)
|
||||
char *smbw_parse_path(const char *fname, char *server, char *share, char *path)
|
||||
{
|
||||
static fstring rshare, rserver;
|
||||
static pstring rpath, s;
|
||||
static pstring s;
|
||||
char *p, *p2;
|
||||
int len;
|
||||
|
||||
(*server) = rserver;
|
||||
(*share) = rshare;
|
||||
(*path) = rpath;
|
||||
|
||||
if (fname[0] == '/') {
|
||||
pstrcpy(s, fname);
|
||||
} else {
|
||||
@ -251,13 +246,15 @@ char *smbw_parse_path(char *fname, char **server, char **share, char **path)
|
||||
len = strlen(p);
|
||||
}
|
||||
|
||||
strncpy(rserver, p, len);
|
||||
rserver[len] = 0;
|
||||
len = MIN(len,sizeof(fstring)-1);
|
||||
|
||||
strncpy(server, p, len);
|
||||
server[len] = 0;
|
||||
|
||||
p = p2;
|
||||
if (!p) {
|
||||
fstrcpy(rshare,"IPC$");
|
||||
fstrcpy(rpath,"");
|
||||
fstrcpy(share,"IPC$");
|
||||
pstrcpy(path,"");
|
||||
goto ok;
|
||||
}
|
||||
|
||||
@ -269,24 +266,26 @@ char *smbw_parse_path(char *fname, char **server, char **share, char **path)
|
||||
} else {
|
||||
len = strlen(p);
|
||||
}
|
||||
|
||||
len = MIN(len,sizeof(fstring)-1);
|
||||
|
||||
fstrcpy(rshare, p);
|
||||
rshare[len] = 0;
|
||||
strncpy(share, p, len);
|
||||
share[len] = 0;
|
||||
|
||||
p = p2;
|
||||
if (!p) {
|
||||
pstrcpy(rpath,"\\");
|
||||
pstrcpy(path,"\\");
|
||||
goto ok;
|
||||
}
|
||||
|
||||
pstrcpy(rpath,p);
|
||||
pstrcpy(path,p);
|
||||
|
||||
string_sub(rpath, "/", "\\");
|
||||
string_sub(path, "/", "\\");
|
||||
|
||||
ok:
|
||||
DEBUG(5,("parsed path name=%s cwd=%s [%s] [%s] [%s]\n",
|
||||
fname, smb_cwd,
|
||||
*server, *share, *path));
|
||||
server, share, path));
|
||||
|
||||
return s;
|
||||
}
|
||||
@ -295,9 +294,10 @@ char *smbw_parse_path(char *fname, char **server, char **share, char **path)
|
||||
determine if a path name (possibly relative) is in the
|
||||
smb name space
|
||||
*******************************************************/
|
||||
BOOL smbw_path(char *path)
|
||||
BOOL smbw_path(const char *path)
|
||||
{
|
||||
char *server, *share, *s;
|
||||
fstring server, share;
|
||||
pstring s;
|
||||
char *cwd;
|
||||
int l;
|
||||
|
||||
@ -307,7 +307,7 @@ BOOL smbw_path(char *path)
|
||||
|
||||
DEBUG(3,("smbw_path(%s)\n", path));
|
||||
|
||||
cwd = smbw_parse_path(path, &server, &share, &s);
|
||||
cwd = smbw_parse_path(path, server, share, s);
|
||||
|
||||
l = strlen(SMBW_PREFIX)-1;
|
||||
|
||||
@ -324,7 +324,17 @@ return a unix errno from a SMB error pair
|
||||
*******************************************************/
|
||||
int smbw_errno(struct cli_state *c)
|
||||
{
|
||||
return cli_error(c, NULL, NULL);
|
||||
uint8 eclass;
|
||||
uint32 ecode;
|
||||
int ret;
|
||||
|
||||
ret = cli_error(c, &eclass, &ecode);
|
||||
|
||||
if (ret) {
|
||||
DEBUG(3,("smbw_error %d %d (0x%x)\n",
|
||||
(int)eclass, (int)ecode, (int)ecode));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
@ -540,7 +550,7 @@ void smbw_dir_add(struct file_info *finfo)
|
||||
/*****************************************************
|
||||
add a entry to a directory listing
|
||||
*******************************************************/
|
||||
void smbw_share_add(char *share, uint32 type, char *comment)
|
||||
void smbw_share_add(const char *share, uint32 type, const char *comment)
|
||||
{
|
||||
struct file_info finfo;
|
||||
|
||||
@ -556,10 +566,10 @@ void smbw_share_add(char *share, uint32 type, char *comment)
|
||||
/*****************************************************
|
||||
open a directory on the server
|
||||
*******************************************************/
|
||||
int smbw_dir_open(const char *fname1, int flags)
|
||||
int smbw_dir_open(const char *fname, int flags)
|
||||
{
|
||||
char *fname = strdup(fname1);
|
||||
char *server, *share, *path;
|
||||
fstring server, share;
|
||||
pstring path;
|
||||
struct smbw_server *srv=NULL;
|
||||
struct smbw_dir *dir=NULL;
|
||||
pstring mask;
|
||||
@ -575,7 +585,7 @@ int smbw_dir_open(const char *fname1, int flags)
|
||||
smbw_init();
|
||||
|
||||
/* work out what server they are after */
|
||||
smbw_parse_path(fname, &server, &share, &path);
|
||||
smbw_parse_path(fname, server, share, path);
|
||||
|
||||
DEBUG(4,("dir_open share=%s\n", share));
|
||||
|
||||
@ -633,7 +643,6 @@ int smbw_dir_open(const char *fname1, int flags)
|
||||
if (dir) {
|
||||
free_dir(dir);
|
||||
}
|
||||
if (fname) free(fname);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@ -642,10 +651,10 @@ int smbw_dir_open(const char *fname1, int flags)
|
||||
/*****************************************************
|
||||
a wrapper for open()
|
||||
*******************************************************/
|
||||
int smbw_open(const char *fname1, int flags, mode_t mode)
|
||||
int smbw_open(const char *fname, int flags, mode_t mode)
|
||||
{
|
||||
char *fname = strdup(fname1);
|
||||
char *server, *share, *path;
|
||||
fstring server, share;
|
||||
pstring path;
|
||||
struct smbw_server *srv=NULL;
|
||||
int eno, fd = -1;
|
||||
struct smbw_file *file=NULL;
|
||||
@ -662,7 +671,7 @@ int smbw_open(const char *fname1, int flags, mode_t mode)
|
||||
smbw_busy++;
|
||||
|
||||
/* work out what server they are after */
|
||||
smbw_parse_path(fname, &server, &share, &path);
|
||||
smbw_parse_path(fname, server, share, path);
|
||||
|
||||
/* get a connection to the server */
|
||||
srv = smbw_server(server, share);
|
||||
@ -677,9 +686,8 @@ int smbw_open(const char *fname1, int flags, mode_t mode)
|
||||
fd = cli_open(&srv->cli, path, flags, DENY_NONE);
|
||||
}
|
||||
if (fd == -1) {
|
||||
if (fname) free(fname);
|
||||
/* it might be a directory. Maybe we should use chkpath? */
|
||||
fd = smbw_dir_open(fname1, flags);
|
||||
fd = smbw_dir_open(fname, flags);
|
||||
smbw_busy--;
|
||||
return fd;
|
||||
}
|
||||
@ -716,17 +724,12 @@ int smbw_open(const char *fname1, int flags, mode_t mode)
|
||||
|
||||
DLIST_ADD(smbw_files, file);
|
||||
|
||||
DEBUG(4,("opened %s\n", fname1));
|
||||
|
||||
free(fname);
|
||||
DEBUG(4,("opened %s\n", fname));
|
||||
|
||||
smbw_busy--;
|
||||
return file->fd;
|
||||
|
||||
failed:
|
||||
if (fname) {
|
||||
free(fname);
|
||||
}
|
||||
if (fd != -1) {
|
||||
cli_close(&srv->cli, fd);
|
||||
}
|
||||
@ -809,16 +812,16 @@ int smbw_fstat(int fd, struct stat *st)
|
||||
/*****************************************************
|
||||
a wrapper for stat()
|
||||
*******************************************************/
|
||||
int smbw_stat(char *fname1, struct stat *st)
|
||||
int smbw_stat(const char *fname, struct stat *st)
|
||||
{
|
||||
struct smbw_server *srv;
|
||||
char *server, *share, *path;
|
||||
char *fname = strdup(fname1);
|
||||
fstring server, share;
|
||||
pstring path;
|
||||
time_t m_time=0, a_time=0, c_time=0;
|
||||
size_t size=0;
|
||||
uint32 mode=0;
|
||||
|
||||
DEBUG(4,("%s (%s)\n", __FUNCTION__, fname1));
|
||||
DEBUG(4,("%s (%s)\n", __FUNCTION__, fname));
|
||||
|
||||
if (!fname) {
|
||||
errno = EINVAL;
|
||||
@ -830,7 +833,7 @@ int smbw_stat(char *fname1, struct stat *st)
|
||||
smbw_busy++;
|
||||
|
||||
/* work out what server they are after */
|
||||
smbw_parse_path(fname, &server, &share, &path);
|
||||
smbw_parse_path(fname, server, share, path);
|
||||
|
||||
/* get a connection to the server */
|
||||
srv = smbw_server(server, share);
|
||||
@ -859,7 +862,6 @@ int smbw_stat(char *fname1, struct stat *st)
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
if (fname) free(fname);
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
}
|
||||
@ -1046,7 +1048,7 @@ int smbw_getdents(unsigned int fd, struct dirent *dirp, int count)
|
||||
/*****************************************************
|
||||
a wrapper for access()
|
||||
*******************************************************/
|
||||
int smbw_access(char *name, int mode)
|
||||
int smbw_access(const char *name, int mode)
|
||||
{
|
||||
struct stat st;
|
||||
/* how do we map this properly ?? */
|
||||
@ -1056,7 +1058,7 @@ int smbw_access(char *name, int mode)
|
||||
/*****************************************************
|
||||
a wrapper for realink() - needed for correct errno setting
|
||||
*******************************************************/
|
||||
int smbw_readlink(char *path, char *buf, size_t bufsize)
|
||||
int smbw_readlink(const char *path, char *buf, size_t bufsize)
|
||||
{
|
||||
struct stat st;
|
||||
int ret;
|
||||
@ -1078,10 +1080,11 @@ int smbw_readlink(char *path, char *buf, size_t bufsize)
|
||||
/*****************************************************
|
||||
a wrapper for chdir()
|
||||
*******************************************************/
|
||||
int smbw_chdir(char *name)
|
||||
int smbw_chdir(const char *name)
|
||||
{
|
||||
struct smbw_server *srv;
|
||||
char *server, *share, *path;
|
||||
fstring server, share;
|
||||
pstring path;
|
||||
uint32 mode = aDIR;
|
||||
char *cwd;
|
||||
|
||||
@ -1099,7 +1102,7 @@ int smbw_chdir(char *name)
|
||||
DEBUG(4,("%s (%s)\n", __FUNCTION__, name));
|
||||
|
||||
/* work out what server they are after */
|
||||
cwd = smbw_parse_path(name, &server, &share, &path);
|
||||
cwd = smbw_parse_path(name, server, share, path);
|
||||
|
||||
if (strncmp(cwd,SMBW_PREFIX,strlen(SMBW_PREFIX))) {
|
||||
if (real_chdir(cwd) == 0) {
|
||||
@ -1151,3 +1154,99 @@ int smbw_chdir(char *name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for unlink()
|
||||
*******************************************************/
|
||||
int smbw_unlink(const char *fname)
|
||||
{
|
||||
struct smbw_server *srv;
|
||||
fstring server, share;
|
||||
pstring path;
|
||||
|
||||
DEBUG(4,("%s (%s)\n", __FUNCTION__, fname));
|
||||
|
||||
if (!fname) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
smbw_init();
|
||||
|
||||
smbw_busy++;
|
||||
|
||||
/* work out what server they are after */
|
||||
smbw_parse_path(fname, server, share, path);
|
||||
|
||||
/* get a connection to the server */
|
||||
srv = smbw_server(server, share);
|
||||
if (!srv) {
|
||||
/* smbw_server sets errno */
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (!cli_unlink(&srv->cli, path)) {
|
||||
errno = smbw_errno(&srv->cli);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
smbw_busy--;
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for rename()
|
||||
*******************************************************/
|
||||
int smbw_rename(const char *oldname, const char *newname)
|
||||
{
|
||||
struct smbw_server *srv;
|
||||
fstring server1, share1;
|
||||
pstring path1;
|
||||
fstring server2, share2;
|
||||
pstring path2;
|
||||
|
||||
DEBUG(4,("%s (%s, %s)\n", __FUNCTION__, oldname, newname));
|
||||
|
||||
if (!oldname || !newname) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
smbw_init();
|
||||
|
||||
smbw_busy++;
|
||||
|
||||
/* work out what server they are after */
|
||||
smbw_parse_path(oldname, server1, share1, path1);
|
||||
smbw_parse_path(newname, server2, share2, path2);
|
||||
|
||||
if (strcmp(server1, server2) || strcmp(share1, share2)) {
|
||||
/* can't cross filesystems */
|
||||
errno = EXDEV;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* get a connection to the server */
|
||||
srv = smbw_server(server1, share1);
|
||||
if (!srv) {
|
||||
/* smbw_server sets errno */
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (!cli_rename(&srv->cli, path1, path2)) {
|
||||
errno = smbw_errno(&srv->cli);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
smbw_busy--;
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#include "wrapper.h"
|
||||
|
||||
int __xstat(int vers, __const char *name, struct stat *st)
|
||||
int __xstat(int vers, const char *name, struct stat *st)
|
||||
{
|
||||
struct kernel_stat kbuf;
|
||||
int ret;
|
||||
@ -83,7 +83,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
int stat(__const char *name, struct stat *st)
|
||||
int stat(const char *name, struct stat *st)
|
||||
{
|
||||
return __xstat(_STAT_VER, name, st);
|
||||
}
|
||||
|
31
source/smbwrapper/unlink.c
Normal file
31
source/smbwrapper/unlink.c
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
Unix SMB/Netbios implementation.
|
||||
Version 2.0
|
||||
SMB wrapper functions
|
||||
Copyright (C) Andrew Tridgell 1998
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "wrapper.h"
|
||||
|
||||
int unlink(const char *name)
|
||||
{
|
||||
if (smbw_path(name)) {
|
||||
return smbw_unlink(name);
|
||||
}
|
||||
|
||||
return real_unlink(name);
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <syscall.h>
|
||||
#include <stdio.h>
|
||||
#include <dirent.h>
|
||||
@ -6,4 +8,3 @@
|
||||
#include <sys/stat.h>
|
||||
#include "kernel_stat.h"
|
||||
#include "realcalls.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user