Drizzled Public API Documentation

my_sys.h
1 /* - mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3  *
4  * Copyright (C) 2008 MySQL
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #pragma once
22 
23 #ifdef __cplusplus
24 # include <cstdio>
25 #else
26 # include <stdio.h>
27 #endif
28 
29 #include <errno.h>
30 #include <sys/types.h>
31 
32 #include <drizzled/definitions.h>
33 #include <drizzled/internal/my_pthread.h>
34 
35 #include <stdarg.h>
36 
37 #ifndef errno /* did we already get it? */
38 #ifdef HAVE_ERRNO_AS_DEFINE
39 #include <errno.h> /* errno is a define */
40 #else
41 extern int errno; /* declare errno */
42 #endif
43 #endif /* #ifndef errno */
44 
45 #ifdef HAVE_SYS_MMAN_H
46 #include <sys/mman.h>
47 #endif
48 
49 #include <drizzled/qsort_cmp.h>
50 
51 #include <drizzled/visibility.h>
52 
53 namespace drizzled {
54 namespace internal {
55 
56 #ifndef MAP_NOSYNC
57 #define MAP_NOSYNC 0
58 #endif
59 #ifndef MAP_NORESERVE
60 #define MAP_NORESERVE 0 /* For irix and AIX */
61 #endif
62 
63 /*
64  EDQUOT is used only in 3 C files only in mysys/. If it does not exist on
65  system, we set it to some value which can never happen.
66 */
67 #ifndef EDQUOT
68 #define EDQUOT (-1)
69 #endif
70 
71  /* General bitmaps for my_func's */
72 #define MY_FFNF 1 /* Fatal if file not found */
73 #define MY_FNABP 2 /* Fatal if not all bytes read/writen */
74 #define MY_NABP 4 /* Error if not all bytes read/writen */
75 #define MY_FAE 8 /* Fatal if any error */
76 #define MY_WME 16 /* Write message on error */
77 #define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */
78 #define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */
79 #define MY_SYNC_DIR 1024 /* my_create/delete/rename: sync directory */
80 #define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */
81 #define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */
82 #define MY_LINK_WARNING 32 /* my_redel() gives warning if links */
83 #define MY_COPYTIME 64 /* my_redel() copys time */
84 #define MY_DELETE_OLD 256 /* my_create_with_symlink() */
85 #define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */
86 #define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */
87 #define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */
88 #define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
89 
90 #define ME_OLDWIN 2 /* Use old window */
91 #define ME_BELL 4 /* Ring bell then printing message */
92 #define ME_WAITTANG 32 /* Wait for a user action */
93 #define ME_NOREFRESH 64 /* Dont refresh screen */
94 #define ME_NOINPUT 128 /* Dont use the input libary */
95 
96  /* Bits in last argument to fn_format */
97 #define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */
98 #define MY_REPLACE_EXT 2 /* replace extension with 'ext' */
99 #define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */
100 #define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */
101 #define MY_RETURN_REAL_PATH 32 /* return full path for file */
102 #define MY_SAFE_PATH 64 /* Return NULL if too long path */
103 #define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */
104 #define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/
105 
106 typedef uint64_t my_off_t;
107 
108 extern char *home_dir; /* Home directory for user */
109 extern const char *my_progname; /* program-name (printed in errors) */
110 
111 extern DRIZZLED_API int my_umask, /* Default creation mask */
112  my_umask_dir;
113 extern bool my_use_symdir;
114 
115 extern uint32_t my_default_record_cache_size;
116 extern bool my_disable_symlinks;
117 extern const char wild_many, wild_one, wild_prefix;
118 extern const char *charsets_dir;
119 
120 extern bool timed_mutexes;
121 
122 enum cache_type
123 {
124  TYPE_NOT_SET= 0,
125  READ_CACHE,
126  WRITE_CACHE,
127  READ_FIFO,
128  READ_NET,
129  WRITE_NET
130 };
131 
132 typedef struct record_cache /* Used when cacheing records */
133 {
134 public:
135  int file;
136  int rc_seek,error,inited;
137  uint rc_length,read_length,reclength;
138  my_off_t rc_record_pos,end_of_file;
139  unsigned char *rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos;
140  enum cache_type type;
141 
142  record_cache():
143  file(0),
144  rc_seek(0),
145  error(0),
146  inited(0),
147  rc_length(0),
148  read_length(0),
149  reclength(0),
150  rc_record_pos(0),
151  end_of_file(0),
152  rc_buff(NULL),
153  rc_buff2(NULL),
154  rc_pos(NULL),
155  rc_end(NULL),
156  rc_request_pos(NULL)
157  {}
158 
159 } RECORD_CACHE;
160 
161 /* Prototypes for mysys and my_func functions */
162 
163 extern int my_copy(const char *from,const char *to,myf MyFlags);
164 DRIZZLED_API int my_delete(const char *name,myf MyFlags);
165 DRIZZLED_API int my_open(const char *FileName,int Flags,myf MyFlags);
166 extern int my_register_filename(int fd, const char *FileName, uint32_t error_message_number, myf MyFlags);
167 DRIZZLED_API int my_create(const char *FileName,int CreateFlags, int AccessFlags, myf MyFlags);
168 DRIZZLED_API int my_close(int Filedes,myf MyFlags);
169 extern int my_mkdir(const char *dir, int Flags, myf MyFlags);
170 extern int my_realpath(char *to, const char *filename, myf MyFlags);
171 extern int my_create_with_symlink(const char *linkname, const char *filename,
172  int createflags, int access_flags, myf MyFlags);
173 DRIZZLED_API int my_delete_with_symlink(const char *name, myf MyFlags);
174 extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags);
175 DRIZZLED_API size_t my_read(int Filedes,unsigned char *Buffer,size_t Count,myf MyFlags);
176 DRIZZLED_API int my_rename(const char *from, const char *to,myf MyFlags);
177 DRIZZLED_API size_t my_write(int Filedes, const unsigned char *Buffer, size_t Count, myf MyFlags);
178 
179 extern int check_if_legal_tablename(const char *path);
180 
181 DRIZZLED_API int my_sync(int fd, myf my_flags);
182 extern int my_sync_dir(const char *dir_name, myf my_flags);
183 extern int my_sync_dir_by_file(const char *file_name, myf my_flags);
184 extern void my_init();
185 extern void my_end();
186 extern int my_redel(const char *from, const char *to, int MyFlags);
187 extern int my_copystat(const char *from, const char *to, int MyFlags);
188 
189 extern void my_remember_signal(int signal_number,void (*func)(int));
190 extern size_t dirname_part(char * to,const char *name, size_t *to_res_length);
191 extern size_t dirname_length(const char *name);
192 #define base_name(A) (A+dirname_length(A))
193 bool test_if_hard_path(const char *dir_name);
194 
195 extern char *convert_dirname(char *to, const char *from, const char *from_end);
196 extern char * fn_ext(const char *name);
197 extern char * fn_same(char * toname,const char *name,int flag);
198 DRIZZLED_API char * fn_format(char * to,const char *name,const char *dir, const char *form, uint32_t flag);
199 extern size_t unpack_dirname(char * to,const char *from);
200 extern size_t unpack_filename(char * to,const char *from);
201 extern char * intern_filename(char * to,const char *from);
202 extern int pack_filename(char * to, const char *name, size_t max_length);
203 extern char * my_load_path(char * to, const char *path, const char *own_path_prefix);
204 extern void my_string_ptr_sort(unsigned char *base,uint32_t items,size_t size);
205 extern void radixsort_for_str_ptr(unsigned char* base[], uint32_t number_of_elements, size_t size_of_element,unsigned char *buffer[]);
206 extern void my_qsort(void *base_ptr, size_t total_elems, size_t size, qsort_cmp cmp);
207 extern void my_qsort2(void *base_ptr, size_t total_elems, size_t size, qsort2_cmp cmp, void *cmp_argument);
208 extern qsort2_cmp get_ptr_compare(size_t);
209 DRIZZLED_API void my_store_ptr(unsigned char *buff, size_t pack_length, my_off_t pos);
210 DRIZZLED_API my_off_t my_get_ptr(unsigned char *ptr, size_t pack_length);
211 int create_temp_file(char *to, const char *dir, const char *pfx, myf MyFlags);
212 
213 } /* namespace internal */
214 } /* namespace drizzled */
#define DRIZZLED_API
Definition: visibility.h:62
Visibility Control Macros.
int(* qsort_cmp)(const void *, const void *)
Definition: qsort_cmp.h:26