144
142
extern char *my_strdup(const char *from,myf MyFlags);
145
143
extern char *my_strndup(const char *from, size_t length,
145
/* we do use FG (as a no-op) in below so that a typo on FG is caught */
146
#define my_free(PTR,FG) ((void)FG,my_no_flags_free(PTR))
147
147
#define CALLER_INFO_PROTO /* nothing */
148
148
#define CALLER_INFO /* nothing */
149
149
#define ORIG_CALLER_INFO /* nothing */
150
150
#define TRASH(A,B) /* nothing */
152
153
#ifdef HAVE_ALLOCA
153
154
#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca)
154
155
#define alloca __builtin_alloca
155
156
#endif /* GNUC */
156
#define my_alloca(SZ) malloc((size_t) (SZ))
157
#define my_afree(PTR) free((PTR))
157
#define my_alloca(SZ) alloca((size_t) (SZ))
158
#define my_afree(PTR) {}
159
#define my_alloca(SZ) malloc((SZ))
160
#define my_afree(PTR) free((PTR))
160
#define my_alloca(SZ) my_malloc(SZ,MYF(0))
161
#define my_afree(PTR) my_free(PTR,MYF(MY_WME))
161
162
#endif /* HAVE_ALLOCA */
163
164
#ifndef errno /* did we already get it? */
170
171
extern char errbuff[NRERRBUFFS][ERRMSGSIZE];
171
172
extern char *home_dir; /* Home directory for user */
172
173
extern const char *my_progname; /* program-name (printed in errors) */
173
extern void (*error_handler_hook)(uint32_t my_err, const char *str,myf MyFlags);
174
extern void (*fatal_error_handler_hook)(uint32_t my_err, const char *str,
174
extern void (*error_handler_hook)(uint my_err, const char *str,myf MyFlags);
175
extern void (*fatal_error_handler_hook)(uint my_err, const char *str,
176
extern uint32_t my_file_limit;
177
extern uint32_t my_thread_stack_size;
177
extern uint my_file_limit;
178
extern ulong my_thread_stack_size;
180
extern const CHARSET_INFO *default_charset_info;
181
extern CHARSET_INFO *default_charset_info;
181
182
extern CHARSET_INFO *all_charsets[256];
182
183
extern CHARSET_INFO compiled_charsets[];
185
extern uint32_t my_file_opened,my_stream_opened, my_tmp_file_created;
186
extern uint32_t my_file_total_opened;
186
extern ulong my_file_opened,my_stream_opened, my_tmp_file_created;
187
extern ulong my_file_total_opened;
187
188
extern uint mysys_usage_id;
188
189
extern bool my_init_done;
314
321
my_off_t end_of_file;
315
322
/* Points to current read position in the buffer */
316
unsigned char *read_pos;
317
324
/* the non-inclusive boundary in the buffer for the currently valid read */
318
unsigned char *read_end;
319
unsigned char *buffer; /* The read buffer */
326
uchar *buffer; /* The read buffer */
320
327
/* Used in ASYNC_IO */
321
unsigned char *request_pos;
323
330
/* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */
324
unsigned char *write_buffer;
326
333
Only used in SEQ_READ_APPEND, and points to the current read position
327
334
in the write buffer. Note that reads in SEQ_READ_APPEND caches can
328
happen from both read buffer (unsigned char* buffer) and write buffer
329
(unsigned char* write_buffer).
335
happen from both read buffer (uchar* buffer) and write buffer
336
(uchar* write_buffer).
331
unsigned char *append_read_pos;
338
uchar *append_read_pos;
332
339
/* Points to current write position in the write buffer */
333
unsigned char *write_pos;
334
341
/* The non-inclusive boundary of the valid write area */
335
unsigned char *write_end;
338
345
Current_pos and current_end are convenience variables used by
362
369
my_b_read() will call read_function to fetch the data. read_function
363
370
must never be invoked directly.
365
int (*read_function)(struct st_io_cache *,unsigned char *,size_t);
372
int (*read_function)(struct st_io_cache *,uchar *,size_t);
367
374
Same idea as in the case of read_function, except my_b_write() needs to
368
375
be replaced with my_b_append() for a SEQ_READ_APPEND cache
370
int (*write_function)(struct st_io_cache *,const unsigned char *,size_t);
377
int (*write_function)(struct st_io_cache *,const uchar *,size_t);
372
379
Specifies the type of the cache. Depending on the type of the cache
373
380
certain operations might not be available and yield unpredicatable
475
482
#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - \
476
483
*(info)->current_pos)
478
typedef uint32_t ha_checksum;
485
typedef uint32 ha_checksum;
480
487
/* Define the type of function to be passed to process_default_option_files */
481
488
typedef int (*Process_option_func)(void *ctx, const char *group_name,
482
489
const char *option);
484
#include <mysys/my_alloc.h>
491
#include <my_alloc.h>
487
494
/* Prototypes for mysys and my_func functions */
489
496
extern int my_copy(const char *from,const char *to,myf MyFlags);
497
extern int my_append(const char *from,const char *to,myf MyFlags);
490
498
extern int my_delete(const char *name,myf MyFlags);
491
499
extern int my_getwd(char * buf,size_t size,myf MyFlags);
492
500
extern int my_setwd(const char *dir,myf MyFlags);
511
519
extern int my_delete_with_symlink(const char *name, myf MyFlags);
512
520
extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags);
513
521
extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
514
extern size_t my_read(File Filedes,unsigned char *Buffer,size_t Count,myf MyFlags);
522
extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags);
515
523
extern int my_rename(const char *from,const char *to,myf MyFlags);
516
524
extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags);
517
525
extern my_off_t my_tell(File fd,myf MyFlags);
518
extern size_t my_write(File Filedes,const unsigned char *Buffer,size_t Count,
526
extern size_t my_write(File Filedes,const uchar *Buffer,size_t Count,
520
extern size_t my_fwrite(FILE *stream,const unsigned char *Buffer,size_t Count,
528
extern size_t my_fread(FILE *stream,uchar *Buffer,size_t Count,myf MyFlags);
529
extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count,
522
531
extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags);
532
extern my_off_t my_ftell(FILE *stream,myf MyFlags);
523
533
extern void *_mymalloc(size_t uSize,const char *sFile,
524
uint32_t uLine, myf MyFlag);
534
uint uLine, myf MyFlag);
525
535
extern void *_myrealloc(void *pPtr,size_t uSize,const char *sFile,
526
uint32_t uLine, myf MyFlag);
527
extern void * my_multi_malloc (myf MyFlags, ...);
528
extern void _myfree(void *pPtr, const char *sFile, uint32_t uLine, myf MyFlag);
529
extern int _sanity(const char *sFile, uint32_t uLine);
536
uint uLine, myf MyFlag);
537
extern void * my_multi_malloc _VARARGS((myf MyFlags, ...));
538
extern void _myfree(void *pPtr,const char *sFile,uint uLine, myf MyFlag);
539
extern int _sanity(const char *sFile, uint uLine);
530
540
extern void *_my_memdup(const void *from, size_t length,
531
const char *sFile, uint32_t uLine,myf MyFlag);
532
extern char * _my_strdup(const char *from, const char *sFile, uint32_t uLine,
541
const char *sFile, uint uLine,myf MyFlag);
542
extern char * _my_strdup(const char *from, const char *sFile, uint uLine,
534
544
extern char *_my_strndup(const char *from, size_t length,
535
const char *sFile, uint32_t uLine,
545
const char *sFile, uint uLine,
548
/* implemented in my_memmem.c */
549
extern void *my_memmem(const void *haystack, size_t haystacklen,
550
const void *needle, size_t needlelen);
538
553
#define my_access access
539
554
extern int check_if_legal_filename(const char *path);
540
555
extern int check_if_legal_tablename(const char *path);
542
557
#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags))
544
559
#ifndef TERMINATE
545
extern void TERMINATE(FILE *file, uint32_t flag);
560
extern void TERMINATE(FILE *file, uint flag);
547
562
extern void init_glob_errs(void);
548
563
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
564
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
549
565
extern int my_fclose(FILE *fd,myf MyFlags);
550
566
extern int my_sync(File fd, myf my_flags);
551
567
extern int my_sync_dir(const char *dir_name, myf my_flags);
552
568
extern int my_sync_dir_by_file(const char *file_name, myf my_flags);
553
extern void my_error(int nr,myf MyFlags, ...);
554
extern void my_printf_error(uint32_t my_err, const char *format,
556
__attribute__((format(printf, 2, 4)));
569
extern void my_error _VARARGS((int nr,myf MyFlags, ...));
570
extern void my_printf_error _VARARGS((uint my_err, const char *format,
572
ATTRIBUTE_FORMAT(printf, 2, 4);
557
573
extern int my_error_register(const char **errmsgs, int first, int last);
558
574
extern const char **my_error_unregister(int first, int last);
559
extern void my_message(uint32_t my_err, const char *str,myf MyFlags);
560
extern void my_message_no_curses(uint32_t my_err, const char *str,myf MyFlags);
575
extern void my_message(uint my_err, const char *str,myf MyFlags);
576
extern void my_message_no_curses(uint my_err, const char *str,myf MyFlags);
561
577
extern bool my_init(void);
562
578
extern void my_end(int infoflag);
563
579
extern int my_redel(const char *from, const char *to, int MyFlags);
612
629
extern int init_record_cache(RECORD_CACHE *info,size_t cachesize,File file,
613
630
size_t reclength,enum cache_type type,
614
631
bool use_async_io);
615
extern int read_cache_record(RECORD_CACHE *info,unsigned char *to);
632
extern int read_cache_record(RECORD_CACHE *info,uchar *to);
616
633
extern int end_record_cache(RECORD_CACHE *info);
617
634
extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos,
618
const unsigned char *record,size_t length);
635
const uchar *record,size_t length);
619
636
extern int flush_write_cache(RECORD_CACHE *info);
620
extern RETSIGTYPE sigtstp_handler(int signal_number);
637
extern long my_clock(void);
638
extern sig_handler sigtstp_handler(int signal_number);
621
639
extern void handle_recived_signals(void);
623
extern RETSIGTYPE my_set_alarm_variable(int signo);
624
extern void my_string_ptr_sort(unsigned char *base,uint32_t items,size_t size);
625
extern void radixsort_for_str_ptr(unsigned char* base[], uint32_t number_of_elements,
626
size_t size_of_element,unsigned char *buffer[]);
627
extern RETQSORTTYPE my_qsort(void *base_ptr, size_t total_elems, size_t size,
629
extern RETQSORTTYPE my_qsort2(void *base_ptr, size_t total_elems, size_t size,
630
qsort2_cmp cmp, void *cmp_argument);
641
extern sig_handler my_set_alarm_variable(int signo);
642
extern void my_string_ptr_sort(uchar *base,uint items,size_t size);
643
extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
644
size_t size_of_element,uchar *buffer[]);
645
extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size,
647
extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size,
648
qsort2_cmp cmp, void *cmp_argument);
631
649
extern qsort2_cmp get_ptr_compare(size_t);
632
void my_store_ptr(unsigned char *buff, size_t pack_length, my_off_t pos);
633
my_off_t my_get_ptr(unsigned char *ptr, size_t pack_length);
650
void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos);
651
my_off_t my_get_ptr(uchar *ptr, size_t pack_length);
634
652
extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize,
635
653
enum cache_type type,my_off_t seek_offset,
636
654
bool use_async_io, myf cache_myflags);
638
656
my_off_t seek_offset,bool use_async_io,
639
657
bool clear_cache);
640
658
extern void setup_io_cache(IO_CACHE* info);
641
extern int _my_b_read(IO_CACHE *info,unsigned char *Buffer,size_t Count);
642
extern int _my_b_read_r(IO_CACHE *info,unsigned char *Buffer,size_t Count);
659
extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count);
660
extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count);
643
661
extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare,
644
IO_CACHE *write_cache, uint32_t num_threads);
662
IO_CACHE *write_cache, uint num_threads);
645
663
extern void remove_io_thread(IO_CACHE *info);
646
extern int _my_b_seq_read(IO_CACHE *info,unsigned char *Buffer,size_t Count);
647
extern int _my_b_net_read(IO_CACHE *info,unsigned char *Buffer,size_t Count);
664
extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count);
665
extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count);
648
666
extern int _my_b_get(IO_CACHE *info);
649
extern int _my_b_async_read(IO_CACHE *info,unsigned char *Buffer,size_t Count);
650
extern int _my_b_write(IO_CACHE *info,const unsigned char *Buffer,size_t Count);
651
extern int my_b_append(IO_CACHE *info,const unsigned char *Buffer,size_t Count);
652
extern int my_b_safe_write(IO_CACHE *info,const unsigned char *Buffer,size_t Count);
667
extern int _my_b_async_read(IO_CACHE *info,uchar *Buffer,size_t Count);
668
extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count);
669
extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count);
670
extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count);
654
extern int my_block_write(IO_CACHE *info, const unsigned char *Buffer,
672
extern int my_block_write(IO_CACHE *info, const uchar *Buffer,
655
673
size_t Count, my_off_t pos);
656
674
extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock);
675
693
#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D ORIG_CALLER_INFO)
676
694
#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E CALLER_INFO)
677
695
#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E ORIG_CALLER_INFO)
678
extern bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint32_t element_size,
679
void *init_buffer, uint32_t init_alloc,
680
uint32_t alloc_increment
696
extern bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint element_size,
697
void *init_buffer, uint init_alloc,
681
699
CALLER_INFO_PROTO);
682
700
/* init_dynamic_array() function is deprecated */
683
extern bool init_dynamic_array(DYNAMIC_ARRAY *array,uint32_t element_size,
684
uint32_t init_alloc,uint32_t alloc_increment
701
extern bool init_dynamic_array(DYNAMIC_ARRAY *array,uint element_size,
702
uint init_alloc,uint alloc_increment
685
703
CALLER_INFO_PROTO);
686
extern bool insert_dynamic(DYNAMIC_ARRAY *array,unsigned char * element);
687
extern unsigned char *alloc_dynamic(DYNAMIC_ARRAY *array);
688
extern unsigned char *pop_dynamic(DYNAMIC_ARRAY*);
689
extern bool set_dynamic(DYNAMIC_ARRAY *array,unsigned char * element,uint32_t array_index);
690
extern bool allocate_dynamic(DYNAMIC_ARRAY *array, uint32_t max_elements);
691
extern void get_dynamic(DYNAMIC_ARRAY *array,unsigned char * element,uint32_t array_index);
704
extern bool insert_dynamic(DYNAMIC_ARRAY *array,uchar * element);
705
extern uchar *alloc_dynamic(DYNAMIC_ARRAY *array);
706
extern uchar *pop_dynamic(DYNAMIC_ARRAY*);
707
extern bool set_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index);
708
extern bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements);
709
extern void get_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index);
692
710
extern void delete_dynamic(DYNAMIC_ARRAY *array);
693
extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint32_t array_index);
711
extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index);
694
712
extern void freeze_size(DYNAMIC_ARRAY *array);
695
extern int get_index_dynamic(DYNAMIC_ARRAY *array, unsigned char * element);
713
extern int get_index_dynamic(DYNAMIC_ARRAY *array, uchar * element);
696
714
#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element)
697
715
#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index))
698
716
#define push_dynamic(A,B) insert_dynamic((A),(B))
699
717
#define reset_dynamic(array) ((array)->elements= 0)
700
718
#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp))
720
extern bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str,
721
size_t init_alloc,size_t alloc_increment);
722
extern bool dynstr_append(DYNAMIC_STRING *str, const char *append);
723
bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
725
extern bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append,
727
extern bool dynstr_set(DYNAMIC_STRING *str, const char *init_str);
728
extern bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size);
729
extern bool dynstr_trunc(DYNAMIC_STRING *str, size_t n);
730
extern void dynstr_free(DYNAMIC_STRING *str);
732
extern void *my_malloc_lock(size_t length,myf flags);
733
extern void my_free_lock(void *ptr,myf flags);
702
735
#define my_malloc_lock(A,B) my_malloc((A),(B))
736
#define my_free_lock(A,B) my_free((A),(B))
703
738
#define alloc_root_inited(A) ((A)->min_malloc != 0)
704
739
#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8)
705
740
#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0)
723
758
const char *option_value,
724
759
const char *section_name, int remove_option);
725
760
extern int my_search_option_files(const char *conf_file, int *argc,
726
char ***argv, uint32_t *args_used,
761
char ***argv, uint *args_used,
727
762
Process_option_func func, void *func_ctx);
728
763
extern void free_defaults(char **argv);
729
764
extern void my_print_default_files(const char *conf_file);
730
765
extern void print_defaults(const char *conf_file, const char **groups);
731
extern ha_checksum my_checksum(ha_checksum crc, const unsigned char *mem,
766
extern bool my_compress(uchar *, size_t *, size_t *);
767
extern bool my_uncompress(uchar *, size_t , size_t *);
768
extern uchar *my_compress_alloc(const uchar *packet, size_t *len,
770
extern ha_checksum my_checksum(ha_checksum crc, const uchar *mem,
733
extern void my_sleep(uint32_t m_seconds);
734
extern uint32_t my_set_max_open_files(uint32_t files);
772
extern void my_sleep(ulong m_seconds);
773
extern uint my_set_max_open_files(uint files);
735
774
void my_free_open_file_info(void);
737
776
extern time_t my_time(myf flags);
768
808
#define MAP_NOSYNC 0x0800
769
809
#define MAP_FAILED ((void *)-1)
770
810
#define MS_SYNC 0x0000
771
813
#define HAVE_MMAP
773
816
void *my_mmap(void *, size_t, int, int, int, my_off_t);
774
817
int my_munmap(void *, size_t);
821
#ifdef HAVE_GETPAGESIZE
822
#define my_getpagesize() getpagesize()
824
int my_getpagesize(void);
777
827
/* character sets */
778
extern uint32_t get_charset_number(const char *cs_name, uint32_t cs_flags);
779
extern uint32_t get_collation_number(const char *name);
780
extern const char *get_charset_name(uint32_t cs_number);
828
extern uint get_charset_number(const char *cs_name, uint cs_flags);
829
extern uint get_collation_number(const char *name);
830
extern const char *get_charset_name(uint cs_number);
782
extern const CHARSET_INFO *get_charset(uint32_t cs_number, myf flags);
783
extern const CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags);
784
extern const CHARSET_INFO *get_charset_by_csname(const char *cs_name, uint32_t cs_flags, myf my_flags);
832
extern CHARSET_INFO *get_charset(uint cs_number, myf flags);
833
extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags);
834
extern CHARSET_INFO *get_charset_by_csname(const char *cs_name,
835
uint cs_flags, myf my_flags);
786
837
extern bool resolve_charset(const char *cs_name,
787
const CHARSET_INFO *default_cs,
788
const CHARSET_INFO **cs);
838
CHARSET_INFO *default_cs,
789
840
extern bool resolve_collation(const char *cl_name,
790
const CHARSET_INFO *default_cl,
791
const CHARSET_INFO **cl);
841
CHARSET_INFO *default_cl,
793
844
extern void free_charsets(void);
794
845
extern char *get_charsets_dir(char *buf);
795
extern bool my_charset_same(const CHARSET_INFO *cs1, const CHARSET_INFO *cs2);
846
extern bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2);
796
847
extern bool init_compiled_charsets(myf flags);
797
848
extern void add_compiled_collation(CHARSET_INFO *cs);
798
extern size_t escape_string_for_drizzle(const CHARSET_INFO *charset_info,
799
char *to, size_t to_length,
800
const char *from, size_t length);
801
extern size_t escape_quotes_for_drizzle(const CHARSET_INFO *charset_info,
802
char *to, size_t to_length,
803
const char *from, size_t length);
805
extern void thd_increment_bytes_sent(uint32_t length);
806
extern void thd_increment_bytes_received(uint32_t length);
807
extern void thd_increment_net_big_packet_count(uint32_t length);
849
extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info,
850
char *to, size_t to_length,
851
const char *from, size_t length);
852
extern size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info,
853
char *to, size_t to_length,
854
const char *from, size_t length);
856
extern void thd_increment_bytes_sent(ulong length);
857
extern void thd_increment_bytes_received(ulong length);
858
extern void thd_increment_net_big_packet_count(ulong length);
813
861
#endif /* _my_sys_h */