From 352e203266e9ae845aeea139fba670e702c634ed Mon Sep 17 00:00:00 2001 From: ShyamsundarR Date: Tue, 5 Feb 2019 20:44:28 -0500 Subject: api: Update all future API versions to rel-6 As release 6 is branched, all future APIs now become 6.0 This change implements the same. Change-Id: I6db368b4dc8585278ec11d4a411adcd04635de53 Updates: bz#1672818 Signed-off-by: ShyamsundarR (cherry picked from commit ddcb3c7438472072daa6fbe3f3b87067b6d7bc54) --- api/src/gfapi.aliases | 48 ++++++++++++++++++++++++------------------------ api/src/gfapi.map | 6 +++--- api/src/glfs-fops.c | 46 +++++++++++++++++++++++----------------------- api/src/glfs-internal.h | 4 ++-- api/src/glfs.h | 44 +++++++++++++++++++++----------------------- 5 files changed, 73 insertions(+), 75 deletions(-) (limited to 'api') diff --git a/api/src/gfapi.aliases b/api/src/gfapi.aliases index f4f0a2ceaa9..25e2d74e196 100644 --- a/api/src/gfapi.aliases +++ b/api/src/gfapi.aliases @@ -170,27 +170,27 @@ _pub_glfs_h_lease _glfs_h_lease$GFAPI_4.0.0 _pub_glfs_upcall_lease_get_object _glfs_upcall_lease_get_object$GFAPI_4.1.6 _pub_glfs_upcall_lease_get_lease_type _glfs_upcall_lease_get_lease_type$GFAPI_4.1.6 -_priv_glfs_statx _glfs_statx$GFAPI_future -_priv_glfs_iatt_from_statx _glfs_iatt_from_statx$GFAPI_future - -_pub_glfs_read_async _glfs_read_async$GFAPI_future -_pub_glfs_write_async _glfs_write_async$GFAPI_future -_pub_glfs_readv_async _glfs_readv_async$GFAPI_future -_pub_glfs_writev_async _glfs_writev_async$GFAPI_future -_pub_glfs_pread _glfs_pread$GFAPI_future -_pub_glfs_pwrite _glfs_pwrite$GFAPI_future -_pub_glfs_pread_async _glfs_pread_async$GFAPI_future -_pub_glfs_pwrite_async _glfs_pwrite_async$GFAPI_future -_pub_glfs_preadv_async _glfs_preadv_async$GFAPI_future -_pub_glfs_pwritev_async _glfs_pwritev_async$GFAPI_future -_pub_glfs_fsync _glfs_fsync$GFAPI_future -_pub_glfs_fsync_async _glfs_fsync_async$GFAPI_future -_pub_glfs_fdatasync _glfs_fdatasync$GFAPI_future -_pub_glfs_fdatasync_async _glfs_fdatasync_async$GFAPI_future -_pub_glfs_ftruncate _glfs_ftruncate$GFAPI_future -_pub_glfs_ftruncate_async _glfs_ftruncate_async$GFAPI_future -_pub_glfs_discard_async _glfs_discard_async$GFAPI_future -_pub_glfs_zerofill_async _glfs_zerofill_async$GFAPI_future -_pub_glfs_copy_file_range _glfs_copy_file_range$GFAPI_future -_pub_glfs_fsetattr _glfs_fsetattr$GFAPI_future -_pub_glfs_setattr _glfs_setattr$GFAPI_future +_priv_glfs_statx _glfs_statx$GFAPI_6.0 +_priv_glfs_iatt_from_statx _glfs_iatt_from_statx$GFAPI_6.0 + +_pub_glfs_read_async _glfs_read_async$GFAPI_6.0 +_pub_glfs_write_async _glfs_write_async$GFAPI_6.0 +_pub_glfs_readv_async _glfs_readv_async$GFAPI_6.0 +_pub_glfs_writev_async _glfs_writev_async$GFAPI_6.0 +_pub_glfs_pread _glfs_pread$GFAPI_6.0 +_pub_glfs_pwrite _glfs_pwrite$GFAPI_6.0 +_pub_glfs_pread_async _glfs_pread_async$GFAPI_6.0 +_pub_glfs_pwrite_async _glfs_pwrite_async$GFAPI_6.0 +_pub_glfs_preadv_async _glfs_preadv_async$GFAPI_6.0 +_pub_glfs_pwritev_async _glfs_pwritev_async$GFAPI_6.0 +_pub_glfs_fsync _glfs_fsync$GFAPI_6.0 +_pub_glfs_fsync_async _glfs_fsync_async$GFAPI_6.0 +_pub_glfs_fdatasync _glfs_fdatasync$GFAPI_6.0 +_pub_glfs_fdatasync_async _glfs_fdatasync_async$GFAPI_6.0 +_pub_glfs_ftruncate _glfs_ftruncate$GFAPI_6.0 +_pub_glfs_ftruncate_async _glfs_ftruncate_async$GFAPI_6.0 +_pub_glfs_discard_async _glfs_discard_async$GFAPI_6.0 +_pub_glfs_zerofill_async _glfs_zerofill_async$GFAPI_6.0 +_pub_glfs_copy_file_range _glfs_copy_file_range$GFAPI_6.0 +_pub_glfs_fsetattr _glfs_fsetattr$GFAPI_6.0 +_pub_glfs_setattr _glfs_setattr$GFAPI_6.0 diff --git a/api/src/gfapi.map b/api/src/gfapi.map index 5bbbd2b9326..bb201c780ec 100644 --- a/api/src/gfapi.map +++ b/api/src/gfapi.map @@ -236,13 +236,13 @@ GFAPI_4.1.6 { glfs_upcall_lease_get_lease_type; } GFAPI_4.0.0; -GFAPI_PRIVATE_future { +GFAPI_PRIVATE_6.0 { global: glfs_statx; glfs_iatt_from_statx; } GFAPI_4.1.6; -GFAPI_future { +GFAPI_6.0 { global: glfs_read_async; glfs_write_async; @@ -265,5 +265,5 @@ GFAPI_future { glfs_copy_file_range; glfs_setattr; glfs_fsetattr; -} GFAPI_PRIVATE_future; +} GFAPI_PRIVATE_6.0; diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c index c052bae4f90..a7eca82d357 100644 --- a/api/src/glfs-fops.c +++ b/api/src/glfs-fops.c @@ -371,7 +371,7 @@ priv_glfs_iatt_from_statx(struct iatt *iatt, const struct glfs_stat *statx) iatt->ia_attributes = statx->glfs_st_attributes; iatt->ia_attributes_mask = statx->glfs_st_attributes_mask; } -GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_iatt_from_statx, future); +GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_iatt_from_statx, 6.0); int glfs_loc_unlink(loc_t *loc) @@ -675,7 +675,7 @@ invalid_fs: return ret; } -GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_statx, future); +GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_statx, 6.0); int pub_glfs_fstat(struct glfs_fd *glfd, struct stat *stat) @@ -1125,7 +1125,7 @@ pub_glfs_pread(struct glfs_fd *glfd, void *buf, size_t count, off_t offset, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pread, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pread, 6.0); ssize_t pub_glfs_readv(struct glfs_fd *glfd, const struct iovec *iov, int count, @@ -1361,7 +1361,7 @@ pub_glfs_preadv_async(struct glfs_fd *glfd, const struct iovec *iovec, _gf_false, fn, data); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_preadv_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_preadv_async, 6.0); int pub_glfs_read_async34(struct glfs_fd *glfd, void *buf, size_t count, int flags, @@ -1401,7 +1401,7 @@ pub_glfs_read_async(struct glfs_fd *glfd, void *buf, size_t count, int flags, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_read_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_read_async, 6.0); int pub_glfs_pread_async34(struct glfs_fd *glfd, void *buf, size_t count, @@ -1441,7 +1441,7 @@ pub_glfs_pread_async(struct glfs_fd *glfd, void *buf, size_t count, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pread_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pread_async, 6.0); int pub_glfs_readv_async34(struct glfs_fd *glfd, const struct iovec *iov, int count, @@ -1467,7 +1467,7 @@ pub_glfs_readv_async(struct glfs_fd *glfd, const struct iovec *iov, int count, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readv_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readv_async, 6.0); static ssize_t glfs_pwritev_common(struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt, @@ -1707,7 +1707,7 @@ invalid_fs: return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_copy_file_range, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_copy_file_range, 6.0); ssize_t pub_glfs_pwritev(struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt, @@ -1786,7 +1786,7 @@ pub_glfs_pwrite(struct glfs_fd *glfd, const void *buf, size_t count, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwrite, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwrite, 6.0); extern glfs_t * pub_glfs_from_glfd(glfs_fd_t *); @@ -1926,7 +1926,7 @@ pub_glfs_pwritev_async(struct glfs_fd *glfd, const struct iovec *iovec, _gf_false, fn, data); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwritev_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwritev_async, 6.0); int pub_glfs_write_async34(struct glfs_fd *glfd, const void *buf, size_t count, @@ -1966,7 +1966,7 @@ pub_glfs_write_async(struct glfs_fd *glfd, const void *buf, size_t count, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_write_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_write_async, 6.0); int pub_glfs_pwrite_async34(struct glfs_fd *glfd, const void *buf, int count, @@ -2006,7 +2006,7 @@ pub_glfs_pwrite_async(struct glfs_fd *glfd, const void *buf, int count, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwrite_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwrite_async, 6.0); int pub_glfs_writev_async34(struct glfs_fd *glfd, const struct iovec *iov, @@ -2032,7 +2032,7 @@ pub_glfs_writev_async(struct glfs_fd *glfd, const struct iovec *iov, int count, return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_writev_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_writev_async, 6.0); static int glfs_fsync_common(struct glfs_fd *glfd, struct glfs_stat *prestat, @@ -2113,7 +2113,7 @@ pub_glfs_fsync(struct glfs_fd *glfd, struct glfs_stat *prestat, return glfs_fsync_common(glfd, prestat, poststat); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsync, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsync, 6.0); static int glfs_fsync_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this, @@ -2229,7 +2229,7 @@ invalid_fs: return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsync_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsync_async, 6.0); static int glfs_fdatasync_common(struct glfs_fd *glfd, struct glfs_stat *prestat, @@ -2310,7 +2310,7 @@ pub_glfs_fdatasync(struct glfs_fd *glfd, struct glfs_stat *prestat, return glfs_fdatasync_common(glfd, prestat, poststat); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fdatasync, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fdatasync, 6.0); int pub_glfs_fdatasync_async34(struct glfs_fd *glfd, glfs_io_cbk34 fn, void *data) @@ -2346,7 +2346,7 @@ invalid_fs: return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fdatasync_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fdatasync_async, 6.0); static int glfs_ftruncate_common(struct glfs_fd *glfd, off_t offset, @@ -2428,7 +2428,7 @@ pub_glfs_ftruncate(struct glfs_fd *glfd, off_t offset, return glfs_ftruncate_common(glfd, offset, prestat, poststat); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_ftruncate, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_ftruncate, 6.0); int pub_glfs_truncate(struct glfs *fs, const char *path, off_t length) @@ -2586,7 +2586,7 @@ pub_glfs_ftruncate_async(struct glfs_fd *glfd, off_t offset, glfs_io_cbk fn, return glfs_ftruncate_async_common(glfd, offset, _gf_false, fn, data); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_ftruncate_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_ftruncate_async, 6.0); int pub_glfs_access(struct glfs *fs, const char *path, int mode) @@ -3505,7 +3505,7 @@ pub_glfs_discard_async(struct glfs_fd *glfd, off_t offset, size_t len, return glfs_discard_async_common(glfd, offset, len, _gf_false, fn, data); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_discard_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_discard_async, 6.0); static int glfs_zerofill_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this, @@ -3616,7 +3616,7 @@ pub_glfs_zerofill_async(struct glfs_fd *glfd, off_t offset, off_t len, return glfs_zerofill_async_common(glfd, offset, len, _gf_false, fn, data); } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_zerofill_async, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_zerofill_async, 6.0); void gf_dirent_to_dirent(gf_dirent_t *gf_dirent, struct dirent *dirent) @@ -3971,7 +3971,7 @@ invalid_fs: return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setattr, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setattr, 6.0); int pub_glfs_fsetattr(struct glfs_fd *glfd, struct stat *stat, int valid) @@ -4024,7 +4024,7 @@ invalid_fs: return ret; } -GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsetattr, future); +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsetattr, 6.0); int pub_glfs_chmod(struct glfs *fs, const char *path, mode_t mode) diff --git a/api/src/glfs-internal.h b/api/src/glfs-internal.h index 6ab28fffe55..40bbb8a9834 100644 --- a/api/src/glfs-internal.h +++ b/api/src/glfs-internal.h @@ -696,10 +696,10 @@ unset_fop_attr(dict_t **fop_attr); int glfs_statx(struct glfs *fs, const char *path, unsigned int mask, - struct glfs_stat *statxbuf) GFAPI_PRIVATE(glfs_statx, future); + struct glfs_stat *statxbuf) GFAPI_PRIVATE(glfs_statx, 6.0); void glfs_iatt_from_statx(struct iatt *, const struct glfs_stat *) - GFAPI_PRIVATE(glfs_iatt_from_statx, future); + GFAPI_PRIVATE(glfs_iatt_from_statx, 6.0); #endif /* !_GLFS_INTERNAL_H */ diff --git a/api/src/glfs.h b/api/src/glfs.h index 9f6075669c0..852e4aeae20 100644 --- a/api/src/glfs.h +++ b/api/src/glfs.h @@ -680,12 +680,12 @@ glfs_write(glfs_fd_t *fd, const void *buf, size_t count, int flags) __THROW int glfs_read_async(glfs_fd_t *fd, void *buf, size_t count, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_read_async, future); + GFAPI_PUBLIC(glfs_read_async, 6.0); int glfs_write_async(glfs_fd_t *fd, const void *buf, size_t count, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_write_async, future); + GFAPI_PUBLIC(glfs_write_async, 6.0); // glfs_{read,write}v[_async] @@ -700,34 +700,33 @@ glfs_writev(glfs_fd_t *fd, const struct iovec *iov, int iovcnt, int glfs_readv_async(glfs_fd_t *fd, const struct iovec *iov, int count, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_readv_async, future); + GFAPI_PUBLIC(glfs_readv_async, 6.0); int glfs_writev_async(glfs_fd_t *fd, const struct iovec *iov, int count, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_writev_async, future); + GFAPI_PUBLIC(glfs_writev_async, 6.0); // glfs_p{read,write}[_async] ssize_t glfs_pread(glfs_fd_t *fd, void *buf, size_t count, off_t offset, int flags, - struct glfs_stat *poststat) __THROW GFAPI_PUBLIC(glfs_pread, future); + struct glfs_stat *poststat) __THROW GFAPI_PUBLIC(glfs_pread, 6.0); ssize_t glfs_pwrite(glfs_fd_t *fd, const void *buf, size_t count, off_t offset, int flags, struct glfs_stat *prestat, - struct glfs_stat *poststat) __THROW - GFAPI_PUBLIC(glfs_pwrite, future); + struct glfs_stat *poststat) __THROW GFAPI_PUBLIC(glfs_pwrite, 6.0); int glfs_pread_async(glfs_fd_t *fd, void *buf, size_t count, off_t offset, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_pread_async, future); + GFAPI_PUBLIC(glfs_pread_async, 6.0); int glfs_pwrite_async(glfs_fd_t *fd, const void *buf, int count, off_t offset, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_pwrite_async, future); + GFAPI_PUBLIC(glfs_pwrite_async, 6.0); // glfs_p{read,write}v[_async] @@ -742,12 +741,12 @@ glfs_pwritev(glfs_fd_t *fd, const struct iovec *iov, int iovcnt, off_t offset, int glfs_preadv_async(glfs_fd_t *fd, const struct iovec *iov, int count, off_t offset, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_preadv_async, future); + GFAPI_PUBLIC(glfs_preadv_async, 6.0); int glfs_pwritev_async(glfs_fd_t *fd, const struct iovec *iov, int count, off_t offset, int flags, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_pwritev_async, future); + GFAPI_PUBLIC(glfs_pwritev_async, 6.0); off_t glfs_lseek(glfs_fd_t *fd, off_t offset, int whence) __THROW @@ -759,7 +758,7 @@ glfs_copy_file_range(struct glfs_fd *glfd_in, off64_t *off_in, unsigned int flags, struct glfs_stat *statbuf, struct glfs_stat *prestat, struct glfs_stat *poststat) __THROW - GFAPI_PUBLIC(glfs_copy_file_range, future); + GFAPI_PUBLIC(glfs_copy_file_range, 6.0); int glfs_truncate(glfs_t *fs, const char *path, off_t length) __THROW @@ -768,12 +767,12 @@ glfs_truncate(glfs_t *fs, const char *path, off_t length) __THROW int glfs_ftruncate(glfs_fd_t *fd, off_t length, struct glfs_stat *prestat, struct glfs_stat *poststat) __THROW - GFAPI_PUBLIC(glfs_ftruncate, future); + GFAPI_PUBLIC(glfs_ftruncate, 6.0); int glfs_ftruncate_async(glfs_fd_t *fd, off_t length, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_ftruncate_async, future); + GFAPI_PUBLIC(glfs_ftruncate_async, 6.0); int glfs_lstat(glfs_t *fs, const char *path, struct stat *buf) __THROW @@ -789,20 +788,20 @@ glfs_fstat(glfs_fd_t *fd, struct stat *buf) __THROW int glfs_fsync(glfs_fd_t *fd, struct glfs_stat *prestat, - struct glfs_stat *poststat) __THROW GFAPI_PUBLIC(glfs_fsync, future); + struct glfs_stat *poststat) __THROW GFAPI_PUBLIC(glfs_fsync, 6.0); int glfs_fsync_async(glfs_fd_t *fd, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_fsync_async, future); + GFAPI_PUBLIC(glfs_fsync_async, 6.0); int glfs_fdatasync(glfs_fd_t *fd, struct glfs_stat *prestat, struct glfs_stat *poststat) __THROW - GFAPI_PUBLIC(glfs_fdatasync, future); + GFAPI_PUBLIC(glfs_fdatasync, 6.0); int glfs_fdatasync_async(glfs_fd_t *fd, glfs_io_cbk fn, void *data) __THROW - GFAPI_PUBLIC(glfs_fdatasync_async, future); + GFAPI_PUBLIC(glfs_fdatasync_async, 6.0); int glfs_access(glfs_t *fs, const char *path, int mode) __THROW @@ -984,7 +983,7 @@ glfs_discard(glfs_fd_t *fd, off_t offset, size_t len) __THROW int glfs_discard_async(glfs_fd_t *fd, off_t length, size_t lent, glfs_io_cbk fn, - void *data) __THROW GFAPI_PUBLIC(glfs_discard_async, future); + void *data) __THROW GFAPI_PUBLIC(glfs_discard_async, 6.0); int glfs_zerofill(glfs_fd_t *fd, off_t offset, off_t len) __THROW @@ -992,8 +991,7 @@ glfs_zerofill(glfs_fd_t *fd, off_t offset, off_t len) __THROW int glfs_zerofill_async(glfs_fd_t *fd, off_t length, off_t len, glfs_io_cbk fn, - void *data) __THROW - GFAPI_PUBLIC(glfs_zerofill_async, future); + void *data) __THROW GFAPI_PUBLIC(glfs_zerofill_async, 6.0); char * glfs_getcwd(glfs_t *fs, char *buf, size_t size) __THROW @@ -1449,11 +1447,11 @@ glfs_lease(glfs_fd_t *glfd, glfs_lease_t *lease, glfs_recall_cbk fn, int glfs_fsetattr(struct glfs_fd *glfd, struct stat *stat, int valid) __THROW - GFAPI_PUBLIC(glfs_fsetattr, future); + GFAPI_PUBLIC(glfs_fsetattr, 6.0); int glfs_setattr(struct glfs *fs, const char *path, struct stat *stat, int valid, - int follow) __THROW GFAPI_PUBLIC(glfs_setattr, future); + int follow) __THROW GFAPI_PUBLIC(glfs_setattr, 6.0); __END_DECLS #endif /* !_GLFS_H */ -- cgit