63
56
#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */
64
57
#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */
65
58
#define MY_REDEL_MAKE_BACKUP 256
59
#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */
66
60
#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 */
61
#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */
62
#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */
63
#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */
64
#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */
68
65
#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */
69
66
#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
133
135
typedef int (*qsort_cmp)(const void *,const void *);
134
136
typedef int (*qsort_cmp2)(void*, const void *,const void *);
138
extern void *my_malloc(size_t Size,myf MyFlags);
139
#define my_malloc_ci(SZ,FLAG) my_malloc( SZ, FLAG )
140
extern void *my_realloc(void *oldpoint, size_t Size, myf MyFlags);
141
extern void my_no_flags_free(void *ptr);
142
extern void *my_memdup(const void *from,size_t length,myf MyFlags);
143
extern char *my_strdup(const char *from,myf MyFlags);
144
extern char *my_strndup(const char *from, size_t length,
146
#define CALLER_INFO_PROTO /* nothing */
147
#define CALLER_INFO /* nothing */
148
#define ORIG_CALLER_INFO /* nothing */
136
149
#define TRASH(A,B) /* nothing */
152
#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca)
153
#define alloca __builtin_alloca
155
#define my_alloca(SZ) malloc((size_t) (SZ))
156
#define my_afree(PTR) free((PTR))
158
#define my_alloca(SZ) malloc((SZ))
159
#define my_afree(PTR) free((PTR))
160
#endif /* HAVE_ALLOCA */
138
162
#ifndef errno /* did we already get it? */
139
163
#ifdef HAVE_ERRNO_AS_DEFINE
140
164
#include <errno.h> /* errno is a define */
145
169
extern char errbuff[NRERRBUFFS][ERRMSGSIZE];
146
170
extern char *home_dir; /* Home directory for user */
147
171
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;
150
extern error_handler_func fatal_error_handler_hook;
172
extern void (*error_handler_hook)(uint32_t my_err, const char *str,myf MyFlags);
173
extern void (*fatal_error_handler_hook)(uint32_t my_err, const char *str,
151
175
extern uint32_t my_file_limit;
176
extern uint32_t my_thread_stack_size;
154
179
extern const CHARSET_INFO *default_charset_info;
161
186
extern uint mysys_usage_id;
162
187
extern bool my_init_done;
164
typedef void (*void_ptr_func)(void);
165
typedef void (*void_ptr_int_func)(int);
167
189
/* Point to current my_message() */
168
extern void_ptr_func my_sigtstp_cleanup,
190
extern void (*my_sigtstp_cleanup)(void),
169
191
/* Executed before jump to shell */
171
extern void_ptr_int_func my_abort_hook;
192
(*my_sigtstp_restart)(void),
193
(*my_abort_hook)(int);
172
194
/* Executed when comming from shell */
173
195
extern int my_umask, /* Default creation mask */
240
265
typedef struct st_dynamic_array
242
267
unsigned char *buffer;
243
size_t elements,max_element;
268
uint32_t elements,max_element;
244
269
uint32_t alloc_increment;
245
270
uint32_t size_of_element;
273
typedef struct st_my_tmpdir
275
DYNAMIC_ARRAY full_list;
278
pthread_mutex_t mutex;
249
282
typedef int (*qsort2_cmp)(const void *, const void *, const void *);
310
340
extern int my_copy(const char *from,const char *to,myf MyFlags);
311
341
extern int my_delete(const char *name,myf MyFlags);
342
extern int my_getwd(char * buf,size_t size,myf MyFlags);
343
extern int my_setwd(const char *dir,myf MyFlags);
344
extern void *my_once_alloc(size_t Size,myf MyFlags);
345
extern void my_once_free(void);
346
extern char *my_once_strdup(const char *src,myf myflags);
347
extern void *my_once_memdup(const void *src, size_t len, myf myflags);
312
348
extern File my_open(const char *FileName,int Flags,myf MyFlags);
313
349
extern File my_register_filename(File fd, const char *FileName,
314
350
enum file_type type_of_file,
328
364
extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
329
365
extern size_t my_read(File Filedes,unsigned char *Buffer,size_t Count,myf MyFlags);
330
366
extern int my_rename(const char *from,const char *to,myf MyFlags);
367
extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags);
368
extern my_off_t my_tell(File fd,myf MyFlags);
331
369
extern size_t my_write(File Filedes,const unsigned char *Buffer,size_t Count,
371
extern size_t my_fwrite(FILE *stream,const unsigned char *Buffer,size_t Count,
373
extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags);
374
extern void *_mymalloc(size_t uSize,const char *sFile,
375
uint32_t uLine, myf MyFlag);
376
extern void *_myrealloc(void *pPtr,size_t uSize,const char *sFile,
377
uint32_t uLine, myf MyFlag);
333
378
extern void * my_multi_malloc (myf MyFlags, ...);
379
extern void _myfree(void *pPtr, const char *sFile, uint32_t uLine, myf MyFlag);
334
380
extern int _sanity(const char *sFile, uint32_t uLine);
381
extern void *_my_memdup(const void *from, size_t length,
382
const char *sFile, uint32_t uLine,myf MyFlag);
383
extern char * _my_strdup(const char *from, const char *sFile, uint32_t uLine,
385
extern char *_my_strndup(const char *from, size_t length,
386
const char *sFile, uint32_t uLine,
336
389
#define my_access access
337
390
extern int check_if_legal_filename(const char *path);
368
421
#define my_print_open_files()
424
extern bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist);
425
extern char *my_tmpdir(MY_TMPDIR *tmpdir);
426
extern void free_tmpdir(MY_TMPDIR *tmpdir);
371
428
extern void my_remember_signal(int signal_number,RETSIGTYPE (*func)(int));
372
429
extern size_t dirname_part(char * to,const char *name, size_t *to_res_length);
373
430
extern size_t dirname_length(const char *name);
374
431
#define base_name(A) (A+dirname_length(A))
375
bool test_if_hard_path(const char *dir_name);
432
extern int test_if_hard_path(const char *dir_name);
433
extern bool has_path(const char *name);
376
434
extern char *convert_dirname(char *to, const char *from, const char *from_end);
377
435
extern void to_unix_path(char * name);
378
436
extern char * fn_ext(const char *name);
426
484
my_off_t my_get_ptr(unsigned char *ptr, size_t pack_length);
427
485
File create_temp_file(char *to, const char *dir, const char *pfx,
428
486
int mode, myf MyFlags);
429
#define my_init_dynamic_array(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D)
430
#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D)
431
#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E)
432
#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E)
487
#define my_init_dynamic_array(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D CALLER_INFO)
488
#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D ORIG_CALLER_INFO)
489
#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E CALLER_INFO)
490
#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E ORIG_CALLER_INFO)
433
491
extern bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint32_t element_size,
434
void *init_buffer, uint32_t init_alloc,
435
uint32_t alloc_increment);
492
void *init_buffer, uint32_t init_alloc,
493
uint32_t alloc_increment
436
495
/* init_dynamic_array() function is deprecated */
437
496
extern bool init_dynamic_array(DYNAMIC_ARRAY *array,uint32_t element_size,
438
uint32_t init_alloc,uint32_t alloc_increment);
497
uint32_t init_alloc,uint32_t alloc_increment
439
499
extern bool insert_dynamic(DYNAMIC_ARRAY *array,unsigned char * element);
440
500
extern unsigned char *alloc_dynamic(DYNAMIC_ARRAY *array);
441
501
extern unsigned char *pop_dynamic(DYNAMIC_ARRAY*);
452
512
#define reset_dynamic(array) ((array)->elements= 0)
453
513
#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp))
515
#define my_malloc_lock(A,B) my_malloc((A),(B))
455
516
#define alloc_root_inited(A) ((A)->min_malloc != 0)
456
517
#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8)
457
518
#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0)
475
536
extern uint32_t my_set_max_open_files(uint32_t files);
476
537
void my_free_open_file_info(void);
539
extern time_t my_time(myf flags);
478
540
extern uint64_t my_getsystime(void);
479
541
extern uint64_t my_micro_time(void);
480
542
extern uint64_t my_micro_time_and_time(time_t *time_arg);
481
543
time_t my_time_possible_from_micro(uint64_t microtime);
544
extern bool my_gethwaddr(unsigned char *to);
483
546
#ifdef HAVE_SYS_MMAN_H
484
547
#include <sys/mman.h>