Browse Source

Updating return/variable types

After running Clang’s analyzer on it there were quite a few places where there were mis-matched store sizes and signs.  I updated them so that the underlying code more closely-matches the OS APIs and the type change happens at the FUSE connection.

In this way, if FUSE ever updates the API to actually match the APIs of modern OSes, it’s a fix in one place.

Also, I updated read/write to return the total read/write value the OS returned rather than blindly return the request count.
pull/384/head
Adam Knight 9 years ago
parent
commit
d1aec144a6
  1. 4
      src/fs.cpp
  2. 2
      src/fs_acl.cpp
  3. 2
      src/fs_base_getxattr.hpp
  4. 2
      src/fs_base_ioctl.hpp
  5. 2
      src/fs_base_listxattr.hpp
  6. 2
      src/fs_base_readlink.hpp
  7. 43
      src/fs_clonefile.cpp
  8. 6
      src/fs_inode.hpp
  9. 2
      src/fs_movefile.cpp
  10. 78
      src/fs_xattr.cpp
  11. 28
      src/getxattr.cpp
  12. 16
      src/gidcache.cpp
  13. 10
      src/ioctl.cpp
  14. 12
      src/listxattr.cpp
  15. 2
      src/mergerfs.cpp
  16. 2
      src/num.cpp
  17. 16
      src/read.cpp
  18. 6
      src/readdir.cpp
  19. 10
      src/readlink.cpp
  20. 6
      src/ugid_rwlock.hpp
  21. 24
      src/write.cpp
  22. 8
      src/write_buf.cpp

4
src/fs.cpp

@ -151,7 +151,7 @@ namespace fs
return -1; return -1;
dev = st.st_dev; dev = st.st_dev;
for(int i = 0, ei = srcmounts.size(); i != ei; i++)
for(size_t i = 0, ei = srcmounts.size(); i != ei; i++)
{ {
fs::path::make(&srcmounts[i],fusepath,fullpath); fs::path::make(&srcmounts[i],fusepath,fullpath);
@ -241,7 +241,7 @@ namespace fs
if(spaceavail <= mfs) if(spaceavail <= mfs)
continue; continue;
mfs = spaceavail;
mfs = (fsblkcnt_t)spaceavail;
mfsbasepath = &basepaths[i]; mfsbasepath = &basepaths[i];
} }

2
src/fs_acl.cpp

@ -30,7 +30,7 @@ namespace fs
bool bool
dir_has_defaults(const std::string &fullpath) dir_has_defaults(const std::string &fullpath)
{ {
int rv;
ssize_t rv;
std::string dirpath = fullpath; std::string dirpath = fullpath;
fs::path::dirname(dirpath); fs::path::dirname(dirpath);

2
src/fs_base_getxattr.hpp

@ -28,7 +28,7 @@ namespace fs
{ {
static static
inline inline
int
ssize_t
lgetxattr(const std::string &path, lgetxattr(const std::string &path,
const char *attrname, const char *attrname,
void *value, void *value,

2
src/fs_base_ioctl.hpp

@ -27,7 +27,7 @@ namespace fs
inline inline
int int
ioctl(const int fd, ioctl(const int fd,
const int request,
const unsigned long request,
void *data) void *data)
{ {
return ::ioctl(fd,request,data); return ::ioctl(fd,request,data);

2
src/fs_base_listxattr.hpp

@ -28,7 +28,7 @@ namespace fs
{ {
static static
inline inline
int
ssize_t
llistxattr(const std::string &path, llistxattr(const std::string &path,
char *list, char *list,
const size_t size) const size_t size)

2
src/fs_base_readlink.hpp

@ -27,7 +27,7 @@ namespace fs
{ {
static static
inline inline
int
ssize_t
readlink(const std::string &path, readlink(const std::string &path,
char *buf, char *buf,
const size_t bufsiz) const size_t bufsiz)

43
src/fs_clonefile.cpp

@ -48,13 +48,13 @@
using std::string; using std::string;
using std::vector; using std::vector;
int
ssize_t
writen(const int fd, writen(const int fd,
const char *buf, const char *buf,
const size_t count) const size_t count)
{ {
size_t nleft; size_t nleft;
ssize_t nwritten;
ssize_t nwritten = 0;
nleft = count; nleft = count;
while(nleft > 0) while(nleft > 0)
@ -67,15 +67,15 @@ writen(const int fd,
return -1; return -1;
} }
nleft -= nwritten;
buf += nwritten;
nleft -= (size_t)nwritten;
buf += (size_t)nwritten;
} }
return count;
return nwritten;
} }
static static
int
ssize_t
copyfile_rw(const int fdin, copyfile_rw(const int fdin,
const int fdout, const int fdout,
const size_t count, const size_t count,
@ -83,8 +83,8 @@ copyfile_rw(const int fdin,
{ {
ssize_t nr; ssize_t nr;
ssize_t nw; ssize_t nw;
ssize_t bufsize;
size_t totalwritten;
size_t bufsize;
ssize_t totalwritten;
vector<char> buf; vector<char> buf;
bufsize = (blocksize * 16); bufsize = (blocksize * 16);
@ -93,7 +93,7 @@ copyfile_rw(const int fdin,
fs::lseek(fdin,0,SEEK_SET); fs::lseek(fdin,0,SEEK_SET);
totalwritten = 0; totalwritten = 0;
while(totalwritten < count)
while(totalwritten < (ssize_t)count)
{ {
nr = fs::read(fdin,&buf[0],bufsize); nr = fs::read(fdin,&buf[0],bufsize);
if(nr == -1) if(nr == -1)
@ -103,29 +103,30 @@ copyfile_rw(const int fdin,
return -1; return -1;
} }
nw = writen(fdout,&buf[0],nr);
nw = writen(fdout,&buf[0],(size_t)nr);
if(nw == -1) if(nw == -1)
return -1; return -1;
totalwritten += nw; totalwritten += nw;
} }
return count;
return totalwritten;
} }
static static
int
ssize_t
copydata(const int fdin, copydata(const int fdin,
const int fdout, const int fdout,
const size_t count, const size_t count,
const size_t blocksize) const size_t blocksize)
{ {
int rv;
ssize_t rv;
off_t scount = (off_t)count;
fs::fadvise(fdin,0,count,POSIX_FADV_WILLNEED);
fs::fadvise(fdin,0,count,POSIX_FADV_SEQUENTIAL);
fs::fadvise(fdin,0,scount,POSIX_FADV_WILLNEED);
fs::fadvise(fdin,0,scount,POSIX_FADV_SEQUENTIAL);
fs::fallocate(fdout,0,0,count);
fs::fallocate(fdout,0,0,scount);
rv = fs::sendfile(fdin,fdout,count); rv = fs::sendfile(fdin,fdout,count);
if((rv == -1) && ((errno == EINVAL) || (errno == ENOSYS))) if((rv == -1) && ((errno == EINVAL) || (errno == ENOSYS)))
@ -153,18 +154,18 @@ ignorable_error(const int err)
namespace fs namespace fs
{ {
int
ssize_t
clonefile(const int fdin, clonefile(const int fdin,
const int fdout) const int fdout)
{ {
int rv;
ssize_t rv;
struct stat stin; struct stat stin;
rv = fs::fstat(fdin,stin); rv = fs::fstat(fdin,stin);
if(rv == -1) if(rv == -1)
return -1; return -1;
rv = ::copydata(fdin,fdout,stin.st_size,stin.st_blksize);
rv = ::copydata(fdin,fdout,(size_t)stin.st_size,(size_t)stin.st_blksize);
if(rv == -1) if(rv == -1)
return -1; return -1;
@ -191,11 +192,11 @@ namespace fs
return 0; return 0;
} }
int
ssize_t
clonefile(const string &in, clonefile(const string &in,
const string &out) const string &out)
{ {
int rv;
ssize_t rv;
int fdin; int fdin;
int fdout; int fdout;
int error; int error;

6
src/fs_inode.hpp

@ -34,7 +34,11 @@ namespace fs
void void
recompute(struct stat &st) recompute(struct stat &st)
{ {
uint64_t st_dev = st.st_dev; /* Mac OS has a 32-bit device ID */
/*
Some OSes have 32-bit device IDs, so box this up first.
This does also presume a 64-bit inode value.
*/
uint64_t st_dev = (uint64_t)st.st_dev;
st.st_ino |= (st_dev << 32); st.st_ino |= (st_dev << 32);
} }
} }

2
src/fs_movefile.cpp

@ -66,7 +66,7 @@ namespace fs
return -1; return -1;
fdin_st.st_size += additional_size; fdin_st.st_size += additional_size;
rv = fs::mfs(basepaths,fdin_st.st_size,fdout_path);
rv = fs::mfs(basepaths,(uint64_t)fdin_st.st_size,fdout_path);
if(rv == -1) if(rv == -1)
return -1; return -1;

78
src/fs_xattr.cpp

@ -63,19 +63,19 @@ using std::istringstream;
return ::fgetxattr(fd, name, value, size, 0, 0); return ::fgetxattr(fd, name, value, size, 0, 0);
} }
int
ssize_t
_lgetxattr(const char* path, const char* name, char* value, size_t size) _lgetxattr(const char* path, const char* name, char* value, size_t size)
{ {
return ::getxattr(path, name, value, size, 0, XATTR_NOFOLLOW); return ::getxattr(path, name, value, size, 0, XATTR_NOFOLLOW);
} }
int
ssize_t
_fsetxattr(int fd, const char* name, const char* value, size_t size, int flags) _fsetxattr(int fd, const char* name, const char* value, size_t size, int flags)
{ {
return ::fsetxattr(fd, name, value, size, 0, flags); return ::fsetxattr(fd, name, value, size, 0, flags);
} }
int
ssize_t
_lsetxattr(const char* path, const char* name, const char* value, size_t size, int flags) _lsetxattr(const char* path, const char* name, const char* value, size_t size, int flags)
{ {
return ::setxattr(path, name, value, size, 0, flags && XATTR_NOFOLLOW); return ::setxattr(path, name, value, size, 0, flags && XATTR_NOFOLLOW);
@ -94,7 +94,7 @@ namespace fs
{ {
namespace xattr namespace xattr
{ {
int
ssize_t
list(const int fd, list(const int fd,
vector<char> &attrs) vector<char> &attrs)
{ {
@ -109,9 +109,9 @@ namespace fs
if(rv <= 0) if(rv <= 0)
return rv; return rv;
attrs.resize(rv);
attrs.resize((size_t)rv);
rv = _flistxattr(fd,&attrs[0],rv);
rv = _flistxattr(fd,&attrs[0],(size_t)rv);
} }
return rv; return rv;
@ -120,7 +120,7 @@ namespace fs
#endif #endif
} }
int
ssize_t
list(const string &path, list(const string &path,
vector<char> &attrs) vector<char> &attrs)
{ {
@ -135,9 +135,9 @@ namespace fs
if(rv <= 0) if(rv <= 0)
return rv; return rv;
attrs.resize(rv);
attrs.resize((size_t)rv);
rv = _llistxattr(path.c_str(),&attrs[0],rv);
rv = _llistxattr(path.c_str(),&attrs[0],(size_t)rv);
} }
return rv; return rv;
@ -146,11 +146,11 @@ namespace fs
#endif #endif
} }
int
ssize_t
list(const int fd, list(const int fd,
vector<string> &attrvector) vector<string> &attrvector)
{ {
int rv;
ssize_t rv;
vector<char> attrs; vector<char> attrs;
rv = list(fd,attrs); rv = list(fd,attrs);
@ -163,11 +163,11 @@ namespace fs
return rv; return rv;
} }
int
ssize_t
list(const string &path, list(const string &path,
vector<string> &attrvector) vector<string> &attrvector)
{ {
int rv;
ssize_t rv;
vector<char> attrs; vector<char> attrs;
rv = list(path,attrs); rv = list(path,attrs);
@ -180,11 +180,11 @@ namespace fs
return rv; return rv;
} }
int
ssize_t
list(const int fd, list(const int fd,
string &attrstr) string &attrstr)
{ {
int rv;
ssize_t rv;
vector<char> attrs; vector<char> attrs;
rv = list(fd,attrs); rv = list(fd,attrs);
@ -194,11 +194,11 @@ namespace fs
return rv; return rv;
} }
int
ssize_t
list(const string &path, list(const string &path,
string &attrstr) string &attrstr)
{ {
int rv;
ssize_t rv;
vector<char> attrs; vector<char> attrs;
rv = list(path,attrs); rv = list(path,attrs);
@ -208,7 +208,7 @@ namespace fs
return rv; return rv;
} }
int
ssize_t
get(const int fd, get(const int fd,
const string &attr, const string &attr,
vector<char> &value) vector<char> &value)
@ -224,9 +224,9 @@ namespace fs
if(rv <= 0) if(rv <= 0)
return rv; return rv;
value.resize(rv);
value.resize((size_t)rv);
rv = _fgetxattr(fd,attr.c_str(),&value[0],rv);
rv = _fgetxattr(fd,attr.c_str(),&value[0],(size_t)rv);
} }
return rv; return rv;
@ -235,7 +235,7 @@ namespace fs
#endif #endif
} }
int
ssize_t
get(const string &path, get(const string &path,
const string &attr, const string &attr,
vector<char> &value) vector<char> &value)
@ -251,9 +251,9 @@ namespace fs
if(rv <= 0) if(rv <= 0)
return rv; return rv;
value.resize(rv);
value.resize((size_t)rv);
rv = _lgetxattr(path.c_str(),attr.c_str(),&value[0],rv);
rv = _lgetxattr(path.c_str(),attr.c_str(),&value[0],(size_t)rv);
} }
return rv; return rv;
@ -262,12 +262,12 @@ namespace fs
#endif #endif
} }
int
ssize_t
get(const int fd, get(const int fd,
const string &attr, const string &attr,
string &value) string &value)
{ {
int rv;
ssize_t rv;
vector<char> tmpvalue; vector<char> tmpvalue;
rv = get(fd,attr,tmpvalue); rv = get(fd,attr,tmpvalue);
@ -277,12 +277,12 @@ namespace fs
return rv; return rv;
} }
int
ssize_t
get(const string &path, get(const string &path,
const string &attr, const string &attr,
string &value) string &value)
{ {
int rv;
ssize_t rv;
vector<char> tmpvalue; vector<char> tmpvalue;
rv = get(path,attr,tmpvalue); rv = get(path,attr,tmpvalue);
@ -292,11 +292,11 @@ namespace fs
return rv; return rv;
} }
int
ssize_t
get(const int fd, get(const int fd,
map<string,string> &attrs) map<string,string> &attrs)
{ {
int rv;
ssize_t rv;
string attrstr; string attrstr;
rv = list(fd,attrstr); rv = list(fd,attrstr);
@ -320,11 +320,11 @@ namespace fs
return 0; return 0;
} }
int
ssize_t
get(const string &path, get(const string &path,
map<string,string> &attrs) map<string,string> &attrs)
{ {
int rv;
ssize_t rv;
string attrstr; string attrstr;
rv = list(path,attrstr); rv = list(path,attrstr);
@ -348,7 +348,7 @@ namespace fs
return 0; return 0;
} }
int
ssize_t
set(const int fd, set(const int fd,
const string &key, const string &key,
const string &value, const string &value,
@ -365,7 +365,7 @@ namespace fs
#endif #endif
} }
int
ssize_t
set(const string &path, set(const string &path,
const string &key, const string &key,
const string &value, const string &value,
@ -382,11 +382,11 @@ namespace fs
#endif #endif
} }
int
ssize_t
set(const int fd, set(const int fd,
const map<string,string> &attrs) const map<string,string> &attrs)
{ {
int rv;
ssize_t rv;
for(map<string,string>::const_iterator for(map<string,string>::const_iterator
i = attrs.begin(), ei = attrs.end(); i != ei; ++i) i = attrs.begin(), ei = attrs.end(); i != ei; ++i)
@ -414,11 +414,11 @@ namespace fs
return fs::close(fd); return fs::close(fd);
} }
int
ssize_t
copy(const int fdin, copy(const int fdin,
const int fdout) const int fdout)
{ {
int rv;
ssize_t rv;
map<string,string> attrs; map<string,string> attrs;
rv = get(fdin,attrs); rv = get(fdin,attrs);
@ -428,11 +428,11 @@ namespace fs
return set(fdout,attrs); return set(fdout,attrs);
} }
int
ssize_t
copy(const string &from, copy(const string &from,
const string &to) const string &to)
{ {
int rv;
ssize_t rv;
map<string,string> attrs; map<string,string> attrs;
rv = get(from,attrs); rv = get(from,attrs);

28
src/getxattr.cpp

@ -39,13 +39,13 @@ using std::set;
using namespace mergerfs; using namespace mergerfs;
static static
int
ssize_t
_lgetxattr(const string &path, _lgetxattr(const string &path,
const char *attrname, const char *attrname,
void *value, void *value,
const size_t size) const size_t size)
{ {
int rv;
ssize_t rv;
rv = fs::lgetxattr(path,attrname,value,size); rv = fs::lgetxattr(path,attrname,value,size);
@ -153,7 +153,7 @@ _getxattr_pid(string &attrvalue)
} }
static static
int
ssize_t
_getxattr_controlfile(const Config &config, _getxattr_controlfile(const Config &config,
const char *attrname, const char *attrname,
char *buf, char *buf,
@ -198,7 +198,7 @@ _getxattr_controlfile(const Config &config,
len = attrvalue.size(); len = attrvalue.size();
if(count == 0) if(count == 0)
return len;
return (ssize_t)len;
if(count < len) if(count < len)
return -ERANGE; return -ERANGE;
@ -209,7 +209,7 @@ _getxattr_controlfile(const Config &config,
} }
static static
int
ssize_t
_getxattr_from_string(char *destbuf, _getxattr_from_string(char *destbuf,
const size_t destbufsize, const size_t destbufsize,
const string &src) const string &src)
@ -217,18 +217,18 @@ _getxattr_from_string(char *destbuf,
const size_t srcbufsize = src.size(); const size_t srcbufsize = src.size();
if(destbufsize == 0) if(destbufsize == 0)
return srcbufsize;
return (ssize_t)srcbufsize;
if(srcbufsize > destbufsize) if(srcbufsize > destbufsize)
return -ERANGE; return -ERANGE;
memcpy(destbuf,src.data(),srcbufsize); memcpy(destbuf,src.data(),srcbufsize);
return srcbufsize;
return (ssize_t)srcbufsize;
} }
static static
int
ssize_t
_getxattr_user_mergerfs_allpaths(const vector<string> &srcmounts, _getxattr_user_mergerfs_allpaths(const vector<string> &srcmounts,
const char *fusepath, const char *fusepath,
char *buf, char *buf,
@ -245,7 +245,7 @@ _getxattr_user_mergerfs_allpaths(const vector<string> &srcmounts,
} }
static static
int
ssize_t
_getxattr_user_mergerfs(const string &basepath, _getxattr_user_mergerfs(const string &basepath,
const char *fusepath, const char *fusepath,
const string &fullpath, const string &fullpath,
@ -271,7 +271,7 @@ _getxattr_user_mergerfs(const string &basepath,
} }
static static
int
ssize_t
_getxattr(Policy::Func::Search searchFunc, _getxattr(Policy::Func::Search searchFunc,
const vector<string> &srcmounts, const vector<string> &srcmounts,
const size_t minfreespace, const size_t minfreespace,
@ -280,7 +280,7 @@ _getxattr(Policy::Func::Search searchFunc,
char *buf, char *buf,
const size_t count) const size_t count)
{ {
int rv;
ssize_t rv;
string fullpath; string fullpath;
vector<const string*> basepaths; vector<const string*> basepaths;
@ -303,14 +303,14 @@ namespace mergerfs
namespace fuse namespace fuse
{ {
#if __APPLE__ #if __APPLE__
int
ssize_t
getxattr(const char *fusepath, getxattr(const char *fusepath,
const char *attrname, const char *attrname,
char *buf, char *buf,
size_t count, size_t count,
uint32_t position) uint32_t position)
#else #else
int
ssize_t
getxattr(const char *fusepath, getxattr(const char *fusepath,
const char *attrname, const char *attrname,
char *buf, char *buf,
@ -331,7 +331,7 @@ namespace mergerfs
return _getxattr(config.getxattr, return _getxattr(config.getxattr,
config.srcmounts, config.srcmounts,
config.minfreespace,
(size_t)config.minfreespace,
fusepath, fusepath,
attrname, attrname,
buf, buf,

16
src/gidcache.cpp

@ -66,8 +66,8 @@ gid_t_cache::lower_bound(gid_t_rec *begin,
gid_t_rec *end, gid_t_rec *end,
const uid_t uid) const uid_t uid)
{ {
int step;
int count;
long step;
long count;
gid_t_rec *iter; gid_t_rec *iter;
count = std::distance(begin,end); count = std::distance(begin,end);
@ -106,15 +106,19 @@ gid_t_cache::cache(const uid_t uid,
rv = ::getpwuid_r(uid,&pwd,buf,sizeof(buf),&pwdrv); rv = ::getpwuid_r(uid,&pwd,buf,sizeof(buf),&pwdrv);
if(pwdrv != NULL && rv == 0) if(pwdrv != NULL && rv == 0)
{ {
#if __APPLE__
// OSX: getgrouplist(const char *name, int basegid, int *groups, int *ngroups)
rec->size = 0; rec->size = 0;
::getgrouplist(pwd.pw_name,gid,NULL,&rec->size);
::getgrouplist(pwd.pw_name,(int)gid,NULL,&rec->size);
rec->size = std::min(MAXGIDS,rec->size); rec->size = std::min(MAXGIDS,rec->size);
#if __APPLE__
// OSX: getgrouplist(const char *name, int basegid, int *groups, int *ngroups)
rv = ::getgrouplist(pwd.pw_name,gid,(int*)rec->gids,&rec->size);
rv = ::getgrouplist(pwd.pw_name,(int)gid,(int*)rec->gids,&rec->size);
#else #else
// Linux: getgrouplist(const char *name, gid_t group, gid_t *groups int *ngroups) // Linux: getgrouplist(const char *name, gid_t group, gid_t *groups int *ngroups)
rec->size = 0;
::getgrouplist(pwd.pw_name,gid,NULL,&rec->size);
rec->size = std::min(MAXGIDS,rec->size);
rv = ::getgrouplist(pwd.pw_name,gid,rec->gids,&rec->size); rv = ::getgrouplist(pwd.pw_name,gid,rec->gids,&rec->size);
#endif #endif

10
src/ioctl.cpp

@ -38,7 +38,7 @@ using namespace mergerfs;
static static
int int
_ioctl(const int fd, _ioctl(const int fd,
const int cmd,
const unsigned long cmd,
void *data) void *data)
{ {
int rv; int rv;
@ -60,7 +60,7 @@ _ioctl_dir_base(Policy::Func::Search searchFunc,
const vector<string> &srcmounts, const vector<string> &srcmounts,
const uint64_t minfreespace, const uint64_t minfreespace,
const char *fusepath, const char *fusepath,
const int cmd,
const unsigned long cmd,
void *data) void *data)
{ {
int fd; int fd;
@ -89,7 +89,7 @@ _ioctl_dir_base(Policy::Func::Search searchFunc,
static static
int int
_ioctl_dir(const char *fusepath, _ioctl_dir(const char *fusepath,
const int cmd,
const unsigned long cmd,
void *data) void *data)
{ {
const fuse_context *fc = fuse_get_context(); const fuse_context *fc = fuse_get_context();
@ -121,13 +121,13 @@ namespace mergerfs
#ifdef FUSE_IOCTL_DIR #ifdef FUSE_IOCTL_DIR
if(flags & FUSE_IOCTL_DIR) if(flags & FUSE_IOCTL_DIR)
return _ioctl_dir(fusepath, return _ioctl_dir(fusepath,
cmd,
(unsigned long)cmd,
data); data);
#endif #endif
FileInfo *fi = reinterpret_cast<FileInfo*>(ffi->fh); FileInfo *fi = reinterpret_cast<FileInfo*>(ffi->fh);
return _ioctl(fi->fd, return _ioctl(fi->fd,
cmd,
(unsigned long)cmd,
data); data);
} }
} }

12
src/listxattr.cpp

@ -36,7 +36,7 @@ using std::vector;
using namespace mergerfs; using namespace mergerfs;
static static
int
ssize_t
_listxattr_controlfile(char *list, _listxattr_controlfile(char *list,
const size_t size) const size_t size)
{ {
@ -59,18 +59,18 @@ _listxattr_controlfile(char *list,
xattrs += ("user.mergerfs.func." + (std::string)*FuseFunc::fusefuncs[i] + '\0'); xattrs += ("user.mergerfs.func." + (std::string)*FuseFunc::fusefuncs[i] + '\0');
if(size == 0) if(size == 0)
return xattrs.size();
return (ssize_t)xattrs.size();
if(size < xattrs.size()) if(size < xattrs.size())
return -ERANGE; return -ERANGE;
memcpy(list,xattrs.c_str(),xattrs.size()); memcpy(list,xattrs.c_str(),xattrs.size());
return xattrs.size();
return (ssize_t)xattrs.size();
} }
static static
int
ssize_t
_listxattr(Policy::Func::Search searchFunc, _listxattr(Policy::Func::Search searchFunc,
const vector<string> &srcmounts, const vector<string> &srcmounts,
const uint64_t minfreespace, const uint64_t minfreespace,
@ -78,7 +78,7 @@ _listxattr(Policy::Func::Search searchFunc,
char *list, char *list,
const size_t size) const size_t size)
{ {
int rv;
ssize_t rv;
string fullpath; string fullpath;
vector<const string*> basepaths; vector<const string*> basepaths;
@ -97,7 +97,7 @@ namespace mergerfs
{ {
namespace fuse namespace fuse
{ {
int
ssize_t
listxattr(const char *fusepath, listxattr(const char *fusepath,
char *list, char *list,
size_t size) size_t size)

2
src/mergerfs.cpp

@ -142,7 +142,7 @@ namespace local
{ {
const int prio = -10; const int prio = -10;
std::srand(time(NULL));
std::srand((unsigned int)time(NULL));
mergerfs::resources::reset_umask(); mergerfs::resources::reset_umask();
mergerfs::resources::maxout_rlimit_nofile(); mergerfs::resources::maxout_rlimit_nofile();
mergerfs::resources::maxout_rlimit_fsize(); mergerfs::resources::maxout_rlimit_fsize();

2
src/num.cpp

@ -28,7 +28,7 @@ namespace num
char *endptr; char *endptr;
uint64_t tmp; uint64_t tmp;
tmp = strtoll(str.c_str(),&endptr,10);
tmp = strtoul(str.c_str(),&endptr,10);
switch(*endptr) switch(*endptr)
{ {
case 'k': case 'k':

16
src/read.cpp

@ -26,32 +26,30 @@
static static
inline inline
int
ssize_t
_read(const int fd, _read(const int fd,
void *buf, void *buf,
const size_t count, const size_t count,
const off_t offset) const off_t offset)
{ {
int rv;
ssize_t rv;
rv = fs::pread(fd,buf,count,offset); rv = fs::pread(fd,buf,count,offset);
if(rv == -1) if(rv == -1)
return -errno; return -errno;
if(rv == 0)
return 0;
return count;
return rv;
} }
static static
inline inline
int
ssize_t
_read_direct_io(const int fd, _read_direct_io(const int fd,
void *buf, void *buf,
const size_t count, const size_t count,
const off_t offset) const off_t offset)
{ {
int rv;
ssize_t rv;
rv = fs::pread(fd,buf,count,offset); rv = fs::pread(fd,buf,count,offset);
if(rv == -1) if(rv == -1)
@ -64,7 +62,7 @@ namespace mergerfs
{ {
namespace fuse namespace fuse
{ {
int
ssize_t
read(const char *fusepath, read(const char *fusepath,
char *buf, char *buf,
size_t count, size_t count,
@ -76,7 +74,7 @@ namespace mergerfs
return _read(fi->fd,buf,count,offset); return _read(fi->fd,buf,count,offset);
} }
int
ssize_t
read_direct_io(const char *fusepath, read_direct_io(const char *fusepath,
char *buf, char *buf,
size_t count, size_t count,

6
src/readdir.cpp

@ -50,7 +50,7 @@ _readdir(const vector<string> &srcmounts,
void *buf, void *buf,
const fuse_fill_dir_t filler) const fuse_fill_dir_t filler)
{ {
StrSet names;
StrSet names = StrSet();
string basepath; string basepath;
struct stat st = {0}; struct stat st = {0};
@ -69,7 +69,7 @@ _readdir(const vector<string> &srcmounts,
dirfd = fs::dirfd(dh); dirfd = fs::dirfd(dh);
st.st_dev = fs::devid(dirfd); st.st_dev = fs::devid(dirfd);
if(st.st_dev == (dev_t)-1) if(st.st_dev == (dev_t)-1)
st.st_dev = i;
st.st_dev = (dev_t)i;
rv = 0; rv = 0;
for(struct dirent *de = fs::readdir(dh); de && !rv; de = fs::readdir(dh)) for(struct dirent *de = fs::readdir(dh); de && !rv; de = fs::readdir(dh))
@ -79,7 +79,7 @@ _readdir(const vector<string> &srcmounts,
continue; continue;
st.st_ino = de->d_ino; st.st_ino = de->d_ino;
st.st_mode = DTTOIF(de->d_type);
st.st_mode = (mode_t)DTTOIF(de->d_type);
fs::inode::recompute(st); fs::inode::recompute(st);

10
src/readlink.cpp

@ -28,13 +28,13 @@ using std::vector;
using mergerfs::Policy; using mergerfs::Policy;
static static
int
ssize_t
_readlink_core(const string *basepath, _readlink_core(const string *basepath,
const char *fusepath, const char *fusepath,
char *buf, char *buf,
const size_t size) const size_t size)
{ {
int rv;
ssize_t rv;
string fullpath; string fullpath;
fs::path::make(basepath,fusepath,fullpath); fs::path::make(basepath,fusepath,fullpath);
@ -49,7 +49,7 @@ _readlink_core(const string *basepath,
} }
static static
int
ssize_t
_readlink(Policy::Func::Search searchFunc, _readlink(Policy::Func::Search searchFunc,
const vector<string> &srcmounts, const vector<string> &srcmounts,
const uint64_t minfreespace, const uint64_t minfreespace,
@ -57,7 +57,7 @@ _readlink(Policy::Func::Search searchFunc,
char *buf, char *buf,
const size_t size) const size_t size)
{ {
int rv;
ssize_t rv;
vector<const string*> basepaths; vector<const string*> basepaths;
rv = searchFunc(srcmounts,fusepath,minfreespace,basepaths); rv = searchFunc(srcmounts,fusepath,minfreespace,basepaths);
@ -71,7 +71,7 @@ namespace mergerfs
{ {
namespace fuse namespace fuse
{ {
int
ssize_t
readlink(const char *fusepath, readlink(const char *fusepath,
char *buf, char *buf,
size_t size) size_t size)

6
src/ugid_rwlock.hpp

@ -48,13 +48,13 @@ namespace mergerfs
if(currentuid != 0) if(currentuid != 0)
{ {
::seteuid(0);
::setegid(0);
(void)::seteuid(0);
(void)::setegid(0);
} }
if(newgid) if(newgid)
{ {
::setegid(newgid);
(void)::setegid(newgid);
initgroups(newuid,newgid); initgroups(newuid,newgid);
} }

24
src/write.cpp

@ -26,7 +26,7 @@
using namespace mergerfs; using namespace mergerfs;
typedef int (*WriteFunc)(const int,const void*,const size_t,const off_t);
typedef ssize_t (*WriteFunc)(const int,const void*,const size_t,const off_t);
static static
bool bool
@ -38,32 +38,30 @@ _out_of_space(const int error)
static static
inline inline
int
ssize_t
_write(const int fd, _write(const int fd,
const void *buf, const void *buf,
const size_t count, const size_t count,
const off_t offset) const off_t offset)
{ {
int rv;
ssize_t rv;
rv = fs::pwrite(fd,buf,count,offset); rv = fs::pwrite(fd,buf,count,offset);
if(rv == -1) if(rv == -1)
return -errno; return -errno;
if(rv == 0)
return 0;
return count;
return rv;
} }
static static
inline inline
int
ssize_t
_write_direct_io(const int fd, _write_direct_io(const int fd,
const void *buf, const void *buf,
const size_t count, const size_t count,
const off_t offset) const off_t offset)
{ {
int rv;
ssize_t rv;
rv = fs::pwrite(fd,buf,count,offset); rv = fs::pwrite(fd,buf,count,offset);
if(rv == -1) if(rv == -1)
@ -81,7 +79,7 @@ namespace mergerfs
{ {
static static
inline inline
int
ssize_t
write(WriteFunc func, write(WriteFunc func,
const char *fusepath, const char *fusepath,
const char *buf, const char *buf,
@ -89,11 +87,11 @@ namespace mergerfs
const off_t offset, const off_t offset,
fuse_file_info *ffi) fuse_file_info *ffi)
{ {
int rv;
ssize_t rv;
FileInfo* fi = reinterpret_cast<FileInfo*>(ffi->fh); FileInfo* fi = reinterpret_cast<FileInfo*>(ffi->fh);
rv = func(fi->fd,buf,count,offset); rv = func(fi->fd,buf,count,offset);
if(_out_of_space(-rv))
if(_out_of_space((int)-rv))
{ {
const fuse_context *fc = fuse_get_context(); const fuse_context *fc = fuse_get_context();
const Config &config = Config::get(fc); const Config &config = Config::get(fc);
@ -114,7 +112,7 @@ namespace mergerfs
return rv; return rv;
} }
int
ssize_t
write(const char *fusepath, write(const char *fusepath,
const char *buf, const char *buf,
size_t count, size_t count,
@ -124,7 +122,7 @@ namespace mergerfs
return write(_write,fusepath,buf,count,offset,ffi); return write(_write,fusepath,buf,count,offset,ffi);
} }
int
ssize_t
write_direct_io(const char *fusepath, write_direct_io(const char *fusepath,
const char *buf, const char *buf,
size_t count, size_t count,

8
src/write_buf.cpp

@ -46,7 +46,7 @@ _out_of_space(const int error)
} }
static static
int
ssize_t
_write_buf(const int fd, _write_buf(const int fd,
fuse_bufvec &src, fuse_bufvec &src,
const off_t offset) const off_t offset)
@ -67,17 +67,17 @@ namespace mergerfs
{ {
namespace fuse namespace fuse
{ {
int
ssize_t
write_buf(const char *fusepath, write_buf(const char *fusepath,
fuse_bufvec *src, fuse_bufvec *src,
off_t offset, off_t offset,
fuse_file_info *ffi) fuse_file_info *ffi)
{ {
int rv;
ssize_t rv;
FileInfo *fi = reinterpret_cast<FileInfo*>(ffi->fh); FileInfo *fi = reinterpret_cast<FileInfo*>(ffi->fh);
rv = _write_buf(fi->fd,*src,offset); rv = _write_buf(fi->fd,*src,offset);
if(_out_of_space(-rv))
if(_out_of_space((int)-rv))
{ {
const fuse_context *fc = fuse_get_context(); const fuse_context *fc = fuse_get_context();
const Config &config = Config::get(fc); const Config &config = Config::get(fc);

Loading…
Cancel
Save