1/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; version 2 of the License.
6
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 GNU General Public License for more details.
11
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software
14 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
15
16#ifndef MY_DIR_H
17#define MY_DIR_H
18
19#include <sys/stat.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25 /* Defines for my_dir and my_stat */
26
27#define MY_S_IFMT S_IFMT /* type of file */
28#define MY_S_IFDIR S_IFDIR /* directory */
29#define MY_S_IFCHR S_IFCHR /* character special */
30#define MY_S_IFBLK S_IFBLK /* block special */
31#define MY_S_IFREG S_IFREG /* regular */
32#define MY_S_IFIFO S_IFIFO /* fifo */
33#define MY_S_ISUID S_ISUID /* set user id on execution */
34#define MY_S_ISGID S_ISGID /* set group id on execution */
35#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */
36
37#ifndef S_IREAD
38#define MY_S_IREAD S_IRUSR /* read permission, owner */
39#define MY_S_IWRITE S_IWUSR /* write permission, owner */
40#define MY_S_IEXEC S_IXUSR /* execute/search permission, owner */
41#else
42#define MY_S_IREAD S_IREAD /* read permission, owner */
43#define MY_S_IWRITE S_IWRITE /* write permission, owner */
44#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */
45#endif
46
47#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR)
48#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR)
49#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK)
50#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG)
51#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO)
52
53/* Ensure these doesn't clash with anything in my_sys.h */
54#define MY_WANT_SORT 8192 /* my_lib; sort files */
55#define MY_WANT_STAT 16384 /* my_lib; stat files */
56#define MY_DONT_SORT 0
57
58 /* typedefs for my_dir & my_stat */
59
60#ifdef USE_MY_STAT_STRUCT
61
62typedef struct my_stat
63{
64 dev_t st_dev; /* major & minor device numbers */
65 ino_t st_ino; /* inode number */
66 ushort st_mode; /* file permissions (& suid sgid .. bits) */
67 short st_nlink; /* number of links to file */
68 ushort st_uid; /* user id */
69 ushort st_gid; /* group id */
70 dev_t st_rdev; /* more major & minor device numbers (???) */
71 off_t st_size; /* size of file */
72 time_t st_atime; /* time for last read */
73 time_t st_mtime; /* time for last contens modify */
74 time_t st_ctime; /* time for last inode or contents modify */
75} MY_STAT;
76
77#else
78
79#if defined(_MSC_VER)
80#define MY_STAT struct _stati64 /* 64 bit file size */
81#else
82#define MY_STAT struct stat /* Original struct has what we need */
83#endif
84
85#endif /* USE_MY_STAT_STRUCT */
86
87/* Struct describing one file returned from my_dir */
88typedef struct fileinfo
89{
90 char *name;
91 MY_STAT *mystat;
92} FILEINFO;
93
94typedef struct st_my_dir /* Struct returned from my_dir */
95{
96 /*
97 These members are just copies of parts of DYNAMIC_ARRAY structure,
98 which is allocated right after the end of MY_DIR structure (MEM_ROOT
99 for storing names is also resides there). We've left them here because
100 we don't want to change code that uses my_dir.
101 */
102 struct fileinfo *dir_entry;
103 uint number_of_files;
104} MY_DIR;
105
106extern MY_DIR *my_dir(const char *path,myf MyFlags);
107extern void my_dirend(MY_DIR *buffer);
108extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags);
109extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags);
110
111#ifdef __cplusplus
112}
113#endif
114
115#endif /* MY_DIR_H */
116
117