summaryrefslogtreecommitdiffstats
path: root/debian/vendor-h2o/deps/mruby-file-stat/src/file-stat.c
diff options
context:
space:
mode:
Diffstat (limited to 'debian/vendor-h2o/deps/mruby-file-stat/src/file-stat.c')
-rw-r--r--debian/vendor-h2o/deps/mruby-file-stat/src/file-stat.c873
1 files changed, 0 insertions, 873 deletions
diff --git a/debian/vendor-h2o/deps/mruby-file-stat/src/file-stat.c b/debian/vendor-h2o/deps/mruby-file-stat/src/file-stat.c
deleted file mode 100644
index f36ed19..0000000
--- a/debian/vendor-h2o/deps/mruby-file-stat/src/file-stat.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/**
- * original is https://github.com/ruby/ruby/blob/trunk/file.c
- */
-
-#include "mruby.h"
-#include "mruby/string.h"
-#include "mruby/data.h"
-#include "mruby/error.h"
-#include "mruby/class.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-
-#if defined(_WIN32) || defined(_WIN64)
-
-#if !defined S_IXUSR && !defined __MINGW32__
-# define S_IXUSR 0100
-#endif
-#ifndef S_IXGRP
-# define S_IXGRP 0010
-#endif
-#ifndef S_IXOTH
-# define S_IXOTH 0001
-#endif
-
-#else
-#include <unistd.h>
-#endif
-
-#ifndef S_IRUGO
-# define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH)
-#endif
-
-#ifndef S_IWUGO
-# define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH)
-#endif
-
-#ifndef S_IXUGO
-# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
-#endif
-
-#ifndef S_ISLNK
-# ifdef _S_ISLNK
-# define S_ISLNK(m) _S_ISLNK(m)
-# else
-# ifdef _S_IFLNK
-# define S_ISLNK(m) (((m) & S_IFMT) == _S_IFLNK)
-# else
-# ifdef S_IFLNK
-# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-# endif
-# endif
-# endif
-#endif
-
-#ifdef S_IFIFO
-# ifndef S_ISFIFO
-# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-# endif
-#endif
-
-#ifndef S_ISSOCK
-# ifdef _S_ISSOCK
-# define S_ISSOCK(m) _S_ISSOCK(m)
-# else
-# ifdef _S_IFSOCK
-# define S_ISSOCK(m) (((m) & S_IFMT) == _S_IFSOCK)
-# else
-# ifdef S_IFSOCK
-# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
-# endif
-# endif
-# endif
-#endif
-
-#ifndef S_ISBLK
-# ifdef S_IFBLK
-# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-# else
-# define S_ISBLK(m) (0) /* anytime false */
-# endif
-#endif
-
-#ifndef S_ISCHR
-# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-#endif
-
-#ifndef S_ISREG
-# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-#endif
-
-#ifndef S_ISDIR
-# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#endif
-
-#include "config.h"
-
-#define STAT(p,s) stat(p,s)
-#ifdef HAVE_LSTAT
-# define LSTAT(p,s) lstat(p,s)
-#else
-# define LSTAT(p,s) stat(p,s)
-#endif
-#define MRB_MAX_GROUPS (65536)
-
-#if defined(_WIN32) || defined(_WIN64)
-typedef unsigned int uid_t;
-typedef unsigned int gid_t;
-uid_t
-getuid(void)
-{
- return 0;
-}
-uid_t
-geteuid(void)
-{
- return 0;
-}
-gid_t
-getgid(void)
-{
- return 0;
-}
-gid_t
-getegid(void)
-{
- return 0;
-}
-#endif
-#define GETGROUPS_T gid_t
-
-#if defined(S_IXGRP) && !defined(_WIN32) && !defined(__CYGWIN__)
-# define USE_GETEUID 1
-#endif
-
-#ifdef __native_client__
-# undef USE_GETEUID
-#endif
-
-struct mrb_data_type mrb_stat_type = { "File::Stat", mrb_free };
-
-static struct stat *
-mrb_stat_alloc(mrb_state *mrb)
-{
- return (struct stat *)mrb_malloc(mrb, sizeof(struct stat));
-}
-
-static mrb_value
-file_s_lstat(mrb_state *mrb, mrb_value klass)
-{
- struct RClass *file_class;
- struct RClass *stat_class;
- struct stat st, *ptr;
- mrb_value fname, tmp;
- char *path;
-
- mrb_get_args(mrb, "o", &fname);
-
- tmp = mrb_check_convert_type(mrb, fname, MRB_TT_STRING, "String", "to_path");
- if (mrb_nil_p(tmp)) {
- tmp = mrb_convert_type(mrb, fname, MRB_TT_STRING, "String", "to_str");
- }
- path = mrb_str_to_cstr(mrb, tmp);
- if (LSTAT(path, &st) == -1) {
- mrb_sys_fail(mrb, path);
- }
-
- file_class = mrb_class_ptr(klass);
- stat_class = mrb_class_get_under(mrb, file_class, "Stat");
- ptr = mrb_stat_alloc(mrb);
- *ptr = st;
-
- return mrb_obj_value(Data_Wrap_Struct(mrb, stat_class, &mrb_stat_type, ptr));
-}
-
-static mrb_value
-stat_initialize(mrb_state *mrb, mrb_value self)
-{
- struct stat st, *ptr;
- mrb_value fname, tmp;
- char *path;
-
- mrb_get_args(mrb, "o", &fname);
-
- tmp = mrb_check_convert_type(mrb, fname, MRB_TT_STRING, "String", "to_path");
- if (mrb_nil_p(tmp)) {
- tmp = mrb_convert_type(mrb, fname, MRB_TT_STRING, "String", "to_str");
- }
- path = mrb_str_to_cstr(mrb, tmp);
- if (STAT(path, &st) == -1) {
- mrb_sys_fail(mrb, path);
- }
-
- ptr = (struct stat *)DATA_PTR(self);
- if (ptr) {
- mrb_free(mrb, ptr);
- }
-
- ptr = mrb_stat_alloc(mrb);
- *ptr = st;
-
- DATA_TYPE(self) = &mrb_stat_type;
- DATA_PTR(self) = ptr;
-
- return mrb_nil_value();
-}
-
-static mrb_value
-stat_initialize_copy(mrb_state *mrb, mrb_value copy)
-{
- mrb_value orig;
-
- mrb_get_args(mrb, "o", &orig);
-
- if (mrb_obj_equal(mrb, copy, orig)) return copy;
-
- if (!mrb_obj_is_instance_of(mrb, orig, mrb_obj_class(mrb, copy))) {
- mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
- }
-
- if (DATA_PTR(copy)) {
- mrb_free(mrb, DATA_PTR(copy));
- DATA_PTR(copy) = 0;
- }
-
- if (DATA_PTR(orig)) {
- DATA_PTR(copy) = mrb_malloc(mrb, sizeof(struct stat));
- DATA_TYPE(copy) = &mrb_stat_type;
- *(struct stat *)DATA_PTR(copy) = *(struct stat *)DATA_PTR(orig);
- }
- return copy;
-}
-
-static struct stat *
-get_stat(mrb_state *mrb, mrb_value self)
-{
- struct stat *st;
-
- st = (struct stat *)mrb_data_get_ptr(mrb, self, &mrb_stat_type);
- if (!st) mrb_raise(mrb, E_TYPE_ERROR, "uninitialized File::Stat");
- return st;
-}
-
-static mrb_value
-mrb_ll2num(mrb_state *mrb, long long t)
-{
- if (MRB_INT_MIN <= t && t <= MRB_INT_MAX) {
- return mrb_fixnum_value((mrb_int)t);
- } else {
- return mrb_float_value(mrb, (mrb_float)t);
- }
-}
-
-static mrb_value
-io_stat(mrb_state *mrb, mrb_value self)
-{
- struct RClass *file_class;
- struct RClass *stat_class;
- struct stat st, *ptr;
- mrb_value fileno;
-
- if (mrb_respond_to(mrb, self, mrb_intern_lit(mrb, "fileno"))) {
- fileno = mrb_funcall(mrb, self, "fileno", 0);
- }
- else {
- mrb_raise(mrb, E_NOTIMP_ERROR, "`fileno' is not implemented");
- }
-
- if (fstat(mrb_fixnum(fileno), &st) == -1) {
- mrb_sys_fail(mrb, "fstat");
- }
-
- file_class = mrb_class_get(mrb, "File");
- stat_class = mrb_class_get_under(mrb, file_class, "Stat");
- ptr = mrb_stat_alloc(mrb);
- *ptr = st;
-
- return mrb_obj_value(Data_Wrap_Struct(mrb, stat_class, &mrb_stat_type, ptr));
-}
-
-static mrb_value
-stat_dev(mrb_state *mrb, mrb_value self)
-{
- return mrb_fixnum_value(get_stat(mrb, self)->st_dev);
-}
-
-static mrb_value
-stat_dev_major(mrb_state *mrb, mrb_value self)
-{
-#if defined(major)
- return mrb_fixnum_value(major(get_stat(mrb, self)->st_dev));
-#else
- return mrb_nil_value(); // NotImplemented
-#endif
-}
-
-static mrb_value
-stat_dev_minor(mrb_state *mrb, mrb_value self)
-{
-#if defined(minor)
- return mrb_fixnum_value(minor(get_stat(mrb, self)->st_dev));
-#else
- return mrb_nil_value(); // NotImplemented
-#endif
-}
-
-static mrb_value
-stat_ino(mrb_state *mrb, mrb_value self)
-{
- return mrb_ll2num(mrb, get_stat(mrb, self)->st_ino);
-}
-
-static mrb_value
-stat_mode(mrb_state *mrb, mrb_value self)
-{
- return mrb_fixnum_value(get_stat(mrb, self)->st_mode);
-}
-
-static mrb_value
-stat_nlink(mrb_state *mrb, mrb_value self)
-{
- return mrb_fixnum_value(get_stat(mrb, self)->st_nlink);
-}
-
-static mrb_value
-stat_uid(mrb_state *mrb, mrb_value self)
-{
- return mrb_ll2num(mrb, get_stat(mrb, self)->st_uid);
-}
-
-static mrb_value
-stat_gid(mrb_state *mrb, mrb_value self)
-{
- return mrb_ll2num(mrb, get_stat(mrb, self)->st_gid);
-}
-
-static mrb_value
-stat_rdev(mrb_state *mrb, mrb_value self)
-{
- return mrb_fixnum_value(get_stat(mrb, self)->st_rdev);
-}
-
-static mrb_value
-stat_rdev_major(mrb_state *mrb, mrb_value self)
-{
-#if defined(major)
- return mrb_fixnum_value(major(get_stat(mrb, self)->st_rdev));
-#else
- return mrb_nil_value(); // NotImplemented
-#endif
-}
-
-static mrb_value
-stat_rdev_minor(mrb_state *mrb, mrb_value self)
-{
-#if defined(minor)
- return mrb_fixnum_value(minor(get_stat(mrb, self)->st_rdev));
-#else
- return mrb_nil_value(); // NotImplemented
-#endif
-}
-
-static mrb_value
-time_at_with_sec(mrb_state *mrb, long long sec)
-{
- return mrb_funcall(mrb, mrb_obj_value(mrb_class_get(mrb, "Time")), "at", 1, mrb_ll2num(mrb, sec));
-}
-
-static mrb_value
-stat_atime(mrb_state *mrb, mrb_value self)
-{
- return time_at_with_sec(mrb, get_stat(mrb, self)->st_atime);
-}
-
-static mrb_value
-stat_mtime(mrb_state *mrb, mrb_value self)
-{
- return time_at_with_sec(mrb, get_stat(mrb, self)->st_mtime);
-}
-
-static mrb_value
-stat_ctime(mrb_state *mrb, mrb_value self)
-{
- return time_at_with_sec(mrb, get_stat(mrb, self)->st_ctime);
-}
-
-#if defined(HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC)
-static mrb_value
-stat_birthtime(mrb_state *mrb, mrb_value self)
-{
- return time_at_with_sec(mrb, get_stat(mrb, self)->st_birthtimespec.tv_sec);
-}
-# define HAVE_METHOD_BIRTHTIME 1
-#elif defined(_WIN32)
-# define stat_birthtime stat_ctime
-# define HAVE_METHOD_BIRTHTIME 1
-#endif
-
-static mrb_value
-stat_size(mrb_state *mrb, mrb_value self)
-{
- return mrb_ll2num(mrb, get_stat(mrb, self)->st_size);
-}
-
-static mrb_value
-stat_blksize(mrb_state *mrb, mrb_value self)
-{
-#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
- return mrb_fixnum_value(get_stat(mrb, self)->st_blksize);
-#else
- return mrb_nil_value();
-#endif
-}
-
-static mrb_value
-stat_blocks(mrb_state *mrb, mrb_value self)
-{
-#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
- return mrb_ll2num(mrb, get_stat(mrb, self)->st_blocks);
-#else
- return mrb_nil_value();
-#endif
-}
-
-static int
-mrb_group_member(mrb_state *mrb, GETGROUPS_T gid)
-{
-#if defined(_WIN32) || !defined(HAVE_GETGROUPS)
- return FALSE;
-#else
- int rv = FALSE;
- int groups = 16;
- GETGROUPS_T *gary = NULL;
- int anum = -1;
-
- if (getgid() == gid || getegid() == gid)
- return TRUE;
-
- /*
- * On Mac OS X (Mountain Lion), NGROUPS is 16. But libc and kernel
- * accept more larger value.
- * So we don't trunk NGROUPS anymore.
- */
- while (groups <= MRB_MAX_GROUPS) {
- gary = (GETGROUPS_T*)mrb_malloc(mrb, sizeof(GETGROUPS_T) * (unsigned int)groups);
- anum = getgroups(groups, gary);
- if (anum != -1 && anum != groups)
- break;
- groups *= 2;
- if (gary) {
- mrb_free(mrb, gary);
- gary = 0;
- }
- }
- if (anum == -1)
- return FALSE;
-
- while (--anum >= 0) {
- if (gary[anum] == gid) {
- rv = TRUE;
- break;
- }
- }
-
- if (gary) {
- mrb_free(mrb, gary);
- }
- return rv;
-#endif
-}
-
-static mrb_value
-stat_grpowned_p(mrb_state *mrb, mrb_value self)
-{
-#ifndef _WIN32
- if (mrb_group_member(mrb, get_stat(mrb, self)->st_gid)) return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_readable_p(mrb_state *mrb, mrb_value self)
-{
- struct stat *st;
-#ifdef USE_GETEUID
- if (geteuid() == 0)
- return mrb_true_value();
-#endif
- st = get_stat(mrb, self);
-#ifdef S_IRUSR
- if (st->st_uid == geteuid())
- return st->st_mode & S_IRUSR ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IRGRP
- if (mrb_group_member(mrb, st->st_gid))
- return st->st_mode & S_IRGRP ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IROTH
- if (!(st->st_mode & S_IROTH))
- return mrb_false_value();
-#endif
- return mrb_true_value();
-}
-
-static mrb_value
-stat_readable_real_p(mrb_state *mrb, mrb_value self)
-{
- struct stat *st;
-
-#ifdef USE_GETEUID
- if (getuid() == 0)
- return mrb_true_value();
-#endif
- st = get_stat(mrb, self);
-#ifdef S_IRUSR
- if (st->st_uid == getuid())
- return st->st_mode & S_IRUSR ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IRGRP
- if (mrb_group_member(mrb, st->st_gid))
- return st->st_mode & S_IRGRP ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IROTH
- if (!(st->st_mode & S_IROTH)) return mrb_false_value();
-#endif
- return mrb_true_value();
-}
-
-static mrb_value
-stat_world_readable_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_IROTH
- struct stat *st = get_stat(mrb, self);
- if ((st->st_mode & (S_IROTH)) == S_IROTH) {
- return mrb_fixnum_value(st->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
- }
- else {
- return mrb_nil_value();
- }
-#else
- return mrb_nil_value();
-#endif
-}
-
-
-static mrb_value
-stat_writable_p(mrb_state *mrb, mrb_value self)
-{
- struct stat *st;
-
-#ifdef USE_GETEUID
- if (geteuid() == 0)
- return mrb_true_value();
-#endif
- st = get_stat(mrb, self);
-#ifdef S_IWUSR
- if (st->st_uid == geteuid())
- return st->st_mode & S_IWUSR ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IWGRP
- if (mrb_group_member(mrb, st->st_gid))
- return st->st_mode & S_IWGRP ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IWOTH
- if (!(st->st_mode & S_IWOTH))
- return mrb_false_value();
-#endif
- return mrb_true_value();
-}
-
-static mrb_value
-stat_writable_real_p(mrb_state *mrb, mrb_value self)
-{
- struct stat *st;
-
-#ifdef USE_GETEUID
- if (getuid() == 0)
- return mrb_true_value();
-#endif
- st = get_stat(mrb, self);
-#ifdef S_IWUSR
- if (st->st_uid == getuid())
- return st->st_mode & S_IWUSR ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IWGRP
- if (mrb_group_member(mrb, st->st_gid))
- return st->st_mode & S_IWGRP ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IWOTH
- if (!(st->st_mode & S_IWOTH)) return mrb_false_value();
-#endif
- return mrb_true_value();
-}
-
-static mrb_value
-stat_world_writable_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_IROTH
- struct stat *st = get_stat(mrb, self);
- if ((st->st_mode & (S_IROTH)) == S_IROTH) {
- return mrb_fixnum_value(st->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
- }
- else {
- return mrb_nil_value();
- }
-#else
- return mrb_nil_value();
-#endif
-}
-
-static mrb_value
-stat_executable_p(mrb_state *mrb, mrb_value self)
-{
- struct stat *st = get_stat(mrb, self);
-
-#ifdef USE_GETEUID
- if (geteuid() == 0) {
- return st->st_mode & S_IXUGO ? mrb_true_value() : mrb_false_value();
-}
-#endif
-#ifdef S_IXUSR
- if (st->st_uid == geteuid())
- return st->st_mode & S_IXUSR ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IXGRP
- if (mrb_group_member(mrb, st->st_gid))
- return st->st_mode & S_IXGRP ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IXOTH
- if (!(st->st_mode & S_IXOTH))
- return mrb_false_value();
-#endif
- return mrb_true_value();
-}
-
-static mrb_value
-stat_executable_real_p(mrb_state *mrb, mrb_value self)
-{
- struct stat *st = get_stat(mrb, self);
-
-#ifdef USE_GETEUID
- if (getuid() == 0)
- return st->st_mode & S_IXUGO ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IXUSR
- if (st->st_uid == getuid())
- return st->st_mode & S_IXUSR ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IXGRP
- if (mrb_group_member(mrb, st->st_gid))
- return st->st_mode & S_IXGRP ? mrb_true_value() : mrb_false_value();
-#endif
-#ifdef S_IXOTH
- if (!(st->st_mode & S_IXOTH)) return mrb_false_value();
-#endif
- return mrb_true_value();
-}
-
-static mrb_value
-stat_symlink_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_ISLNK
- if (S_ISLNK(get_stat(mrb, self)->st_mode))
- return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_file_p(mrb_state *mrb, mrb_value self)
-{
- if (S_ISREG(get_stat(mrb, self)->st_mode))
- return mrb_true_value();
- return mrb_false_value();
-}
-
-static mrb_value
-stat_directory_p(mrb_state *mrb, mrb_value self)
-{
- if (S_ISDIR(get_stat(mrb, self)->st_mode))
- return mrb_true_value();
- return mrb_false_value();
-}
-
-static mrb_value
-stat_chardev_p(mrb_state *mrb, mrb_value self)
-{
- if (S_ISCHR(get_stat(mrb, self)->st_mode))
- return mrb_true_value();
- return mrb_false_value();
-}
-
-static mrb_value
-stat_blockdev_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_ISBLK
- if (S_ISBLK(get_stat(mrb, self)->st_mode))
- return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_pipe_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_ISFIFO
- if (S_ISFIFO(get_stat(mrb, self)->st_mode))
- return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_socket_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_ISSOCK
- if (S_ISSOCK(get_stat(mrb, self)->st_mode))
- return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_setuid_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_ISUID
- if (get_stat(mrb, self)->st_mode & S_ISUID)
- return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_setgid_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_ISGID
- if (get_stat(mrb, self)->st_mode & S_ISGID)
- return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_sticky_p(mrb_state *mrb, mrb_value self)
-{
-#ifdef S_ISVTX
- if (get_stat(mrb, self)->st_mode & S_ISVTX)
- return mrb_true_value();
-#endif
- return mrb_false_value();
-}
-
-static mrb_value
-stat_ftype(mrb_state *mrb, mrb_value self)
-{
- struct stat *st = get_stat(mrb, self);
- const char *t;
-
- if (S_ISREG(st->st_mode)) {
- t = "file";
- }
- else if (S_ISDIR(st->st_mode)) {
- t = "directory";
- }
- else if (S_ISCHR(st->st_mode)) {
- t = "characterSpecial";
- }
-#ifdef S_ISBLK
- else if (S_ISBLK(st->st_mode)) {
- t = "blockSpecial";
- }
-#endif
-#ifdef S_ISFIFO
- else if (S_ISFIFO(st->st_mode)) {
- t = "fifo";
- }
-#endif
-#ifdef S_ISLNK
- else if (S_ISLNK(st->st_mode)) {
- t = "link";
- }
-#endif
-#ifdef S_ISSOCK
- else if (S_ISSOCK(st->st_mode)) {
- t = "socket";
- }
-#endif
- else {
- t = "unknown";
- }
- return mrb_str_new_static(mrb, t, (size_t)strlen(t));
-}
-
-static mrb_value
-stat_owned_p(mrb_state *mrb, mrb_value self)
-{
- return get_stat(mrb, self)->st_uid == geteuid() ? mrb_true_value() : mrb_false_value();
-}
-
-static mrb_value
-stat_owned_real_p(mrb_state *mrb, mrb_value self)
-{
- return get_stat(mrb, self)->st_uid == getuid() ? mrb_true_value() : mrb_false_value();
-}
-
-void
-mrb_mruby_file_stat_gem_init(mrb_state* mrb)
-{
- struct RClass *io = mrb_define_class(mrb, "IO", mrb->object_class);
- struct RClass *file = mrb_define_class(mrb, "File", io);
- struct RClass *stat = mrb_define_class_under(mrb, file, "Stat", mrb->object_class);
-
- MRB_SET_INSTANCE_TT(stat, MRB_TT_DATA);
-
- mrb_define_method(mrb, io, "stat", io_stat, MRB_ARGS_NONE());
-
- mrb_define_class_method(mrb, file, "lstat", file_s_lstat, MRB_ARGS_REQ(1));
-
- mrb_define_method(mrb, stat, "initialize", stat_initialize, MRB_ARGS_REQ(1));
- mrb_define_method(mrb, stat, "initialize_copy", stat_initialize_copy, MRB_ARGS_REQ(1));
- mrb_define_method(mrb, stat, "dev", stat_dev, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "dev_major", stat_dev_major, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "dev_minor", stat_dev_minor, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "ino", stat_ino, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "mode", stat_mode, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "nlink", stat_nlink, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "uid", stat_uid, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "gid", stat_gid, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "rdev", stat_rdev, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "rdev_major", stat_rdev_major, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "rdev_minor", stat_rdev_minor, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "atime", stat_atime, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "mtime", stat_mtime, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "ctime", stat_ctime, MRB_ARGS_NONE());
-#ifdef HAVE_METHOD_BIRTHTIME
- mrb_define_method(mrb, stat, "birthtime", stat_birthtime, MRB_ARGS_NONE());
-#endif
- mrb_define_method(mrb, stat, "size", stat_size, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "blksize", stat_blksize, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "blocks", stat_blocks, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "grpowned?", stat_grpowned_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "readable?", stat_readable_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "readable_real?", stat_readable_real_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "world_readable?", stat_world_readable_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "writable?", stat_writable_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "writable_real?", stat_writable_real_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "world_writable?", stat_world_writable_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "executable?", stat_executable_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "executable_real?", stat_executable_real_p, MRB_ARGS_NONE());
-
- mrb_define_method(mrb, stat, "symlink?", stat_symlink_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "file?", stat_file_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "directory?", stat_directory_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "chardev?", stat_chardev_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "blockdev?", stat_blockdev_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "pipe?", stat_pipe_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "socket?", stat_socket_p, MRB_ARGS_NONE());
-
- mrb_define_method(mrb, stat, "setuid?", stat_setuid_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "setgid?", stat_setgid_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "sticky?", stat_sticky_p, MRB_ARGS_NONE());
-
- mrb_define_method(mrb, stat, "ftype", stat_ftype, MRB_ARGS_NONE());
-
- mrb_define_method(mrb, stat, "owned?", stat_owned_p, MRB_ARGS_NONE());
- mrb_define_method(mrb, stat, "owned_real?", stat_owned_real_p, MRB_ARGS_NONE());
-}
-
-void
-mrb_mruby_file_stat_gem_final(mrb_state* mrb)
-{
-}