static struct fs_quota_mountpoint *fs_quota_mountpoint_get(const char *dir) { struct fs_quota_mountpoint *mount; struct mountpoint point; int ret; ret = mountpoint_get(dir, default_pool, &point); if (ret <= 0) return NULL; mount = i_new(struct fs_quota_mountpoint, 1); mount->refcount = 1; mount->device_path = point.device_path; mount->mount_path = point.mount_path; mount->type = point.type; mount->block_size = point.block_size; #ifdef FS_QUOTA_SOLARIS mount->fd = -1; #endif if (mount_type_is_nfs(mount)) { if (strchr(mount->device_path, ':') == NULL) { i_error("quota-fs: %s is not a valid NFS device path", mount->device_path); fs_quota_mountpoint_free(mount); return NULL; } } return mount; }
static const char *filesystem_get(const char *mail_location) { struct mountpoint mp; const char *path; path = strchr(mail_location, ':'); if (path == NULL) path = mail_location; else path = t_strcut(path + 1, ':'); if (*path == '~') { /* we don't know where users' home dirs are */ return ""; } path = t_strcut(path, '%'); if (strlen(path) <= 1) return ""; /* all in all it seems we can support only /<path>/%u style location */ if (mountpoint_get(path, pool_datastack_create(), &mp) < 0) return ""; return mp.type == NULL ? "" : mp.type; }