mirror of
https://github.com/samba-team/samba.git
synced 2025-01-24 02:04:21 +03:00
more smbw cleanups.
- cleaned up prototyping. Unfortunately we can't auto-prototype wrapped.c because it replaces system functions. - split stat functions into smbw_stat.c (This used to be commit 04e92e692e49234df6fbbfd07a33b315ed62f0de)
This commit is contained in:
parent
977d601556
commit
57a58f592b
@ -63,7 +63,7 @@ SMBRUN = $(BINDIR)/smbrun
|
||||
|
||||
|
||||
PASSWD_FLAGS = -DSMB_PASSWD=\"$(SMB_PASSWD)\" -DSMB_PASSWD_FILE=\"$(SMB_PASSWD_FILE)\"
|
||||
FLAGS1 = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -DSMBLOGFILE=\"$(SMBLOGFILE)\" -DNMBLOGFILE=\"$(NMBLOGFILE)\"
|
||||
FLAGS1 = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -DSMBLOGFILE=\"$(SMBLOGFILE)\" -DNMBLOGFILE=\"$(NMBLOGFILE)\"
|
||||
FLAGS2 = -DCONFIGFILE=\"$(CONFIGFILE)\" -DLMHOSTSFILE=\"$(LMHOSTSFILE)\"
|
||||
FLAGS3 = -DSWATDIR=\"$(SWATDIR)\" -DSBINDIR=\"$(SBINDIR)\" -DLOCKDIR=\"$(LOCKDIR)\" -DSMBRUN=\"$(SMBRUN)\" -DCODEPAGEDIR=\"$(CODEPAGEDIR)\"
|
||||
FLAGS4 = -DDRIVERFILE=\"$(DRIVERFILE)\"
|
||||
@ -194,6 +194,7 @@ RPCCLIENT_OBJ = rpcclient/rpcclient.o \
|
||||
# rpcclient/cmd_srvsvc.o
|
||||
|
||||
SMBWRAPPER_OBJ = smbwrapper/smbw.o smbwrapper/wrapped.o \
|
||||
smbwrapper/smbw_dir.o smbwrapper/smbw_stat.o \
|
||||
$(LIBSMB_OBJ) $(PARAM_OBJ) \
|
||||
$(UBIQX_OBJ) $(LIB_OBJ)
|
||||
|
||||
@ -215,7 +216,8 @@ NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(UBIQX_OBJ) \
|
||||
SMBTORTURE_OBJ = utils/torture.o $(LIBSMB_OBJ) $(PARAM_OBJ) \
|
||||
$(UBIQX_OBJ) $(LIB_OBJ)
|
||||
|
||||
PROTO_OBJ = $(SMBD_OBJ) $(NMBD_OBJ) $(SWAT_OBJ) $(CLIENT_OBJ) $(RPCCLIENT_OBJ)
|
||||
PROTO_OBJ = $(SMBD_OBJ) $(NMBD_OBJ) $(SWAT_OBJ) $(CLIENT_OBJ) \
|
||||
$(RPCCLIENT_OBJ) $(SMBWRAPPER_OBJ)
|
||||
|
||||
PICOBJS = $(SMBWRAPPER_OBJ:%.o=%.p)
|
||||
|
||||
@ -396,9 +398,9 @@ uninstallcp:
|
||||
clean:
|
||||
-rm -f core */*~ *~ */*.o */*.p
|
||||
|
||||
proto:
|
||||
proto:
|
||||
@echo rebuilding include/proto.h
|
||||
@cd $(srcdir) && $(AWK) -f script/mkproto.awk `echo $(PROTO_OBJ) | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort -u | grep -v "ubiqx/"` > include/proto.h
|
||||
@cd $(srcdir) && $(AWK) -f script/mkproto.awk `echo $(PROTO_OBJ) | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort -u | egrep -v 'ubiqx/|wrapped'` > include/proto.h
|
||||
|
||||
etags:
|
||||
etags `find . -name "*.[ch]"`
|
||||
|
@ -467,6 +467,7 @@ extern int errno;
|
||||
|
||||
#include "version.h"
|
||||
#include "smb.h"
|
||||
#include "smbw.h"
|
||||
#include "nameserv.h"
|
||||
|
||||
#include "byteorder.h"
|
||||
|
@ -389,7 +389,7 @@ BOOL cli_getattrE(struct cli_state *cli, int fd,
|
||||
BOOL cli_getatr(struct cli_state *cli, char *fname,
|
||||
uint32 *attr, size_t *size, time_t *t);
|
||||
BOOL cli_setatr(struct cli_state *cli, char *fname, int attr, time_t t);
|
||||
BOOL cli_qpathinfo(struct cli_state *cli, char *fname,
|
||||
BOOL cli_qpathinfo(struct cli_state *cli, const char *fname,
|
||||
time_t *c_time, time_t *a_time, time_t *m_time,
|
||||
size_t *size, uint32 *mode);
|
||||
BOOL cli_qpathinfo2(struct cli_state *cli, char *fname,
|
||||
@ -2269,6 +2269,60 @@ BOOL unbecome_user(void );
|
||||
void become_root(BOOL save_dir) ;
|
||||
void unbecome_root(BOOL restore_dir);
|
||||
|
||||
/*The following definitions come from smbwrapper/smbw.c */
|
||||
|
||||
void smbw_init(void);
|
||||
int smbw_fd(int fd);
|
||||
ino_t smbw_inode(const char *name);
|
||||
void clean_fname(char *name);
|
||||
char *smbw_parse_path(const char *fname, char *server, char *share, char *path);
|
||||
int smbw_path(const char *path);
|
||||
int smbw_errno(struct cli_state *c);
|
||||
struct smbw_server *smbw_server(char *server, char *share);
|
||||
struct smbw_file *smbw_file(int fd);
|
||||
int smbw_open(const char *fname, int flags, mode_t mode);
|
||||
ssize_t smbw_read(int fd, void *buf, size_t count);
|
||||
ssize_t smbw_write(int fd, void *buf, size_t count);
|
||||
int smbw_close(int fd);
|
||||
int smbw_fcntl(int fd, int cmd, long arg);
|
||||
int smbw_access(const char *name, int mode);
|
||||
int smbw_readlink(const char *path, char *buf, size_t bufsize);
|
||||
int smbw_unlink(const char *fname);
|
||||
int smbw_rename(const char *oldname, const char *newname);
|
||||
int smbw_utime(const char *fname, void *buf);
|
||||
int smbw_chown(const char *fname, uid_t owner, gid_t group);
|
||||
int smbw_chmod(const char *fname, mode_t newmode);
|
||||
off_t smbw_lseek(int fd, off_t offset, int whence);
|
||||
|
||||
/*The following definitions come from smbwrapper/smbw_dir.c */
|
||||
|
||||
struct smbw_dir *smbw_dir(int fd);
|
||||
int smbw_dirp(DIR *dirp);
|
||||
int smbw_dir_open(const char *fname);
|
||||
int smbw_dir_fstat(int fd, struct stat *st);
|
||||
int smbw_dir_close(int fd);
|
||||
int smbw_getdents(unsigned int fd, struct dirent *dirp, int count);
|
||||
int smbw_chdir(const char *name);
|
||||
off_t smbw_dir_lseek(int fd, off_t offset, int whence);
|
||||
int smbw_mkdir(const char *fname, mode_t mode);
|
||||
int smbw_rmdir(const char *fname);
|
||||
char *smbw_getcwd(char *buf, size_t size);
|
||||
int smbw_fchdir(unsigned int fd);
|
||||
DIR *smbw_opendir(const char *fname);
|
||||
struct dirent *smbw_readdir(DIR *dirp);
|
||||
int smbw_closedir(DIR *dirp);
|
||||
void smbw_seekdir(DIR *dirp, off_t offset);
|
||||
off_t smbw_telldir(DIR *dirp);
|
||||
|
||||
/*The following definitions come from smbwrapper/smbw_stat.c */
|
||||
|
||||
void smbw_setup_stat(struct stat *st, char *fname, size_t size, int mode);
|
||||
BOOL smbw_getatr(struct smbw_server *srv, char *path,
|
||||
uint32 *mode, size_t *size,
|
||||
time_t *c_time, time_t *a_time, time_t *m_time);
|
||||
int smbw_fstat(int fd, struct stat *st);
|
||||
int smbw_stat(const char *fname, struct stat *st);
|
||||
|
||||
/*The following definitions come from web/cgi.c */
|
||||
|
||||
void cgi_load_variables(FILE *f1);
|
||||
|
@ -20,7 +20,6 @@
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "smbw.h"
|
||||
#include "wrapper.h"
|
||||
|
||||
pstring smb_cwd;
|
||||
@ -461,54 +460,6 @@ struct smbw_file *smbw_file(int fd)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
setup basic info in a stat structure
|
||||
*******************************************************/
|
||||
void smbw_setup_stat(struct stat *st, char *fname, size_t size, int mode)
|
||||
{
|
||||
ZERO_STRUCTP(st);
|
||||
|
||||
if (IS_DOS_DIR(mode)) {
|
||||
st->st_mode = SMBW_DIR_MODE;
|
||||
} else {
|
||||
st->st_mode = SMBW_FILE_MODE;
|
||||
}
|
||||
|
||||
st->st_size = size;
|
||||
st->st_blksize = 512;
|
||||
st->st_blocks = (size+511)/512;
|
||||
st->st_uid = getuid();
|
||||
st->st_gid = getgid();
|
||||
st->st_ino = smbw_inode(fname);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
try to do a QPATHINFO and if that fails then do a getatr
|
||||
this is needed because win95 sometimes refuses the qpathinfo
|
||||
*******************************************************/
|
||||
BOOL smbw_getatr(struct smbw_server *srv, char *path,
|
||||
uint32 *mode, size_t *size,
|
||||
time_t *c_time, time_t *a_time, time_t *m_time)
|
||||
{
|
||||
DEBUG(5,("sending qpathinfo\n"));
|
||||
|
||||
if (cli_qpathinfo(&srv->cli, path, c_time, a_time, m_time,
|
||||
size, mode)) return True;
|
||||
|
||||
DEBUG(5,("qpathinfo OK\n"));
|
||||
|
||||
/* if this is NT then don't bother with the getatr */
|
||||
if (srv->cli.capabilities & CAP_NT_SMBS) return False;
|
||||
|
||||
if (cli_getatr(&srv->cli, path, mode, size, m_time)) {
|
||||
a_time = c_time = m_time;
|
||||
return True;
|
||||
}
|
||||
return False;
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for open()
|
||||
*******************************************************/
|
||||
@ -604,107 +555,6 @@ int smbw_open(const char *fname, int flags, mode_t mode)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for fstat()
|
||||
*******************************************************/
|
||||
int smbw_fstat(int fd, struct stat *st)
|
||||
{
|
||||
struct smbw_file *file;
|
||||
time_t c_time, a_time, m_time;
|
||||
uint32 size;
|
||||
int mode;
|
||||
|
||||
DEBUG(4,("%s\n", __FUNCTION__));
|
||||
|
||||
smbw_busy++;
|
||||
|
||||
file = smbw_file(fd);
|
||||
if (!file) {
|
||||
int ret = smbw_dir_fstat(fd, st);
|
||||
smbw_busy--;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!cli_qfileinfo(&file->srv->cli, file->cli_fd,
|
||||
&mode, &size, &c_time, &a_time, &m_time) &&
|
||||
!cli_getattrE(&file->srv->cli, file->cli_fd,
|
||||
&mode, &size, &c_time, &a_time, &m_time)) {
|
||||
errno = EINVAL;
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
}
|
||||
|
||||
smbw_setup_stat(st, file->fname, size, mode);
|
||||
|
||||
st->st_atime = a_time;
|
||||
st->st_ctime = c_time;
|
||||
st->st_mtime = m_time;
|
||||
st->st_dev = file->srv->dev;
|
||||
|
||||
DEBUG(4,("%s - OK\n", __FUNCTION__));
|
||||
|
||||
smbw_busy--;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for stat()
|
||||
*******************************************************/
|
||||
int smbw_stat(const char *fname, struct stat *st)
|
||||
{
|
||||
struct smbw_server *srv;
|
||||
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__, 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 (strcmp(share,"IPC$") == 0) {
|
||||
mode = aDIR | aRONLY;
|
||||
} else {
|
||||
if (!smbw_getatr(srv, path,
|
||||
&mode, &size, &c_time, &a_time, &m_time)) {
|
||||
errno = smbw_errno(&srv->cli);
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
smbw_setup_stat(st, path, size, mode);
|
||||
|
||||
st->st_atime = time(NULL);
|
||||
st->st_ctime = m_time;
|
||||
st->st_mtime = m_time;
|
||||
st->st_dev = srv->dev;
|
||||
|
||||
smbw_busy--;
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for read()
|
||||
@ -954,8 +804,9 @@ int smbw_rename(const char *oldname, const char *newname)
|
||||
/*****************************************************
|
||||
a wrapper for utime()
|
||||
*******************************************************/
|
||||
int smbw_utime(const char *fname, struct utimbuf *buf)
|
||||
int smbw_utime(const char *fname, void *buf)
|
||||
{
|
||||
struct utimbuf *tbuf = (struct utimbuf *)buf;
|
||||
struct smbw_server *srv;
|
||||
fstring server, share;
|
||||
pstring path;
|
||||
@ -987,7 +838,7 @@ int smbw_utime(const char *fname, struct utimbuf *buf)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (!cli_setatr(&srv->cli, path, mode, buf->modtime)) {
|
||||
if (!cli_setatr(&srv->cli, path, mode, tbuf->modtime)) {
|
||||
errno = smbw_errno(&srv->cli);
|
||||
goto failed;
|
||||
}
|
||||
|
@ -55,3 +55,4 @@ struct smbw_dir {
|
||||
struct file_info *list;
|
||||
char *path;
|
||||
};
|
||||
|
||||
|
@ -20,7 +20,6 @@
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "smbw.h"
|
||||
#include "wrapper.h"
|
||||
|
||||
extern pstring smb_cwd;
|
||||
@ -576,8 +575,9 @@ DIR *smbw_opendir(const char *fname)
|
||||
/*****************************************************
|
||||
read one entry from a directory
|
||||
*******************************************************/
|
||||
struct dirent *smbw_readdir(struct smbw_dir *d)
|
||||
struct dirent *smbw_readdir(DIR *dirp)
|
||||
{
|
||||
struct smbw_dir *d = (struct smbw_dir *)dirp;
|
||||
static struct dirent de;
|
||||
|
||||
if (smbw_getdents(d->fd, &de, sizeof(struct dirent)) > 0)
|
||||
@ -589,23 +589,26 @@ struct dirent *smbw_readdir(struct smbw_dir *d)
|
||||
/*****************************************************
|
||||
close a DIR*
|
||||
*******************************************************/
|
||||
int smbw_closedir(struct smbw_dir *d)
|
||||
int smbw_closedir(DIR *dirp)
|
||||
{
|
||||
struct smbw_dir *d = (struct smbw_dir *)dirp;
|
||||
return smbw_close(d->fd);
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
seek in a directory
|
||||
*******************************************************/
|
||||
void smbw_seekdir(struct smbw_dir *d, off_t offset)
|
||||
void smbw_seekdir(DIR *dirp, off_t offset)
|
||||
{
|
||||
struct smbw_dir *d = (struct smbw_dir *)dirp;
|
||||
smbw_dir_lseek(d->fd,offset, SEEK_SET);
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
current loc in a directory
|
||||
*******************************************************/
|
||||
off_t smbw_telldir(struct smbw_dir *d)
|
||||
off_t smbw_telldir(DIR *dirp)
|
||||
{
|
||||
struct smbw_dir *d = (struct smbw_dir *)dirp;
|
||||
return smbw_dir_lseek(d->fd,0,SEEK_CUR);
|
||||
}
|
||||
|
179
source3/smbwrapper/smbw_stat.c
Normal file
179
source3/smbwrapper/smbw_stat.c
Normal file
@ -0,0 +1,179 @@
|
||||
/*
|
||||
Unix SMB/Netbios implementation.
|
||||
Version 2.0
|
||||
SMB wrapper stat 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 "includes.h"
|
||||
#include "wrapper.h"
|
||||
|
||||
extern int DEBUGLEVEL;
|
||||
|
||||
extern int smbw_busy;
|
||||
|
||||
|
||||
/*****************************************************
|
||||
setup basic info in a stat structure
|
||||
*******************************************************/
|
||||
void smbw_setup_stat(struct stat *st, char *fname, size_t size, int mode)
|
||||
{
|
||||
ZERO_STRUCTP(st);
|
||||
|
||||
if (IS_DOS_DIR(mode)) {
|
||||
st->st_mode = SMBW_DIR_MODE;
|
||||
} else {
|
||||
st->st_mode = SMBW_FILE_MODE;
|
||||
}
|
||||
|
||||
st->st_size = size;
|
||||
st->st_blksize = 512;
|
||||
st->st_blocks = (size+511)/512;
|
||||
st->st_uid = getuid();
|
||||
st->st_gid = getgid();
|
||||
st->st_ino = smbw_inode(fname);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
try to do a QPATHINFO and if that fails then do a getatr
|
||||
this is needed because win95 sometimes refuses the qpathinfo
|
||||
*******************************************************/
|
||||
BOOL smbw_getatr(struct smbw_server *srv, char *path,
|
||||
uint32 *mode, size_t *size,
|
||||
time_t *c_time, time_t *a_time, time_t *m_time)
|
||||
{
|
||||
DEBUG(5,("sending qpathinfo\n"));
|
||||
|
||||
if (cli_qpathinfo(&srv->cli, path, c_time, a_time, m_time,
|
||||
size, mode)) return True;
|
||||
|
||||
DEBUG(5,("qpathinfo OK\n"));
|
||||
|
||||
/* if this is NT then don't bother with the getatr */
|
||||
if (srv->cli.capabilities & CAP_NT_SMBS) return False;
|
||||
|
||||
if (cli_getatr(&srv->cli, path, mode, size, m_time)) {
|
||||
a_time = c_time = m_time;
|
||||
return True;
|
||||
}
|
||||
return False;
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for fstat()
|
||||
*******************************************************/
|
||||
int smbw_fstat(int fd, struct stat *st)
|
||||
{
|
||||
struct smbw_file *file;
|
||||
time_t c_time, a_time, m_time;
|
||||
uint32 size;
|
||||
int mode;
|
||||
|
||||
DEBUG(4,("%s\n", __FUNCTION__));
|
||||
|
||||
smbw_busy++;
|
||||
|
||||
file = smbw_file(fd);
|
||||
if (!file) {
|
||||
int ret = smbw_dir_fstat(fd, st);
|
||||
smbw_busy--;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!cli_qfileinfo(&file->srv->cli, file->cli_fd,
|
||||
&mode, &size, &c_time, &a_time, &m_time) &&
|
||||
!cli_getattrE(&file->srv->cli, file->cli_fd,
|
||||
&mode, &size, &c_time, &a_time, &m_time)) {
|
||||
errno = EINVAL;
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
}
|
||||
|
||||
smbw_setup_stat(st, file->fname, size, mode);
|
||||
|
||||
st->st_atime = a_time;
|
||||
st->st_ctime = c_time;
|
||||
st->st_mtime = m_time;
|
||||
st->st_dev = file->srv->dev;
|
||||
|
||||
DEBUG(4,("%s - OK\n", __FUNCTION__));
|
||||
|
||||
smbw_busy--;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
a wrapper for stat()
|
||||
*******************************************************/
|
||||
int smbw_stat(const char *fname, struct stat *st)
|
||||
{
|
||||
struct smbw_server *srv;
|
||||
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__, 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 (strcmp(share,"IPC$") == 0) {
|
||||
mode = aDIR | aRONLY;
|
||||
} else {
|
||||
if (!smbw_getatr(srv, path,
|
||||
&mode, &size, &c_time, &a_time, &m_time)) {
|
||||
errno = smbw_errno(&srv->cli);
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
smbw_setup_stat(st, path, size, mode);
|
||||
|
||||
st->st_atime = time(NULL);
|
||||
st->st_ctime = m_time;
|
||||
st->st_mtime = m_time;
|
||||
st->st_dev = srv->dev;
|
||||
|
||||
smbw_busy--;
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,7 @@ __asm__(".globl __fcntl; __fcntl = fcntl");
|
||||
int fcntl(int fd, int cmd, long arg)
|
||||
{
|
||||
if (smbw_fd(fd)) {
|
||||
return smbw_fcntl(fd);
|
||||
return smbw_fcntl(fd, cmd, arg);
|
||||
}
|
||||
|
||||
return real_fcntl(fd, cmd, arg);
|
||||
@ -431,7 +431,7 @@ __asm__(".globl __write; __write = write");
|
||||
}
|
||||
|
||||
|
||||
int utime(const char *name,struct timeval *tvp)
|
||||
int utime(const char *name,void *tvp)
|
||||
{
|
||||
if (smbw_path(name)) {
|
||||
return smbw_utime(name, tvp);
|
||||
|
@ -31,7 +31,37 @@
|
||||
#include "kernel_stat.h"
|
||||
#include "realcalls.h"
|
||||
|
||||
|
||||
int smbw_path(const char *path);
|
||||
int smbw_dirp(DIR *dirp);
|
||||
int smbw_fd(int fd);
|
||||
int smbw_dirp(DIR *);
|
||||
int smbw_dir_open(const char *fname);
|
||||
int smbw_dir_close(int fd);
|
||||
int smbw_stat(const char *fname, struct stat *st);
|
||||
off_t smbw_dir_lseek(int fd, off_t offset, int whence);
|
||||
int smbw_path(const char *path);
|
||||
int smbw_open(const char *fname, int flags, mode_t mode);
|
||||
int smbw_chdir(const char *name);
|
||||
int smbw_close(int fd);
|
||||
int smbw_fchdir(unsigned int fd);
|
||||
int smbw_fcntl(int fd, int cmd, long arg);
|
||||
int smbw_getdents(unsigned int fd, struct dirent *dirp, int count);
|
||||
off_t smbw_lseek(int fd, off_t offset, int whence);
|
||||
ssize_t smbw_read(int fd, void *buf, size_t count);
|
||||
ssize_t smbw_write(int fd, void *buf, size_t count);
|
||||
int smbw_access(const char *name, int mode);
|
||||
int smbw_chmod(const char *fname, mode_t newmode);
|
||||
int smbw_chown(const char *fname, uid_t owner, gid_t group);
|
||||
int smbw_closedir(DIR *d);
|
||||
int smbw_fstat(int fd, struct stat *st);
|
||||
char *smbw_getcwd(char *buf, size_t size);
|
||||
int smbw_stat(const char *fname, struct stat *st);
|
||||
int smbw_mkdir(const char *fname, mode_t mode);
|
||||
void smbw_seekdir(DIR *d, off_t offset);
|
||||
off_t smbw_telldir(DIR *d);
|
||||
int smbw_unlink(const char *fname);
|
||||
int smbw_utime(const char *fname,void *buf);
|
||||
DIR *smbw_opendir(const char *fname);
|
||||
struct dirent *smbw_readdir(DIR *d);
|
||||
int smbw_readlink(const char *path, char *buf, size_t bufsize);
|
||||
int smbw_rename(const char *oldname, const char *newname);
|
||||
int smbw_rmdir(const char *fname);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user