18
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
#ifndef DRIZZLED_INTERNAL_MY_SYS_H
22
#define DRIZZLED_INTERNAL_MY_SYS_H
32
#include "drizzled/internal/my_pthread.h"
34
#include "drizzled/charset_info.h" /* for CHARSET_INFO */
25
#define my_errno (errno)
27
#include <mysys/my_pthread.h>
29
#include <mystrings/m_ctype.h> /* for CHARSET_INFO */
35
30
#include <stdarg.h>
36
#include "drizzled/typelib.h"
37
#include "drizzled/internal/aio_result.h"
39
#include "drizzled/memory/root.h"
40
#include "drizzled/error.h"
42
#ifndef errno /* did we already get it? */
43
#ifdef HAVE_ERRNO_AS_DEFINE
44
#include <errno.h> /* errno is a define */
46
extern int errno; /* declare errno */
48
#endif /* #ifndef errno */
50
#include <drizzled/dynamic_array.h>
54
#include "drizzled/qsort_cmp.h"
65
#define MAP_NORESERVE 0 /* For irix and AIX */
69
EDQUOT is used only in 3 C files only in mysys/. If it does not exist on
70
system, we set it to some value which can never happen.
31
#include <mysys/typelib.h>
32
#include <mysys/aio_result.h>
34
#include <mysys/my_alloc.h>
76
36
/* Sun Studio does not inject this into main namespace yet */
77
37
#if defined(__cplusplus)
81
#define MY_INIT(name); { ::drizzled::internal::my_progname= name; ::drizzled::internal::my_init(); }
41
#define MY_INIT(name); { my_progname= name; my_init(); }
43
/* Max width of screen (for error messages) */
44
#define SC_MAXWIDTH 256
45
#define ERRMSGSIZE (SC_MAXWIDTH) /* Max length of a error message */
46
#define NRERRBUFFS (2) /* Buffers for parameters */
47
#define MY_FILE_ERROR ((size_t) -1)
84
49
/* General bitmaps for my_func's */
85
50
#define MY_FFNF 1 /* Fatal if file not found */
95
60
#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */
96
61
#define MY_COPYTIME 64 /* my_redel() copys time */
97
62
#define MY_DELETE_OLD 256 /* my_create_with_symlink() */
63
#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */
98
64
#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */
99
65
#define MY_REDEL_MAKE_BACKUP 256
100
66
#define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */
67
#define MY_ZEROFILL 32 /* my_multi_malloc(), fill array with zero */
101
68
#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */
102
69
#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
71
#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
72
#define MY_GIVE_INFO 2 /* Give time info about process*/
74
#define MY_REMOVE_NONE 0 /* Params for modify_defaults_file */
75
#define MY_REMOVE_OPTION 1
76
#define MY_REMOVE_SECTION 2
78
#define ME_HIGHBYTE 8 /* Shift for colours */
79
#define ME_NOCUR 1 /* Don't use curses message */
104
80
#define ME_OLDWIN 2 /* Use old window */
105
81
#define ME_BELL 4 /* Ring bell then printing message */
106
82
#define ME_HOLDTANG 8 /* Don't delete last keys */
83
#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */
107
84
#define ME_WAITTANG 32 /* Wait for a user action */
108
85
#define ME_NOREFRESH 64 /* Dont refresh screen */
109
86
#define ME_NOINPUT 128 /* Dont use the input libary */
87
#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */
88
#define ME_COLOUR2 ((2 << ME_HIGHBYTE))
89
#define ME_COLOUR3 ((3 << ME_HIGHBYTE))
90
#define ME_FATALERROR 1024 /* Fatal statement error */
111
92
/* Bits in last argument to fn_format */
112
93
#define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */
113
94
#define MY_REPLACE_EXT 2 /* replace extension with 'ext' */
114
95
#define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */
96
#define MY_PACK_FILENAME 8 /* Pack name (home -> ~) */
115
97
#define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */
116
98
#define MY_RETURN_REAL_PATH 32 /* return full path for file */
117
99
#define MY_SAFE_PATH 64 /* Return NULL if too long path */
135
121
#define GETDATE_GMT 8
136
122
#define GETDATE_FIXEDLENGTH 16
139
typedef uint64_t my_off_t;
124
/* defines when allocating data */
125
#define my_checkmalloc()
127
#define TERMINATE(A,B) {}
133
typedef int (*qsort_cmp)(const void *,const void *);
134
typedef int (*qsort_cmp2)(void*, const void *,const void *);
141
136
#define TRASH(A,B) /* nothing */
138
#ifndef errno /* did we already get it? */
139
#ifdef HAVE_ERRNO_AS_DEFINE
140
#include <errno.h> /* errno is a define */
142
extern int errno; /* declare errno */
144
#endif /* #ifndef errno */
145
extern char errbuff[NRERRBUFFS][ERRMSGSIZE];
143
146
extern char *home_dir; /* Home directory for user */
144
147
extern const char *my_progname; /* program-name (printed in errors) */
148
typedef void (*error_handler_func)(uint32_t my_err, const char *str,myf MyFlags);
149
extern error_handler_func error_handler_hook;
145
150
extern uint32_t my_file_limit;
153
extern const CHARSET_INFO *default_charset_info;
154
extern CHARSET_INFO *all_charsets[256];
155
extern CHARSET_INFO compiled_charsets[];
158
extern uint32_t my_file_opened,my_stream_opened, my_tmp_file_created;
159
extern uint32_t my_file_total_opened;
148
160
extern uint mysys_usage_id;
149
161
extern bool my_init_done;
163
typedef void (*void_ptr_func)(void);
164
typedef void (*void_ptr_int_func)(int);
166
/* Point to current my_message() */
167
extern void_ptr_func my_sigtstp_cleanup,
168
/* Executed before jump to shell */
170
extern void_ptr_int_func my_abort_hook;
151
171
/* Executed when comming from shell */
152
172
extern int my_umask, /* Default creation mask */
236
301
int handle_default_option(void *in_ctx, const char *group_name,
237
302
const char *option);
304
#include <mysys/my_alloc.h>
241
307
/* Prototypes for mysys and my_func functions */
243
309
extern int my_copy(const char *from,const char *to,myf MyFlags);
244
310
extern int my_delete(const char *name,myf MyFlags);
245
extern int my_open(const char *FileName,int Flags,myf MyFlags);
246
extern int my_register_filename(int fd, const char *FileName,
311
extern File my_open(const char *FileName,int Flags,myf MyFlags);
312
extern File my_register_filename(File fd, const char *FileName,
313
enum file_type type_of_file,
247
314
uint32_t error_message_number, myf MyFlags);
248
extern int my_create(const char *FileName,int CreateFlags,
315
extern File my_create(const char *FileName,int CreateFlags,
249
316
int AccessFlags, myf MyFlags);
250
extern int my_close(int Filedes,myf MyFlags);
317
extern int my_close(File Filedes,myf MyFlags);
318
extern File my_dup(File file, myf MyFlags);
251
319
extern int my_mkdir(const char *dir, int Flags, myf MyFlags);
320
extern int my_readlink(char *to, const char *filename, myf MyFlags);
252
321
extern int my_realpath(char *to, const char *filename, myf MyFlags);
253
extern int my_create_with_symlink(const char *linkname, const char *filename,
322
extern File my_create_with_symlink(const char *linkname, const char *filename,
254
323
int createflags, int access_flags,
256
325
extern int my_delete_with_symlink(const char *name, myf MyFlags);
257
326
extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags);
258
extern size_t my_read(int Filedes,unsigned char *Buffer,size_t Count,myf MyFlags);
327
extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
328
extern size_t my_read(File Filedes,unsigned char *Buffer,size_t Count,myf MyFlags);
259
329
extern int my_rename(const char *from,const char *to,myf MyFlags);
260
extern size_t my_write(int Filedes,const unsigned char *Buffer,size_t Count,
330
extern size_t my_write(File Filedes,const unsigned char *Buffer,size_t Count,
332
extern void * my_multi_malloc (myf MyFlags, ...);
262
333
extern int _sanity(const char *sFile, uint32_t uLine);
335
#define my_access access
264
336
extern int check_if_legal_filename(const char *path);
265
337
extern int check_if_legal_tablename(const char *path);
267
339
#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags))
269
extern int my_sync(int fd, myf my_flags);
342
extern void TERMINATE(FILE *file, uint32_t flag);
344
extern void init_glob_errs(void);
345
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
346
extern int my_fclose(FILE *fd,myf MyFlags);
347
extern int my_sync(File fd, myf my_flags);
270
348
extern int my_sync_dir(const char *dir_name, myf my_flags);
271
349
extern int my_sync_dir_by_file(const char *file_name, myf my_flags);
350
extern void my_error(int nr,myf MyFlags, ...);
351
extern void my_printf_error(uint32_t my_err, const char *format,
353
__attribute__((format(printf, 2, 4)));
354
extern int my_error_register(const char **errmsgs, int first, int last);
355
extern const char **my_error_unregister(int first, int last);
356
extern void my_message(uint32_t my_err, const char *str,myf MyFlags);
357
extern void my_message_no_curses(uint32_t my_err, const char *str,myf MyFlags);
272
358
extern bool my_init(void);
273
extern void my_end(void);
359
extern void my_end(int infoflag);
274
360
extern int my_redel(const char *from, const char *to, int MyFlags);
275
361
extern int my_copystat(const char *from, const char *to, int MyFlags);
276
extern char * my_filename(int fd);
362
extern char * my_filename(File fd);
365
void my_print_open_files(void);
367
#define my_print_open_files()
278
370
extern void my_remember_signal(int signal_number,void (*func)(int));
279
371
extern size_t dirname_part(char * to,const char *name, size_t *to_res_length);
280
372
extern size_t dirname_length(const char *name);
281
373
#define base_name(A) (A+dirname_length(A))
282
bool test_if_hard_path(const char *dir_name);
374
static inline bool test_if_hard_path(const char *dir_name)
376
if (dir_name[0] == FN_HOMELIB && dir_name[1] == FN_LIBCHAR)
377
return (home_dir != NULL && test_if_hard_path(home_dir));
378
if (dir_name[0] == FN_LIBCHAR)
381
} /* test_if_hard_path */
284
383
extern char *convert_dirname(char *to, const char *from, const char *from_end);
285
384
extern char * fn_ext(const char *name);
323
427
extern qsort2_cmp get_ptr_compare(size_t);
324
428
void my_store_ptr(unsigned char *buff, size_t pack_length, my_off_t pos);
325
429
my_off_t my_get_ptr(unsigned char *ptr, size_t pack_length);
326
int create_temp_file(char *to, const char *dir, const char *pfx, myf MyFlags);
430
File create_temp_file(char *to, const char *dir, const char *pfx,
431
int mode, myf MyFlags);
432
#define my_init_dynamic_array(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D)
433
#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D)
434
#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E)
435
#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E)
436
extern bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint32_t element_size,
437
void *init_buffer, uint32_t init_alloc,
438
uint32_t alloc_increment);
439
/* init_dynamic_array() function is deprecated */
440
extern bool init_dynamic_array(DYNAMIC_ARRAY *array,uint32_t element_size,
441
uint32_t init_alloc,uint32_t alloc_increment);
442
extern bool insert_dynamic(DYNAMIC_ARRAY *array,unsigned char * element);
443
extern unsigned char *alloc_dynamic(DYNAMIC_ARRAY *array);
444
extern unsigned char *pop_dynamic(DYNAMIC_ARRAY*);
445
extern bool set_dynamic(DYNAMIC_ARRAY *array,unsigned char * element,uint32_t array_index);
446
extern bool allocate_dynamic(DYNAMIC_ARRAY *array, uint32_t max_elements);
447
extern void get_dynamic(DYNAMIC_ARRAY *array,unsigned char * element,uint32_t array_index);
448
extern void delete_dynamic(DYNAMIC_ARRAY *array);
449
extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint32_t array_index);
450
extern void freeze_size(DYNAMIC_ARRAY *array);
451
extern int get_index_dynamic(DYNAMIC_ARRAY *array, unsigned char * element);
452
#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element)
453
#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index))
454
#define push_dynamic(A,B) insert_dynamic((A),(B))
455
#define reset_dynamic(array) ((array)->elements= 0)
456
#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp))
458
#define alloc_root_inited(A) ((A)->min_malloc != 0)
459
#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8)
460
#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0)
328
461
extern int get_defaults_options(int argc, char **argv,
329
462
char **defaults, char **extra_defaults,
330
463
char **group_suffix);
331
464
extern int load_defaults(const char *conf_file, const char **groups,
332
465
int *argc, char ***argv);
466
extern int modify_defaults_file(const char *file_location, const char *option,
467
const char *option_value,
468
const char *section_name, int remove_option);
333
469
extern int my_search_option_files(const char *conf_file, int *argc,
334
470
char ***argv, uint32_t *args_used,
335
471
Process_option_func func, void *func_ctx);
339
475
extern ha_checksum my_checksum(ha_checksum crc, const unsigned char *mem,
341
477
extern void my_sleep(uint32_t m_seconds);
478
extern uint64_t my_set_max_open_files(uint64_t files);
479
void my_free_open_file_info(void);
481
extern uint64_t my_getsystime(void);
482
extern uint64_t my_micro_time(void);
483
extern uint64_t my_micro_time_and_time(time_t *time_arg);
484
time_t my_time_possible_from_micro(uint64_t microtime);
486
#ifdef HAVE_SYS_MMAN_H
487
#include <sys/mman.h>
492
#ifndef MAP_NORESERVE
493
#define MAP_NORESERVE 0 /* For irix and AIX */
497
#define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f)
499
#define my_mmap(a,b,c,d,e,f) mmap(a,b,c,d,e,f)
501
#define my_munmap(a,b) munmap((a),(b))
504
/* not a complete set of mmap() flags, but only those that nesessary */
507
#define MAP_NORESERVE 0
508
#define MAP_SHARED 0x0001
509
#define MAP_PRIVATE 0x0002
510
#define MAP_NOSYNC 0x0800
511
#define MAP_FAILED ((void *)-1)
512
#define MS_SYNC 0x0000
515
void *my_mmap(void *, size_t, int, int, int, my_off_t);
516
int my_munmap(void *, size_t);
520
void *cs_alloc(size_t size);
522
extern uint32_t get_charset_number(const char *cs_name, uint32_t cs_flags);
523
extern uint32_t get_collation_number(const char *name);
524
extern const char *get_charset_name(uint32_t cs_number);
526
extern const CHARSET_INFO *get_charset(uint32_t cs_number);
527
extern const CHARSET_INFO *get_charset_by_name(const char *cs_name);
528
extern const CHARSET_INFO *get_charset_by_csname(const char *cs_name, uint32_t cs_flags);
530
extern bool resolve_charset(const char *cs_name,
531
const CHARSET_INFO *default_cs,
532
const CHARSET_INFO **cs);
533
extern bool resolve_collation(const char *cl_name,
534
const CHARSET_INFO *default_cl,
535
const CHARSET_INFO **cl);
537
extern void free_charsets(void);
538
extern char *get_charsets_dir(char *buf);
539
extern bool my_charset_same(const CHARSET_INFO *cs1, const CHARSET_INFO *cs2);
540
extern bool init_compiled_charsets(myf flags);
541
extern void add_compiled_collation(CHARSET_INFO *cs);
542
extern size_t escape_string_for_drizzle(const CHARSET_INFO *charset_info,
543
char *to, size_t to_length,
544
const char *from, size_t length);
545
extern size_t escape_quotes_for_drizzle(const CHARSET_INFO *charset_info,
546
char *to, size_t to_length,
547
const char *from, size_t length);
345
549
extern void thd_increment_bytes_sent(uint32_t length);
346
550
extern void thd_increment_bytes_received(uint32_t length);
347
551
extern void thd_increment_net_big_packet_count(uint32_t length);
349
} /* namespace internal */
350
} /* namespace drizzled */
352
#endif /* DRIZZLED_INTERNAL_MY_SYS_H */
557
#endif /* _my_sys_h */