diff options
Diffstat (limited to 'libglusterfs/src/xlator.h')
-rw-r--r-- | libglusterfs/src/xlator.h | 842 |
1 files changed, 842 insertions, 0 deletions
diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h new file mode 100644 index 00000000000..eadc9fd1a6f --- /dev/null +++ b/libglusterfs/src/xlator.h @@ -0,0 +1,842 @@ +/* + Copyright (c) 2006, 2007, 2008 Z RESEARCH, Inc. <http://www.zresearch.com> + This file is part of GlusterFS. + + GlusterFS 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. + + GlusterFS 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 _XLATOR_H +#define _XLATOR_H + +#ifndef _CONFIG_H +#define _CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdint.h> +#include <inttypes.h> + + +#include "glusterfs.h" +#include "logging.h" +#include "common-utils.h" +#include "dict.h" +#include "compat.h" +#include "list.h" + +#define FIRST_CHILD(xl) (xl->children->xlator) + +struct _xlator; +typedef struct _xlator xlator_t; +struct _dir_entry_t; +typedef struct _dir_entry_t dir_entry_t; +struct _gf_dirent_t; +typedef struct _gf_dirent_t gf_dirent_t; +struct _loc; +typedef struct _loc loc_t; + + +typedef int32_t (*event_notify_fn_t) (xlator_t *this, + int32_t event, + void *data, + ...); + +#include "list.h" +#include "gf-dirent.h" +#include "stack.h" +#include "inode.h" +#include "fd.h" + +struct _loc { + const char *path; + const char *name; + ino_t ino; + inode_t *inode; + inode_t *parent; +}; + + +struct xlator_stats { + uint64_t nr_files; /* Number of files open via this xlator */ + uint64_t free_disk; /* Mega bytes */ + uint64_t total_disk_size; /* Mega Bytes */ + uint64_t disk_usage; /* Mega bytes */ + uint64_t disk_speed; /* MHz or Mbps */ + uint64_t nr_clients; /* Number of client nodes */ + uint64_t write_usage; + uint64_t read_usage; /* add more stats here */ +}; + + + +typedef int32_t (*mop_stats_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct xlator_stats *stats); + +typedef int32_t (*mop_getspec_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + char *spec_data); + +typedef int32_t (*fop_checksum_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + uint8_t *file_checksum, + uint8_t *dir_checksum); + +typedef int32_t (*mop_setvolume_t) (call_frame_t *frame, + xlator_t *this, + const char *volume); + +typedef int32_t (*mop_stats_t) (call_frame_t *frame, + xlator_t *this, + int32_t flags); + +typedef int32_t (*mop_getspec_t) (call_frame_t *frame, + xlator_t *this, + const char *key, + int32_t flag); + +typedef int32_t (*fop_checksum_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + int32_t flag); + +struct xlator_mops { + mop_stats_t stats; + mop_getspec_t getspec; + + mop_stats_cbk_t stats_cbk; + mop_getspec_cbk_t getspec_cbk; +}; + + +typedef int32_t (*fop_lookup_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + inode_t *inode, + struct stat *buf, + dict_t *xattr); + +typedef int32_t (*fop_stat_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_fstat_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_chmod_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_fchmod_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_chown_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_fchown_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_truncate_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_ftruncate_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_utimens_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_access_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_readlink_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + const char *path); + +typedef int32_t (*fop_mknod_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + inode_t *inode, + struct stat *buf); + +typedef int32_t (*fop_mkdir_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + inode_t *inode, + struct stat *buf); + +typedef int32_t (*fop_unlink_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_rmdir_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_symlink_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + inode_t *inode, + struct stat *buf); + +typedef int32_t (*fop_rename_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *buf); + +typedef int32_t (*fop_link_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + inode_t *inode, + struct stat *buf); + +typedef int32_t (*fop_create_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + fd_t *fd, + inode_t *inode, + struct stat *buf); + +typedef int32_t (*fop_open_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + fd_t *fd); + +typedef int32_t (*fop_readv_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct iovec *vector, + int32_t count, + struct stat *stbuf); + +typedef int32_t (*fop_writev_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *stbuf); + +typedef int32_t (*fop_flush_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_fsync_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_opendir_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + fd_t *fd); + +typedef int32_t (*fop_getdents_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + dir_entry_t *entries, + int32_t count); + +typedef int32_t (*fop_fsyncdir_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_statfs_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct statvfs *buf); + +typedef int32_t (*fop_setxattr_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_getxattr_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + dict_t *dict); + +typedef int32_t (*fop_removexattr_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_lk_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct flock *flock); + +typedef int32_t (*fop_inodelk_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_finodelk_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_entrylk_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_fentrylk_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_setdents_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno); + +typedef int32_t (*fop_readdir_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + gf_dirent_t *entries); + +typedef int32_t (*fop_xattrop_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + dict_t *xattr); + +typedef int32_t (*fop_fxattrop_cbk_t) (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + dict_t *xattr); + +typedef int32_t (*fop_lookup_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + dict_t *xattr_req); + +typedef int32_t (*fop_stat_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc); + +typedef int32_t (*fop_fstat_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd); + +typedef int32_t (*fop_chmod_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + mode_t mode); + +typedef int32_t (*fop_fchmod_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + mode_t mode); + +typedef int32_t (*fop_chown_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + uid_t uid, + gid_t gid); + +typedef int32_t (*fop_fchown_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + uid_t uid, + gid_t gid); + +typedef int32_t (*fop_truncate_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + off_t offset); + +typedef int32_t (*fop_ftruncate_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + off_t offset); + +typedef int32_t (*fop_utimens_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + struct timespec tv[2]); + +typedef int32_t (*fop_access_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + int32_t mask); + +typedef int32_t (*fop_readlink_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + size_t size); + +typedef int32_t (*fop_mknod_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + mode_t mode, + dev_t rdev); + +typedef int32_t (*fop_mkdir_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + mode_t mode); + +typedef int32_t (*fop_unlink_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc); + +typedef int32_t (*fop_rmdir_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc); + +typedef int32_t (*fop_symlink_t) (call_frame_t *frame, + xlator_t *this, + const char *linkname, + loc_t *loc); + +typedef int32_t (*fop_rename_t) (call_frame_t *frame, + xlator_t *this, + loc_t *oldloc, + loc_t *newloc); + +typedef int32_t (*fop_link_t) (call_frame_t *frame, + xlator_t *this, + loc_t *oldloc, + loc_t *newloc); + +typedef int32_t (*fop_create_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + int32_t flags, + mode_t mode, + fd_t *fd); + +typedef int32_t (*fop_open_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + int32_t flags, + fd_t *fd); + +typedef int32_t (*fop_readv_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + size_t size, + off_t offset); + +typedef int32_t (*fop_writev_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + struct iovec *vector, + int32_t count, + off_t offset); + +typedef int32_t (*fop_flush_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd); + +typedef int32_t (*fop_fsync_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + int32_t datasync); + +typedef int32_t (*fop_opendir_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + fd_t *fd); + +typedef int32_t (*fop_getdents_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + size_t size, + off_t offset, + int32_t flag); + +typedef int32_t (*fop_fsyncdir_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + int32_t datasync); + +typedef int32_t (*fop_statfs_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc); + +typedef int32_t (*fop_setxattr_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + dict_t *dict, + int32_t flags); + +typedef int32_t (*fop_getxattr_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + const char *name); + +typedef int32_t (*fop_removexattr_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + const char *name); + +typedef int32_t (*fop_lk_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + int32_t cmd, + struct flock *flock); + +typedef int32_t (*fop_inodelk_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + int32_t cmd, + struct flock *flock); + +typedef int32_t (*fop_finodelk_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + int32_t cmd, + struct flock *flock); + +typedef int32_t (*fop_entrylk_t) (call_frame_t *frame, + xlator_t *this, loc_t *loc, + const char *basename, entrylk_cmd cmd, + entrylk_type type); + +typedef int32_t (*fop_fentrylk_t) (call_frame_t *frame, + xlator_t *this, fd_t *fd, + const char *basename, entrylk_cmd cmd, + entrylk_type type); + +typedef int32_t (*fop_setdents_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + int32_t flags, + dir_entry_t *entries, + int32_t count); + +typedef int32_t (*fop_readdir_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + size_t size, + off_t offset); + +typedef int32_t (*fop_xattrop_t) (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + gf_xattrop_flags_t optype, + dict_t *xattr); + +typedef int32_t (*fop_fxattrop_t) (call_frame_t *frame, + xlator_t *this, + fd_t *fd, + gf_xattrop_flags_t optype, + dict_t *xattr); + +struct xlator_fops { + fop_lookup_t lookup; + fop_stat_t stat; + fop_fstat_t fstat; + fop_chmod_t chmod; + fop_fchmod_t fchmod; + fop_chown_t chown; + fop_fchown_t fchown; + fop_truncate_t truncate; + fop_ftruncate_t ftruncate; + fop_utimens_t utimens; + fop_access_t access; + fop_readlink_t readlink; + fop_mknod_t mknod; + fop_mkdir_t mkdir; + fop_unlink_t unlink; + fop_rmdir_t rmdir; + fop_symlink_t symlink; + fop_rename_t rename; + fop_link_t link; + fop_create_t create; + fop_open_t open; + fop_readv_t readv; + fop_writev_t writev; + fop_flush_t flush; + fop_fsync_t fsync; + fop_opendir_t opendir; + fop_readdir_t readdir; + fop_fsyncdir_t fsyncdir; + fop_statfs_t statfs; + fop_setxattr_t setxattr; + fop_getxattr_t getxattr; + fop_removexattr_t removexattr; + fop_lk_t lk; + fop_inodelk_t inodelk; + fop_finodelk_t finodelk; + fop_entrylk_t entrylk; + fop_fentrylk_t fentrylk; + fop_setdents_t setdents; + fop_getdents_t getdents; + fop_checksum_t checksum; + fop_xattrop_t xattrop; + fop_fxattrop_t fxattrop; + + /* these entries are used for a typechecking hack in STACK_WIND _only_ */ + fop_lookup_cbk_t lookup_cbk; + fop_stat_cbk_t stat_cbk; + fop_fstat_cbk_t fstat_cbk; + fop_chmod_cbk_t chmod_cbk; + fop_fchmod_cbk_t fchmod_cbk; + fop_chown_cbk_t chown_cbk; + fop_fchown_cbk_t fchown_cbk; + fop_truncate_cbk_t truncate_cbk; + fop_ftruncate_cbk_t ftruncate_cbk; + fop_utimens_cbk_t utimens_cbk; + fop_access_cbk_t access_cbk; + fop_readlink_cbk_t readlink_cbk; + fop_mknod_cbk_t mknod_cbk; + fop_mkdir_cbk_t mkdir_cbk; + fop_unlink_cbk_t unlink_cbk; + fop_rmdir_cbk_t rmdir_cbk; + fop_symlink_cbk_t symlink_cbk; + fop_rename_cbk_t rename_cbk; + fop_link_cbk_t link_cbk; + fop_create_cbk_t create_cbk; + fop_open_cbk_t open_cbk; + fop_readv_cbk_t readv_cbk; + fop_writev_cbk_t writev_cbk; + fop_flush_cbk_t flush_cbk; + fop_fsync_cbk_t fsync_cbk; + fop_opendir_cbk_t opendir_cbk; + fop_readdir_cbk_t readdir_cbk; + fop_fsyncdir_cbk_t fsyncdir_cbk; + fop_statfs_cbk_t statfs_cbk; + fop_setxattr_cbk_t setxattr_cbk; + fop_getxattr_cbk_t getxattr_cbk; + fop_removexattr_cbk_t removexattr_cbk; + fop_lk_cbk_t lk_cbk; + fop_inodelk_cbk_t inodelk_cbk; + fop_finodelk_cbk_t finodelk_cbk; + fop_entrylk_cbk_t entrylk_cbk; + fop_fentrylk_cbk_t fentrylk_cbk; + fop_setdents_cbk_t setdents_cbk; + fop_getdents_cbk_t getdents_cbk; + fop_checksum_cbk_t checksum_cbk; + fop_xattrop_cbk_t xattrop_cbk; + fop_fxattrop_cbk_t fxattrop_cbk; +}; + +typedef int32_t (*cbk_forget_t) (xlator_t *this, + inode_t *inode); + +typedef int32_t (*cbk_release_t) (xlator_t *this, + fd_t *fd); + +struct xlator_cbks { + cbk_forget_t forget; + cbk_release_t release; + cbk_release_t releasedir; +}; + +typedef struct xlator_list { + xlator_t *xlator; + struct xlator_list *next; +} xlator_list_t; + +/* Add possible new type of option you may need */ +typedef enum { + GF_OPTION_TYPE_ANY = 0, + GF_OPTION_TYPE_STR, + GF_OPTION_TYPE_INT, + GF_OPTION_TYPE_SIZET, + GF_OPTION_TYPE_PERCENT, + GF_OPTION_TYPE_BOOL, + GF_OPTION_TYPE_XLATOR, + GF_OPTION_TYPE_PATH, + GF_OPTION_TYPE_TIME, +} volume_option_type_t; + +#define ZR_VOLUME_MAX_NUM_KEY 4 +#define ZR_OPTION_MAX_ARRAY_SIZE 64 + +/* Each translator should define this structure */ +typedef struct volume_options { + char *key[ZR_VOLUME_MAX_NUM_KEY]; + /* different key, same meaning */ + volume_option_type_t type; + int64_t min; /* -1 means no range */ + int64_t max; /* -1 means no range */ + char *value[ZR_OPTION_MAX_ARRAY_SIZE]; + /* If specified, will check for one of + the value from this array */ + char *description; /* about the key */ +} volume_option_t; + +typedef struct vol_opt_list { + struct list_head list; + volume_option_t *given_opt; +} volume_opt_list_t; + +struct _xlator { + /* Built during parsing */ + char *name; + char *type; + xlator_t *next; + xlator_t *prev; + xlator_list_t *parents; + xlator_list_t *children; + dict_t *options; + + /* Set after doing dlopen() */ + struct xlator_fops *fops; + struct xlator_mops *mops; + struct xlator_cbks *cbks; + struct list_head volume_options; /* list of volume_option_t */ + + void (*fini) (xlator_t *this); + int32_t (*init) (xlator_t *this); + event_notify_fn_t notify; + + /* Misc */ + glusterfs_ctx_t *ctx; + inode_table_t *itable; + char ready; + char trace; + char init_succeeded; + void *private; +}; + +int validate_xlator_volume_options (xlator_t *xl, volume_option_t *opt); + +int32_t xlator_set_type (xlator_t *xl, const char *type); + +xlator_t *file_to_xlator_tree (glusterfs_ctx_t *ctx, + FILE *fp); + + +int32_t xlator_tree_init (xlator_t *xl); +int32_t xlator_tree_free (xlator_t *xl); + +void xlator_tree_fini (xlator_t *xl); + +void xlator_foreach (xlator_t *this, + void (*fn) (xlator_t *each, + void *data), + void *data); + +xlator_t *xlator_search_by_name (xlator_t *any, const char *name); + +void inode_destroy_notify (inode_t *inode, const char *xlname); + +int loc_copy (loc_t *dst, loc_t *src); +#define loc_dup(src, dst) loc_copy(dst, src) +void loc_wipe (loc_t *loc); + +#define GF_STAT_PRINT_FMT_STR "%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32",%"PRIx32"\n" + +#define GF_STAT_SCAN_FMT_STR "%"SCNx64",%"SCNx64",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx64",%"SCNx64",%"SCNx32",%"SCNx64",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32",%"SCNx32"\n" + +#define GF_STATFS_PRINT_FMT_STR "%"PRIx32",%"PRIx32",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx64",%"PRIx32",%"PRIx32",%"PRIx32"\n" + +#define GF_STATFS_SCAN_FMT_STR "%"SCNx32",%"SCNx32",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx64",%"SCNx32",%"SCNx32",%"SCNx32"\n" + +#endif /* _XLATOR_H */ + |