mirror of
https://github.com/samba-team/samba.git
synced 2025-08-03 04:22:09 +03:00
s3 libsmbclient: Fix fstatvfs to be more portable
The statvfs struct isn't guaranteed to be portable across operating
systems. Since libsmbclient isn't actually calling statvfs and just
using the statvfs struct to store similar information, this patch adds
a new portable smbc_statvfs struct. This fixes a few of the failures
in the build farm introduced by:
ae259575c4
Derrell, please check.
This commit is contained in:
@ -1,5 +1,4 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
@ -18,7 +17,7 @@ int main(int argc, char * argv[])
|
||||
char * p;
|
||||
char path[2048];
|
||||
struct stat statbuf;
|
||||
struct statvfs statvfsbuf;
|
||||
struct smbc_statvfs statvfsbuf;
|
||||
|
||||
smbc_init(get_auth_data_fn, debug);
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
@ -18,7 +17,7 @@ int main(int argc, char * argv[])
|
||||
char * p;
|
||||
char path[2048];
|
||||
struct stat statbuf;
|
||||
struct statvfs statvfsbuf;
|
||||
struct smbc_statvfs statvfsbuf;
|
||||
|
||||
smbc_init(get_auth_data_fn, debug);
|
||||
|
||||
|
@ -506,13 +506,13 @@ SMBC_fstat_ctx(SMBCCTX *context,
|
||||
int
|
||||
SMBC_statvfs_ctx(SMBCCTX *context,
|
||||
char *path,
|
||||
struct statvfs *st);
|
||||
struct smbc_statvfs *st);
|
||||
|
||||
|
||||
int
|
||||
SMBC_fstatvfs_ctx(SMBCCTX *context,
|
||||
SMBCFILE *file,
|
||||
struct statvfs *st);
|
||||
struct smbc_statvfs *st);
|
||||
|
||||
|
||||
/* Functions in libsmb_xattr.c */
|
||||
|
@ -75,7 +75,6 @@ extern "C" {
|
||||
/* Make sure we have the following includes for now ... */
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <fcntl.h>
|
||||
#include <utime.h>
|
||||
|
||||
@ -174,6 +173,22 @@ typedef enum smbc_smb_encrypt_level
|
||||
SMBC_ENCRYPTLEVEL_REQUIRE = 2
|
||||
} smbc_smb_encrypt_level;
|
||||
|
||||
/**
|
||||
* Use a system independent statvfs struct for smbclient.
|
||||
*/
|
||||
struct smbc_statvfs {
|
||||
fsblkcnt_t f_bavail;
|
||||
fsblkcnt_t f_bfree;
|
||||
fsblkcnt_t f_blocks;
|
||||
fsfilcnt_t f_favail;
|
||||
fsfilcnt_t f_ffree;
|
||||
fsfilcnt_t f_files;
|
||||
unsigned long f_bsize;
|
||||
unsigned long f_flag;
|
||||
unsigned long f_frsize;
|
||||
unsigned long f_fsid;
|
||||
unsigned long f_namemax;
|
||||
};
|
||||
|
||||
/**
|
||||
* Capabilities set in the f_flag field of struct statvfs, from
|
||||
@ -872,13 +887,13 @@ void smbc_setFunctionFstat(SMBCCTX *c, smbc_fstat_fn fn);
|
||||
|
||||
typedef int (*smbc_statvfs_fn)(SMBCCTX *c,
|
||||
char *path,
|
||||
struct statvfs *st);
|
||||
struct smbc_statvfs *st);
|
||||
smbc_statvfs_fn smbc_getFunctionStatVFS(SMBCCTX *c);
|
||||
void smbc_setFunctionStatVFS(SMBCCTX *c, smbc_statvfs_fn fn);
|
||||
|
||||
typedef int (*smbc_fstatvfs_fn)(SMBCCTX *c,
|
||||
SMBCFILE *file,
|
||||
struct statvfs *st);
|
||||
struct smbc_statvfs *st);
|
||||
smbc_fstatvfs_fn smbc_getFunctionFstatVFS(SMBCCTX *c);
|
||||
void smbc_setFunctionFstatVFS(SMBCCTX *c, smbc_fstatvfs_fn fn);
|
||||
|
||||
@ -1640,7 +1655,7 @@ int smbc_fstat(int fd, struct stat *st);
|
||||
*/
|
||||
int
|
||||
smbc_statvfs(char *url,
|
||||
struct statvfs *st);
|
||||
struct smbc_statvfs *st);
|
||||
|
||||
/**@ingroup attribute
|
||||
* Get file system information via an file descriptor.
|
||||
@ -1663,7 +1678,7 @@ smbc_statvfs(char *url,
|
||||
*/
|
||||
int
|
||||
smbc_fstatvfs(int fd,
|
||||
struct statvfs *st);
|
||||
struct smbc_statvfs *st);
|
||||
|
||||
|
||||
/**@ingroup attribute
|
||||
|
@ -331,14 +331,14 @@ smbc_fstat(int fd,
|
||||
|
||||
int
|
||||
smbc_statvfs(char *path,
|
||||
struct statvfs *st)
|
||||
struct smbc_statvfs *st)
|
||||
{
|
||||
return smbc_getFunctionStatVFS(statcont)(statcont, path, st);
|
||||
}
|
||||
|
||||
int
|
||||
smbc_fstatvfs(int fd,
|
||||
struct statvfs *st)
|
||||
struct smbc_statvfs *st)
|
||||
{
|
||||
SMBCFILE * file = find_fd(fd);
|
||||
return smbc_getFunctionFstatVFS(statcont)(statcont, file, st);
|
||||
|
@ -308,7 +308,7 @@ SMBC_fstat_ctx(SMBCCTX *context,
|
||||
int
|
||||
SMBC_statvfs_ctx(SMBCCTX *context,
|
||||
char *path,
|
||||
struct statvfs *st)
|
||||
struct smbc_statvfs *st)
|
||||
{
|
||||
int ret;
|
||||
bool bIsDir;
|
||||
@ -360,7 +360,7 @@ SMBC_statvfs_ctx(SMBCCTX *context,
|
||||
int
|
||||
SMBC_fstatvfs_ctx(SMBCCTX *context,
|
||||
SMBCFILE *file,
|
||||
struct statvfs *st)
|
||||
struct smbc_statvfs *st)
|
||||
{
|
||||
uint32 fs_attrs = 0;
|
||||
struct cli_state *cli = file->srv->cli;
|
||||
|
Reference in New Issue
Block a user