void initgroups(const uid_t uid, const gid_t gid) { static __thread gid_t_cache cache; gid_t_vector &gidlist = cache[uid]; if(gidlist.empty()) prime_cache(uid,gid,gidlist); setgroups(gidlist); }
static ssize_t cprime_pread( vfs_handle_struct * handle, files_struct * fsp, int fd, void * data, size_t count, SMB_OFF_T offset) { if (g_readbuf) { prime_cache(handle, fsp, fd, offset, count); } return SMB_VFS_NEXT_PREAD(handle, fsp, fd, data, count, offset); }
static ssize_t cprime_sendfile( struct vfs_handle_struct * handle, int tofd, files_struct * fsp, int fromfd, const DATA_BLOB * header, SMB_OFF_T offset, size_t count) { if (g_readbuf && offset == 0) { prime_cache(handle, fsp, fromfd, offset, count); } return SMB_VFS_NEXT_SENDFILE(handle, tofd, fsp, fromfd, header, offset, count); }
static ssize_t cprime_read( vfs_handle_struct * handle, files_struct * fsp, int fd, void * data, size_t count) { SMB_OFF_T offset; offset = SMB_VFS_LSEEK(fsp, fd, 0, SEEK_CUR); if (offset >= 0 && g_readbuf) { prime_cache(handle, fsp, fd, offset, count); SMB_VFS_LSEEK(fsp, fd, offset, SEEK_SET); } return SMB_VFS_NEXT_READ(handle, fsp, fd, data, count); }