Coherent handling of different Samba versions. - susmb - mounting of SMB/CIFS shares via FUSE
 (HTM) git clone git://git.codemadness.org/susmb
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d3ac58484d569b375cf84a6dd03fcf0d48cf1725
 (DIR) parent d1bc973ac1ce50729419cbd0e8cda236cb72bf46
 (HTM) Author: Geoff Johnstone <qwerty@acm.org>
       Date:   Fri, 10 Apr 2009 19:08:11 +0100
       
       Coherent handling of different Samba versions.
       
       Diffstat:
         M Makefile.in                         |      10 +++++-----
         M configure.ac                        |      18 ++++++++++++++++++
         D samba30-compat.h                    |     266 -------------------------------
         A samba30_compat.c                    |      28 ++++++++++++++++++++++++++++
         A samba32_compat.c                    |      43 ++++++++++++++++++++++++++++++
         A samba33_compat.c                    |      43 ++++++++++++++++++++++++++++++
         A samba3x-compat.h                    |     271 +++++++++++++++++++++++++++++++
         M usmb.c                              |      24 +++---------------------
         M usmb.h                              |       1 +
         M usmb_dir.c                          |       2 +-
         M usmb_file.c                         |       2 +-
       
       11 files changed, 414 insertions(+), 294 deletions(-)
       ---
 (DIR) diff --git a/Makefile.in b/Makefile.in
       @@ -30,10 +30,10 @@ CFLAGS  += @LIBXML2_CFLAGS@ @GLIB_CFLAGS@ @FUSE_CFLAGS@
        LIBS  += @LIBXML2_LIBS@ @GLIB_LIBS@ @FUSE_LIBS@
        
        SOURCES = conffile.c options.c password.c usmb.c usmb_dir.c usmb_file.c \
       -          utils.c version.c xml.c
       +          utils.c version.c xml.c samba@SAMBA_VERSION@_compat.c
        OBJECTS = $(SOURCES:.c=.o)
        
       -PROGRAM = usmb
       +PROGRAM = @PACKAGE_NAME@
        
        
        all: $(PROGRAM)
       @@ -98,9 +98,9 @@ conffile.o: conffile.c utils.h xml.h config.rng.h
        options.o: options.c options.h utils.h version.h
        password.o: password.c password.h utils.h
        usmb.o: usmb.c conffile.h options.h usmb.h usmb_dir.h usmb_file.h utils.h \
       -        password.h version.h samba30-compat.h
       -usmb_dir.o: samba30-compat.h usmb_dir.c usmb_dir.h usmb.h utils.h
       -usmb_file.o: samba30-compat.h usmb_file.c usmb_file.h usmb.h utils.h
       +        password.h version.h samba3x-compat.h
       +usmb_dir.o: samba3x-compat.h usmb_dir.c usmb_dir.h usmb.h utils.h
       +usmb_file.o: samba3x-compat.h usmb_file.c usmb_file.h usmb.h utils.h
        utils.o: utils.c utils.h
        version.o: version.c version.h
        xml.o: xml.c xml.h utils.h
 (DIR) diff --git a/configure.ac b/configure.ac
       @@ -44,6 +44,24 @@ AC_DEFINE([MUSTCHECK], [MUSTCHECK_],
        AC_CHECK_LIB([smbclient], [smbc_init], [],
                     [AC_MSG_ERROR(Cannot find libsmbclient.)])
        
       +AC_CHECK_LIB([smbclient], [smbc_getFunctionFtruncate],
       +             [AC_DEFINE([HAVE_SAMBA33], [],
       +                                                  [Whether we have Samba 3.3 or later])
       +                                                  SAMBA_VERSION=33])
       +
       +AC_CHECK_LIB([smbclient], [smbc_getFunctionOpen],
       +             [AC_DEFINE([HAVE_SAMBA32], [],
       +                                                  [Whether we have Samba 3.2 or later])
       +                                                  if test "$SAMBA_VERSION" = "" ; then
       +                                                                SAMBA_VERSION=32
       +                                                        fi])
       +
       +if test "$SAMBA_VERSION" = '' ; then
       +        SAMBA_VERSION=30
       +fi
       +
       +AC_SUBST(SAMBA_VERSION,[$SAMBA_VERSION])
       +
        PKG_PROG_PKG_CONFIG
        PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
        PKG_CHECK_MODULES([GLIB], [glib-2.0])
 (DIR) diff --git a/samba30-compat.h b/samba30-compat.h
       @@ -1,266 +0,0 @@
       -/* usmb - mount SMB shares via FUSE and Samba
       - * Copyright (C) 2006-2009 Geoff Johnstone
       - *
       - * Portions of this file are taken from Samba 3.2's libsmbclient.h:
       - *  Copyright (C) Andrew Tridgell 1998
       - *  Copyright (C) Richard Sharpe 2000
       - *  Copyright (C) John Terpsra 2000
       - *  Copyright (C) Tom Jansen (Ninja ISD) 2002
       - *  Copyright (C) Derrell Lipman 2003-2008
       - *
       - * 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 3 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, see <http://www.gnu.org/licenses/>.
       - */
       -
       -#ifndef SAMBA_30_COMPAT_H
       -  #define SAMBA_30_COMPAT_H
       -
       -  #include <libsmbclient.h>
       -
       -  #ifndef DEPRECATED_SMBC_INTERFACE
       -
       -    typedef int (*smbc_chmod_fn) (SMBCCTX *c, const char *fname, mode_t mode);
       -
       -    static inline smbc_chmod_fn smbc_getFunctionChmod (SMBCCTX *c)
       -    {
       -      return c->chmod;
       -    }
       -
       -
       -    typedef int (*smbc_close_fn) (SMBCCTX *c, SMBCFILE *file);
       -
       -    static inline smbc_close_fn smbc_getFunctionClose (SMBCCTX *c)
       -    {
       -      return c->close_fn;
       -    }
       -
       -
       -    typedef int (*smbc_closedir_fn) (SMBCCTX *c, SMBCFILE *dir);
       -
       -    static inline smbc_closedir_fn smbc_getFunctionClosedir (SMBCCTX *c)
       -    {
       -      return c->closedir;
       -    }
       -
       -
       -    typedef SMBCFILE * (*smbc_creat_fn) (SMBCCTX *c,
       -                                         const char *path,
       -                                         mode_t mode);
       -
       -    static inline smbc_creat_fn smbc_getFunctionCreat (SMBCCTX *c)
       -    {
       -      return c->creat;
       -    }
       -
       -
       -    typedef int (*smbc_fstat_fn) (SMBCCTX *c, SMBCFILE *file, struct stat *st);
       -
       -    static inline smbc_fstat_fn smbc_getFunctionFstat (SMBCCTX *c)
       -    {
       -      return c->fstat;
       -    }
       -
       -
       -    typedef int (*smbc_getxattr_fn) (SMBCCTX *context,
       -                                     const char *fname,
       -                                     const char *name,
       -                                     const void *value,
       -                                     size_t size);
       -
       -    static inline smbc_getxattr_fn smbc_getFunctionGetxattr (SMBCCTX *c)
       -    {
       -      return c->getxattr;
       -    }
       -
       -
       -    typedef int (*smbc_listxattr_fn) (SMBCCTX *context,
       -                                      const char *fname,
       -                                      char *list,
       -                                      size_t size);
       -
       -    static inline smbc_listxattr_fn smbc_getFunctionListxattr (SMBCCTX *c)
       -    {
       -      return c->listxattr;
       -    }
       -
       -
       -    typedef off_t (*smbc_lseek_fn) (SMBCCTX *c,
       -                                    SMBCFILE *file,
       -                                    off_t offset,
       -                                    int whence);
       -
       -    static inline smbc_lseek_fn smbc_getFunctionLseek (SMBCCTX *c)
       -    {
       -      return c->lseek;
       -    }
       -
       -
       -    typedef int (*smbc_mkdir_fn) (SMBCCTX *c, const char *fname, mode_t mode);
       -
       -    static inline smbc_mkdir_fn smbc_getFunctionMkdir (SMBCCTX *c)
       -    {
       -      return c->mkdir;
       -    }
       -
       -
       -    typedef SMBCFILE * (*smbc_open_fn) (SMBCCTX *c,
       -                                        const char *fname,
       -                                        int flags,
       -                                        mode_t mode);
       -
       -    static inline smbc_open_fn smbc_getFunctionOpen (SMBCCTX *c)
       -    {
       -      return c->open;
       -    }
       -
       -
       -    typedef SMBCFILE * (*smbc_opendir_fn) (SMBCCTX *c, const char *fname);
       -
       -    static inline smbc_opendir_fn smbc_getFunctionOpendir (SMBCCTX *c)
       -    {
       -      return c->opendir;
       -    }
       -
       -
       -    typedef ssize_t (*smbc_read_fn) (SMBCCTX *c,
       -                                     SMBCFILE *file,
       -                                     void *buf,
       -                                     size_t count);
       -
       -    static inline smbc_read_fn smbc_getFunctionRead (SMBCCTX *c)
       -    {
       -      return c->read;
       -    }
       -
       -
       -    typedef struct smbc_dirent * (*smbc_readdir_fn) (SMBCCTX *c, SMBCFILE *dir);
       -
       -    static inline smbc_readdir_fn smbc_getFunctionReaddir (SMBCCTX *c)
       -    {
       -      return c->readdir;
       -    }
       -
       -
       -    typedef int (*smbc_removexattr_fn) (SMBCCTX *context,
       -                                        const char *fname,
       -                                        const char *name);
       -
       -    static inline smbc_removexattr_fn smbc_getFunctionRemovexattr (SMBCCTX *c)
       -    {
       -      return c->removexattr;
       -    }
       -
       -
       -    typedef int (*smbc_rename_fn) (SMBCCTX *ocontext,
       -                                   const char *oname,
       -                                   SMBCCTX *ncontext,
       -                                   const char *nname);
       -
       -    static inline smbc_rename_fn smbc_getFunctionRename (SMBCCTX *c)
       -    {
       -      return c->rename;
       -    }
       -
       -
       -    typedef int (*smbc_rmdir_fn) (SMBCCTX *c, const char *fname);
       -
       -    static inline smbc_rmdir_fn smbc_getFunctionRmdir (SMBCCTX *c)
       -    {
       -      return c->rmdir;
       -    }
       -
       -
       -    typedef int (*smbc_setxattr_fn) (SMBCCTX *context,
       -                                     const char *fname,
       -                                     const char *name,
       -                                     const void *value,
       -                                     size_t size,
       -                                     int flags);
       -
       -    static inline smbc_setxattr_fn smbc_getFunctionSetxattr (SMBCCTX *c)
       -    {
       -      return c->setxattr;
       -    }
       -
       -
       -    typedef int (*smbc_stat_fn) (SMBCCTX *c, const char *fname, struct stat *s);
       -
       -    static inline smbc_stat_fn smbc_getFunctionStat (SMBCCTX *c)
       -    {
       -      return c->stat;
       -    }
       -
       -
       -    typedef int (*smbc_unlink_fn) (SMBCCTX *c, const char *fname);
       -
       -    static inline smbc_unlink_fn smbc_getFunctionUnlink (SMBCCTX *c)
       -    {
       -      return c->unlink;
       -    }
       -
       -
       -    typedef int (*smbc_utimes_fn) (SMBCCTX *c,
       -                                   const char *fname,
       -                                   struct timeval *tbuf);
       -
       -    static inline smbc_utimes_fn smbc_getFunctionUtimes (SMBCCTX *c)
       -    {
       -      return c->utimes;
       -    }
       -
       -
       -    typedef ssize_t (*smbc_write_fn) (SMBCCTX *c,
       -                                      SMBCFILE *file,
       -                                      void *buf,
       -                                      size_t count);
       -
       -    static inline smbc_write_fn smbc_getFunctionWrite (SMBCCTX *c)
       -    {
       -      return c->write;
       -    }
       -
       -
       -    typedef void (*smbc_get_auth_fn) (const char *srv,
       -                                      const char *shr,
       -                                      char *wg, int wglen,
       -                                      char *un, int unlen,
       -                                      char *pw, int pwlen);
       -
       -    static inline void smbc_setFunctionAuthData (SMBCCTX *c,
       -                                                 smbc_get_auth_data_fn fn)
       -    {
       -      c->callbacks.auth_fn = fn;
       -    }
       -
       -
       -    static inline void smbc_setTimeout (SMBCCTX *c, int timeout)
       -    {
       -      c->timeout = timeout;
       -    }
       -
       -
       -    static inline void smbc_setUser (SMBCCTX *c, char *user)
       -    {
       -      c->user = user;
       -    }
       -
       -
       -    static inline void smbc_setWorkgroup (SMBCCTX *c, char *workgroup)
       -    {
       -      c->workgroup = workgroup;
       -    }
       -
       -  #endif
       -
       -#endif
       -
 (DIR) diff --git a/samba30_compat.c b/samba30_compat.c
       @@ -0,0 +1,28 @@
       +/* usmb - mount SMB shares via FUSE and Samba
       + * Copyright (C) 2006-2009 Geoff Johnstone
       + *
       + * This program is free software; you can redistribute it and/or modify
       + * it under the terms of the GNU General Public License version 3 as
       + * published by the Free Software Foundation.
       + *
       + * 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, see <http://www.gnu.org/licenses/>.
       + */
       +
       +#include "config.h"
       +#include "samba3x-compat.h"
       +#include "usmb_file.h"
       +
       +
       +int usmb_statfs (const char *path UNUSED, struct statvfs *vfs UNUSED)
       +{
       +        (void)path;
       +        (void)vfs;
       +        return -ENOSYS;
       +}
       +
 (DIR) diff --git a/samba32_compat.c b/samba32_compat.c
       @@ -0,0 +1,43 @@
       +/* usmb - mount SMB shares via FUSE and Samba
       + * Copyright (C) 2006-2009 Geoff Johnstone
       + *
       + * This program is free software; you can redistribute it and/or modify
       + * it under the terms of the GNU General Public License version 3 as
       + * published by the Free Software Foundation.
       + *
       + * 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, see <http://www.gnu.org/licenses/>.
       + */
       +
       +#include "config.h"
       +#include <errno.h>
       +#include <stdio.h>
       +#include <stdlib.h>
       +#include <string.h>
       +#include "samba3x-compat.h"
       +#include "usmb.h"
       +#include "utils.h"
       +
       +
       +int usmb_statfs (const char *path, struct statvfs *vfs)
       +{
       +  if ((NULL == path) || (NULL == vfs))
       +    return -EINVAL;
       +
       +  char *url = make_url (path);
       +  if (NULL == url)
       +    return -ENOMEM;
       +
       +  DEBUG (fprintf (stderr, "statfs (%s, %p)\n", url, (void *)vfs));
       +  memset (vfs, 0, sizeof (*vfs));
       +
       +  int ret = (0 > smbc_getFunctionStatVFS (ctx) (ctx, url, vfs)) ? -errno : 0;
       +  free (url);
       +  return ret;
       +}
       +
 (DIR) diff --git a/samba33_compat.c b/samba33_compat.c
       @@ -0,0 +1,43 @@
       +/* usmb - mount SMB shares via FUSE and Samba
       + * Copyright (C) 2006-2009 Geoff Johnstone
       + *
       + * This program is free software; you can redistribute it and/or modify
       + * it under the terms of the GNU General Public License version 3 as
       + * published by the Free Software Foundation.
       + *
       + * 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, see <http://www.gnu.org/licenses/>.
       + */
       +
       +#include "config.h"
       +#include <errno.h>
       +#include <stdio.h>
       +#include <stdlib.h>
       +#include <string.h>
       +#include "samba3x-compat.h"
       +#include "usmb.h"
       +#include "utils.h"
       +
       +
       +int usmb_statfs (const char *path, struct statvfs *vfs)
       +{
       +  if ((NULL == path) || (NULL == vfs))
       +    return -EINVAL;
       +
       +  char *url = make_url (path);
       +  if (NULL == url)
       +    return -ENOMEM;
       +
       +  DEBUG (fprintf (stderr, "statfs (%s, %p)\n", url, (void *)vfs));
       +  memset (vfs, 0, sizeof (*vfs));
       +
       +  int ret = (0 > smbc_getFunctionStatVFS (ctx) (ctx, url, vfs)) ? -errno : 0;
       +  free (url);
       +  return ret;
       +}
       +
 (DIR) diff --git a/samba3x-compat.h b/samba3x-compat.h
       @@ -0,0 +1,271 @@
       +/* usmb - mount SMB shares via FUSE and Samba
       + * Copyright (C) 2006-2009 Geoff Johnstone
       + *
       + * Portions of this file are taken from Samba 3.2's libsmbclient.h:
       + *  Copyright (C) Andrew Tridgell 1998
       + *  Copyright (C) Richard Sharpe 2000
       + *  Copyright (C) John Terpsra 2000
       + *  Copyright (C) Tom Jansen (Ninja ISD) 2002
       + *  Copyright (C) Derrell Lipman 2003-2008
       + *
       + * 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 3 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, see <http://www.gnu.org/licenses/>.
       + */
       +
       +#ifndef SAMBA_30_COMPAT_H
       +  #define SAMBA_30_COMPAT_H
       +
       +  #include "config.h"
       +  #include <libsmbclient.h>
       +
       +
       +  int usmb_statfs (const char *path UNUSED, struct statvfs *vfs UNUSED);
       +
       +
       +  #ifndef HAVE_SAMBA32
       +
       +    typedef int (*smbc_chmod_fn) (SMBCCTX *c, const char *fname, mode_t mode);
       +
       +    static inline smbc_chmod_fn smbc_getFunctionChmod (SMBCCTX *c)
       +    {
       +      return c->chmod;
       +    }
       +
       +
       +    typedef int (*smbc_close_fn) (SMBCCTX *c, SMBCFILE *file);
       +
       +    static inline smbc_close_fn smbc_getFunctionClose (SMBCCTX *c)
       +    {
       +      return c->close_fn;
       +    }
       +
       +
       +    typedef int (*smbc_closedir_fn) (SMBCCTX *c, SMBCFILE *dir);
       +
       +    static inline smbc_closedir_fn smbc_getFunctionClosedir (SMBCCTX *c)
       +    {
       +      return c->closedir;
       +    }
       +
       +
       +    typedef SMBCFILE * (*smbc_creat_fn) (SMBCCTX *c,
       +                                         const char *path,
       +                                         mode_t mode);
       +
       +    static inline smbc_creat_fn smbc_getFunctionCreat (SMBCCTX *c)
       +    {
       +      return c->creat;
       +    }
       +
       +
       +    typedef int (*smbc_fstat_fn) (SMBCCTX *c, SMBCFILE *file, struct stat *st);
       +
       +    static inline smbc_fstat_fn smbc_getFunctionFstat (SMBCCTX *c)
       +    {
       +      return c->fstat;
       +    }
       +
       +
       +    typedef int (*smbc_getxattr_fn) (SMBCCTX *context,
       +                                     const char *fname,
       +                                     const char *name,
       +                                     const void *value,
       +                                     size_t size);
       +
       +    static inline smbc_getxattr_fn smbc_getFunctionGetxattr (SMBCCTX *c)
       +    {
       +      return c->getxattr;
       +    }
       +
       +
       +    typedef int (*smbc_listxattr_fn) (SMBCCTX *context,
       +                                      const char *fname,
       +                                      char *list,
       +                                      size_t size);
       +
       +    static inline smbc_listxattr_fn smbc_getFunctionListxattr (SMBCCTX *c)
       +    {
       +      return c->listxattr;
       +    }
       +
       +
       +    typedef off_t (*smbc_lseek_fn) (SMBCCTX *c,
       +                                    SMBCFILE *file,
       +                                    off_t offset,
       +                                    int whence);
       +
       +    static inline smbc_lseek_fn smbc_getFunctionLseek (SMBCCTX *c)
       +    {
       +      return c->lseek;
       +    }
       +
       +
       +    typedef int (*smbc_mkdir_fn) (SMBCCTX *c, const char *fname, mode_t mode);
       +
       +    static inline smbc_mkdir_fn smbc_getFunctionMkdir (SMBCCTX *c)
       +    {
       +      return c->mkdir;
       +    }
       +
       +
       +    typedef SMBCFILE * (*smbc_open_fn) (SMBCCTX *c,
       +                                        const char *fname,
       +                                        int flags,
       +                                        mode_t mode);
       +
       +    static inline smbc_open_fn smbc_getFunctionOpen (SMBCCTX *c)
       +    {
       +      return c->open;
       +    }
       +
       +
       +    typedef SMBCFILE * (*smbc_opendir_fn) (SMBCCTX *c, const char *fname);
       +
       +    static inline smbc_opendir_fn smbc_getFunctionOpendir (SMBCCTX *c)
       +    {
       +      return c->opendir;
       +    }
       +
       +
       +    typedef ssize_t (*smbc_read_fn) (SMBCCTX *c,
       +                                     SMBCFILE *file,
       +                                     void *buf,
       +                                     size_t count);
       +
       +    static inline smbc_read_fn smbc_getFunctionRead (SMBCCTX *c)
       +    {
       +      return c->read;
       +    }
       +
       +
       +    typedef struct smbc_dirent * (*smbc_readdir_fn) (SMBCCTX *c, SMBCFILE *dir);
       +
       +    static inline smbc_readdir_fn smbc_getFunctionReaddir (SMBCCTX *c)
       +    {
       +      return c->readdir;
       +    }
       +
       +
       +    typedef int (*smbc_removexattr_fn) (SMBCCTX *context,
       +                                        const char *fname,
       +                                        const char *name);
       +
       +    static inline smbc_removexattr_fn smbc_getFunctionRemovexattr (SMBCCTX *c)
       +    {
       +      return c->removexattr;
       +    }
       +
       +
       +    typedef int (*smbc_rename_fn) (SMBCCTX *ocontext,
       +                                   const char *oname,
       +                                   SMBCCTX *ncontext,
       +                                   const char *nname);
       +
       +    static inline smbc_rename_fn smbc_getFunctionRename (SMBCCTX *c)
       +    {
       +      return c->rename;
       +    }
       +
       +
       +    typedef int (*smbc_rmdir_fn) (SMBCCTX *c, const char *fname);
       +
       +    static inline smbc_rmdir_fn smbc_getFunctionRmdir (SMBCCTX *c)
       +    {
       +      return c->rmdir;
       +    }
       +
       +
       +    typedef int (*smbc_setxattr_fn) (SMBCCTX *context,
       +                                     const char *fname,
       +                                     const char *name,
       +                                     const void *value,
       +                                     size_t size,
       +                                     int flags);
       +
       +    static inline smbc_setxattr_fn smbc_getFunctionSetxattr (SMBCCTX *c)
       +    {
       +      return c->setxattr;
       +    }
       +
       +
       +    typedef int (*smbc_stat_fn) (SMBCCTX *c, const char *fname, struct stat *s);
       +
       +    static inline smbc_stat_fn smbc_getFunctionStat (SMBCCTX *c)
       +    {
       +      return c->stat;
       +    }
       +
       +
       +    typedef int (*smbc_unlink_fn) (SMBCCTX *c, const char *fname);
       +
       +    static inline smbc_unlink_fn smbc_getFunctionUnlink (SMBCCTX *c)
       +    {
       +      return c->unlink;
       +    }
       +
       +
       +    typedef int (*smbc_utimes_fn) (SMBCCTX *c,
       +                                   const char *fname,
       +                                   struct timeval *tbuf);
       +
       +    static inline smbc_utimes_fn smbc_getFunctionUtimes (SMBCCTX *c)
       +    {
       +      return c->utimes;
       +    }
       +
       +
       +    typedef ssize_t (*smbc_write_fn) (SMBCCTX *c,
       +                                      SMBCFILE *file,
       +                                      void *buf,
       +                                      size_t count);
       +
       +    static inline smbc_write_fn smbc_getFunctionWrite (SMBCCTX *c)
       +    {
       +      return c->write;
       +    }
       +
       +
       +    typedef void (*smbc_get_auth_fn) (const char *srv,
       +                                      const char *shr,
       +                                      char *wg, int wglen,
       +                                      char *un, int unlen,
       +                                      char *pw, int pwlen);
       +
       +    static inline void smbc_setFunctionAuthData (SMBCCTX *c,
       +                                                 smbc_get_auth_data_fn fn)
       +    {
       +      c->callbacks.auth_fn = fn;
       +    }
       +
       +
       +    static inline void smbc_setTimeout (SMBCCTX *c, int timeout)
       +    {
       +      c->timeout = timeout;
       +    }
       +
       +
       +    static inline void smbc_setUser (SMBCCTX *c, char *user)
       +    {
       +      c->user = user;
       +    }
       +
       +
       +    static inline void smbc_setWorkgroup (SMBCCTX *c, char *workgroup)
       +    {
       +      c->workgroup = workgroup;
       +    }
       +
       +  #endif
       +
       +#endif
       +
 (DIR) diff --git a/usmb.c b/usmb.c
       @@ -18,7 +18,7 @@
        #include <sys/time.h>        // struct timeval needed by libsmbclient.h
        #include <unistd.h>
        #include <libsmbclient.h>
       -#include "samba30-compat.h"
       +#include "samba3x-compat.h"
        #include <fuse.h>
        #include <assert.h>
        #include <errno.h>
       @@ -112,24 +112,6 @@ bool create_smb_context (SMBCCTX **pctx)
        }
        
        
       -#if 0
       -static int usmb_statfs (const char *path, struct statvfs *vfs)
       -{
       -  if ((NULL == path) || (NULL == vfs))
       -    return -EINVAL;
       -
       -  memset (vfs, 0, sizeof (*vfs));
       -
       -  vfs->f_bsize = 32768;
       -  vfs->f_blocks = 0x7FFFFFFFl;
       -  vfs->f_bfree = 0x7FFFFFFFl;
       -  vfs->f_bavail = 0x7FFFFFFFl;
       -
       -  return 0;
       -}
       -#endif
       -
       -
        static void * usmb_init (struct fuse_conn_info *conn UNUSED)
        {
          DEBUG (fputs ("usmb_init()\n", stderr));
       @@ -144,7 +126,7 @@ static void usmb_destroy (void *unused UNUSED)
        
        
        // probably won't (can't ?) implement these:
       -// readlink mknod symlink flush fsync statfs
       +// readlink mknod symlink flush fsync
        
        // no easy way of implementing these:
        // access ftruncate
       @@ -172,7 +154,7 @@ static struct fuse_operations fuse_ops = {
          SET_ELEMENT (.open, usmb_open),
          SET_ELEMENT (.read, usmb_read),
          SET_ELEMENT (.write, usmb_write),
       -  SET_ELEMENT (.statfs, NULL),
       +  SET_ELEMENT (.statfs, usmb_statfs),
          SET_ELEMENT (.flush, NULL),
          SET_ELEMENT (.release, usmb_release),
          SET_ELEMENT (.fsync, NULL),
 (DIR) diff --git a/usmb.h b/usmb.h
       @@ -18,6 +18,7 @@
          #define USMB_H
        
          #include <stdbool.h>
       +  #include <stdint.h>
          #include <libsmbclient.h>
        
          extern SMBCCTX *ctx;
 (DIR) diff --git a/usmb_dir.c b/usmb_dir.c
       @@ -17,7 +17,7 @@
        #include "config.h"
        #include <sys/time.h>        // struct timeval needed by libsmbclient.h
        #include <libsmbclient.h>
       -#include "samba30-compat.h"
       +#include "samba3x-compat.h"
        #include <fuse.h>
        #include <dirent.h>
        #include <errno.h>
 (DIR) diff --git a/usmb_file.c b/usmb_file.c
       @@ -17,7 +17,7 @@
        #include "config.h"
        #include <sys/time.h>        // struct timeval needed by libsmbclient.h
        #include <libsmbclient.h>
       -#include "samba30-compat.h"
       +#include "samba3x-compat.h"
        #include <limits.h>
        #include <assert.h>
        #include <fuse.h>