my_sys.h 34.7 KB
Newer Older
1
/* Copyright (C) 2000-2003 MySQL AB
unknown's avatar
unknown committed
2 3 4 5 6 7 8

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
unknown's avatar
unknown committed
9
   but WITHOUT ANY WARRANTY; without even the implied warranty of
unknown's avatar
unknown committed
10 11 12 13 14 15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
unknown's avatar
unknown committed
16 17 18

#ifndef _my_sys_h
#define _my_sys_h
unknown's avatar
unknown committed
19
C_MODE_START
unknown's avatar
unknown committed
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

#ifdef HAVE_AIOWAIT
#include <sys/asynch.h>			/* Used by record-cache */
typedef struct my_aio_result {
  aio_result_t result;
  int	       pending;
} my_aio_result;
#endif

#ifndef THREAD
extern int NEAR my_errno;		/* Last error in mysys */
#else
#include <my_pthread.h>
#endif

#ifndef _m_ctype_h
#include <m_ctype.h>                    /* for CHARSET_INFO */
#endif

unknown's avatar
unknown committed
39
#include <stdarg.h>
40
#include <typelib.h>
unknown's avatar
unknown committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

#define MYSYS_PROGRAM_USES_CURSES()  { error_handler_hook = my_message_curses;	mysys_uses_curses=1; }
#define MYSYS_PROGRAM_DONT_USE_CURSES()  { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;}
#define MY_INIT(name);		{ my_progname= name; my_init(); }

#define ERRMSGSIZE	(SC_MAXWIDTH)	/* Max length of a error message */
#define NRERRBUFFS	(2)	/* Buffers for parameters */
#define MY_FILE_ERROR	((uint) ~0)

	/* General bitmaps for my_func's */
#define MY_FFNF		1	/* Fatal if file not found */
#define MY_FNABP	2	/* Fatal if not all bytes read/writen */
#define MY_NABP		4	/* Error if not all bytes read/writen */
#define MY_FAE		8	/* Fatal if any error */
#define MY_WME		16	/* Write message on error */
#define MY_WAIT_IF_FULL 32	/* Wait and try again if disk full error */
57 58 59 60
#define MY_IGNORE_BADFD 32      /* my_sync: ignore 'bad descriptor' errors */
#define MY_RAID         64      /* Support for RAID */
#define MY_FULL_IO     512      /* For my_read - loop intil I/O is complete */
#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */
unknown's avatar
unknown committed
61 62
#define MY_LINK_WARNING 32	/* my_redel() gives warning if links */
#define MY_COPYTIME	64	/* my_redel() copys time */
63 64
#define MY_DELETE_OLD	256	/* my_create_with_symlink() */
#define MY_RESOLVE_LINK 128	/* my_realpath(); Only resolve links */
unknown's avatar
unknown committed
65
#define MY_HOLD_ORIGINAL_MODES 128  /* my_copy() holds to file modes */
66
#define MY_REDEL_MAKE_BACKUP 256
unknown's avatar
unknown committed
67 68 69 70 71 72 73
#define MY_SEEK_NOT_DONE 32	/* my_lock may have to do a seek */
#define MY_DONT_WAIT	64	/* my_lock() don't wait if can't lock */
#define MY_ZEROFILL	32	/* my_malloc(), fill array with zero */
#define MY_ALLOW_ZERO_PTR 64	/* my_realloc() ; zero ptr -> malloc */
#define MY_FREE_ON_ERROR 128	/* my_realloc() ; Free old ptr on error */
#define MY_HOLD_ON_ERROR 256	/* my_realloc() ; Return old ptr on error */
#define MY_THREADSAFE	128	/* pread/pwrite:  Don't allow interrupts */
74
#define MY_DONT_OVERWRITE_FILE 1024	/* my_copy: Don't overwrite file */
unknown's avatar
unknown committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91

#define MY_CHECK_ERROR	1	/* Params to my_end; Check open-close */
#define MY_GIVE_INFO	2	/* Give time info about process*/

#define ME_HIGHBYTE	8	/* Shift for colours */
#define ME_NOCUR	1	/* Don't use curses message */
#define ME_OLDWIN	2	/* Use old window */
#define ME_BELL		4	/* Ring bell then printing message */
#define ME_HOLDTANG	8	/* Don't delete last keys */
#define ME_WAITTOT	16	/* Wait for errtime secs of for a action */
#define ME_WAITTANG	32	/* Wait for a user action  */
#define ME_NOREFRESH	64	/* Dont refresh screen */
#define ME_NOINPUT	128	/* Dont use the input libary */
#define ME_COLOUR1	((1 << ME_HIGHBYTE))	/* Possibly error-colours */
#define ME_COLOUR2	((2 << ME_HIGHBYTE))
#define ME_COLOUR3	((3 << ME_HIGHBYTE))

92 93 94 95 96 97 98 99 100 101
	/* Bits in last argument to fn_format */
#define MY_REPLACE_DIR		1	/* replace dir in name with 'dir' */
#define MY_REPLACE_EXT		2	/* replace extension with 'ext' */
#define MY_UNPACK_FILENAME	4	/* Unpack name (~ -> home) */
#define MY_PACK_FILENAME	8	/* Pack name (home -> ~) */
#define MY_RESOLVE_SYMLINKS	16	/* Resolve all symbolic links */
#define MY_RETURN_REAL_PATH	32	/* return full path for file */
#define MY_SAFE_PATH		64	/* Return NULL if too long path */
#define MY_RELATIVE_PATH	128	/* name is relative to 'dir' */

unknown's avatar
unknown committed
102 103 104 105 106 107 108 109 110
	/* My seek flags */
#define MY_SEEK_SET	0
#define MY_SEEK_CUR	1
#define MY_SEEK_END	2

	/* Some constants */
#define MY_WAIT_FOR_USER_TO_FIX_PANIC	60	/* in seconds */
#define MY_WAIT_GIVE_USER_A_MESSAGE	10	/* Every 10 times of prev */
#define MIN_COMPRESS_LENGTH		50	/* Don't compress small bl. */
111
#define DFLT_INIT_HITS  3
unknown's avatar
unknown committed
112

113 114
	/* root_alloc flags */
#define MY_KEEP_PREALLOC	1
unknown's avatar
unknown committed
115
#define MY_MARK_BLOCKS_FREE     2  /* move used to free list and reuse them */
unknown's avatar
unknown committed
116

unknown's avatar
unknown committed
117 118 119
	/* Internal error numbers (for assembler functions) */
#define MY_ERRNO_EDOM		33
#define MY_ERRNO_ERANGE		34
unknown's avatar
unknown committed
120

unknown's avatar
unknown committed
121 122 123 124 125 126 127
	/* Bits for get_date timeflag */
#define GETDATE_DATE_TIME	1
#define GETDATE_SHORT_DATE	2
#define GETDATE_HHMMSSTIME	4
#define GETDATE_GMT		8
#define GETDATE_FIXEDLENGTH	16

unknown's avatar
unknown committed
128
	/* defines when allocating data */
unknown's avatar
unknown committed
129
#ifdef SAFEMALLOC
unknown's avatar
unknown committed
130 131 132
#define my_malloc(SZ,FLAG) _mymalloc((SZ), __FILE__, __LINE__, FLAG )
#define my_malloc_ci(SZ,FLAG) _mymalloc((SZ), sFile, uLine, FLAG )
#define my_realloc(PTR,SZ,FLAG) _myrealloc((PTR), (SZ), __FILE__, __LINE__, FLAG )
unknown's avatar
unknown committed
133
#define my_checkmalloc() _sanity( __FILE__, __LINE__ )
unknown's avatar
unknown committed
134 135 136 137
#define my_free(PTR,FLAG) _myfree((PTR), __FILE__, __LINE__,FLAG)
#define my_memdup(A,B,C) _my_memdup((A),(B), __FILE__,__LINE__,C)
#define my_strdup(A,C) _my_strdup((A), __FILE__,__LINE__,C)
#define my_strdup_with_length(A,B,C) _my_strdup_with_length((A),(B),__FILE__,__LINE__,C)
unknown's avatar
unknown committed
138
#define TRASH(A,B) bfill(A, B, 0x8F)
unknown's avatar
unknown committed
139 140 141
#define QUICK_SAFEMALLOC sf_malloc_quick=1
#define NORMAL_SAFEMALLOC sf_malloc_quick=0
extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick;
142
extern ulonglong sf_malloc_mem_limit;
unknown's avatar
unknown committed
143

144 145 146
#define CALLER_INFO_PROTO   , const char *sFile, uint uLine
#define CALLER_INFO         , __FILE__, __LINE__
#define ORIG_CALLER_INFO    , sFile, uLine
unknown's avatar
unknown committed
147
#else
148
#define my_checkmalloc()
unknown's avatar
unknown committed
149
#undef TERMINATE
unknown's avatar
unknown committed
150 151 152 153
#define TERMINATE(A) {}
#define QUICK_SAFEMALLOC
#define NORMAL_SAFEMALLOC
extern gptr my_malloc(uint Size,myf MyFlags);
154
#define my_malloc_ci(SZ,FLAG) my_malloc( SZ, FLAG )
unknown's avatar
unknown committed
155 156 157
extern gptr my_realloc(gptr oldpoint,uint Size,myf MyFlags);
extern void my_no_flags_free(gptr ptr);
extern gptr my_memdup(const byte *from,uint length,myf MyFlags);
158 159 160
extern char *my_strdup(const char *from,myf MyFlags);
extern char *my_strdup_with_length(const byte *from, uint length,
				   myf MyFlags);
161 162
/* we do use FG (as a no-op) in below so that a typo on FG is caught */
#define my_free(PTR,FG) ((void)FG,my_no_flags_free(PTR))
163 164 165
#define CALLER_INFO_PROTO   /* nothing */
#define CALLER_INFO         /* nothing */
#define ORIG_CALLER_INFO    /* nothing */
unknown's avatar
unknown committed
166
#define TRASH(A,B) /* nothing */
unknown's avatar
unknown committed
167
#endif
unknown's avatar
unknown committed
168

169 170 171 172 173 174 175 176 177 178
#ifdef HAVE_LARGE_PAGES
extern uint my_get_large_page_size(void);
extern gptr my_large_malloc(uint size, myf my_flags);
extern void my_large_free(gptr ptr, myf my_flags);
#else
#define my_get_large_page_size() (0)
#define my_large_malloc(A,B) my_malloc_lock((A),(B))
#define my_large_free(A,B) my_free_lock((A),(B))
#endif /* HAVE_LARGE_PAGES */

unknown's avatar
unknown committed
179
#ifdef HAVE_ALLOCA
unknown's avatar
unknown committed
180
#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43)
unknown's avatar
unknown committed
181
#pragma alloca
182
#endif /* _AIX */
183 184
#if defined(__MWERKS__)
#undef alloca
unknown's avatar
unknown committed
185
#define alloca _alloca
186
#endif /* __MWERKS__ */
187
#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca)
188 189
#define alloca __builtin_alloca
#endif /* GNUC */
unknown's avatar
unknown committed
190 191 192 193 194 195
#define my_alloca(SZ) alloca((size_t) (SZ))
#define my_afree(PTR) {}
#else
#define my_alloca(SZ) my_malloc(SZ,MYF(0))
#define my_afree(PTR) my_free(PTR,MYF(MY_WME))
#endif /* HAVE_ALLOCA */
unknown's avatar
unknown committed
196

unknown's avatar
unknown committed
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
#ifdef MSDOS
#ifdef __ZTC__
void * __CDECL halloc(long count,size_t length);
void   __CDECL hfree(void *ptr);
#endif
#if defined(USE_HALLOC)
#if defined(_VCM_) || defined(M_IC80386)
#undef USE_HALLOC
#endif
#endif
#ifdef USE_HALLOC
#define malloc(a) halloc((long) (a),1)
#define free(a) hfree(a)
#endif
#endif /* MSDOS */

213
#ifndef errno				/* did we already get it? */
unknown's avatar
unknown committed
214 215 216 217 218
#ifdef HAVE_ERRNO_AS_DEFINE
#include <errno.h>			/* errno is a define */
#else
extern int errno;			/* declare errno */
#endif
219
#endif					/* #ifndef errno */
unknown's avatar
unknown committed
220 221
extern char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
extern char *home_dir;			/* Home directory for user */
222
extern const char *my_progname;		/* program-name (printed in errors) */
unknown's avatar
unknown committed
223 224 225 226
extern char NEAR curr_dir[];		/* Current directory for user */
extern int (*error_handler_hook)(uint my_err, const char *str,myf MyFlags);
extern int (*fatal_error_handler_hook)(uint my_err, const char *str,
				       myf MyFlags);
227
extern uint my_file_limit;
unknown's avatar
unknown committed
228

229 230 231 232 233
#ifdef HAVE_LARGE_PAGES
extern my_bool my_use_large_pages;
extern uint    my_large_page_size;
#endif

unknown's avatar
unknown committed
234
/* charsets */
235 236 237 238
extern CHARSET_INFO *default_charset_info;
extern CHARSET_INFO *all_charsets[256];
extern CHARSET_INFO compiled_charsets[];

239
/* statistics */
240
extern ulong	my_file_opened,my_stream_opened, my_tmp_file_created;
241
extern uint	mysys_usage_id;
unknown's avatar
unknown committed
242
extern my_bool	my_init_done;
unknown's avatar
unknown committed
243 244 245 246 247 248 249 250 251 252 253 254 255

					/* Point to current my_message() */
extern void (*my_sigtstp_cleanup)(void),
					/* Executed before jump to shell */
	    (*my_sigtstp_restart)(void),
	    (*my_abort_hook)(int);
					/* Executed when comming from shell */
extern int NEAR my_umask,		/* Default creation mask  */
	   NEAR my_umask_dir,
	   NEAR my_recived_signals,	/* Signals we have got */
	   NEAR my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */
	   NEAR my_dont_interrupt;	/* call remember_intr when set */
extern my_bool NEAR mysys_uses_curses, my_use_symdir;
256
extern ulong sf_malloc_cur_memory, sf_malloc_max_memory;
unknown's avatar
unknown committed
257 258 259

extern ulong	my_default_record_cache_size;
extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io,
unknown's avatar
unknown committed
260
               NEAR my_disable_flush_key_blocks, NEAR my_disable_symlinks;
unknown's avatar
unknown committed
261 262
extern char	wild_many,wild_one,wild_prefix;
extern const char *charsets_dir;
unknown's avatar
unknown committed
263
extern char *defaults_extra_file;
unknown's avatar
unknown committed
264
extern const char *defaults_group_suffix;
265
extern const char *defaults_file;
unknown's avatar
unknown committed
266

267 268
extern my_bool timed_mutexes;

unknown's avatar
unknown committed
269 270 271 272 273 274 275
typedef struct wild_file_pack	/* Struct to hold info when selecting files */
{
  uint		wilds;		/* How many wildcards */
  uint		not_pos;	/* Start of not-theese-files */
  my_string	*wild;		/* Pointer to wildcards */
} WF_PACK;

276 277 278 279 280 281
enum loglevel {
   ERROR_LEVEL,
   WARNING_LEVEL,
   INFORMATION_LEVEL
};

282 283
enum cache_type
{
unknown's avatar
unknown committed
284
  TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE,
285 286 287 288 289
  SEQ_READ_APPEND		/* sequential read or append */,
  READ_FIFO, READ_NET,WRITE_NET};

enum flush_type
{
unknown's avatar
unknown committed
290
  FLUSH_KEEP, FLUSH_RELEASE, FLUSH_IGNORE_CHANGED, FLUSH_FORCE_WRITE
291
};
unknown's avatar
unknown committed
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306

typedef struct st_record_cache	/* Used when cacheing records */
{
  File file;
  int	rc_seek,error,inited;
  uint	rc_length,read_length,reclength;
  my_off_t rc_record_pos,end_of_file;
  byte	*rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos;
#ifdef HAVE_AIOWAIT
  int	use_async_io;
  my_aio_result aio_result;
#endif
  enum cache_type type;
} RECORD_CACHE;

307 308 309 310 311
enum file_type
{
  UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE, STREAM_BY_FOPEN, STREAM_BY_FDOPEN,
  FILE_BY_MKSTEMP, FILE_BY_DUP
};
unknown's avatar
unknown committed
312

313
struct st_my_file_info
unknown's avatar
unknown committed
314 315 316
{
  my_string		name;
  enum file_type	type;
unknown's avatar
unknown committed
317
#if defined(THREAD) && !defined(HAVE_PREAD)
318 319
  pthread_mutex_t	mutex;
#endif
320 321 322
};

extern struct st_my_file_info *my_file_info;
unknown's avatar
unknown committed
323

unknown's avatar
unknown committed
324 325 326 327 328 329 330 331
typedef struct st_my_tmpdir
{
  char **list;
  uint cur, max;
#ifdef THREAD
  pthread_mutex_t mutex;
#endif
} MY_TMPDIR;
unknown's avatar
unknown committed
332

333 334
typedef struct st_dynamic_array
{
unknown's avatar
unknown committed
335 336 337 338 339 340
  char *buffer;
  uint elements,max_element;
  uint alloc_increment;
  uint size_of_element;
} DYNAMIC_ARRAY;

341 342
typedef struct st_dynamic_string
{
unknown's avatar
unknown committed
343 344 345 346
  char *str;
  uint length,max_length,alloc_increment;
} DYNAMIC_STRING;

347 348
struct st_io_cache;
typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*);
unknown's avatar
unknown committed
349

unknown's avatar
unknown committed
350 351 352 353 354 355
#ifdef THREAD
typedef struct st_io_cache_share
{
  /* to sync on reads into buffer */
  pthread_mutex_t mutex;
  pthread_cond_t  cond;
unknown's avatar
unknown committed
356
  int             count, total;
unknown's avatar
unknown committed
357 358
  /* actual IO_CACHE that filled the buffer */
  struct st_io_cache *active;
unknown's avatar
unknown committed
359
#ifdef NOT_YET_IMPLEMENTED
unknown's avatar
unknown committed
360 361 362 363 364
  /* whether the structure should be free'd */
  my_bool alloced;
#endif
} IO_CACHE_SHARE;
#endif
unknown's avatar
unknown committed
365

unknown's avatar
unknown committed
366 367
typedef struct st_io_cache		/* Used when cacheing files */
{
unknown's avatar
unknown committed
368 369 370 371 372 373
  /* Offset in file corresponding to the first byte of byte* buffer. */
  my_off_t pos_in_file;
  /*
    The offset of end of file for READ_CACHE and WRITE_CACHE.
    For SEQ_READ_APPEND it the maximum of the actual end of file and
    the position represented by read_end.
374
  */
unknown's avatar
unknown committed
375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390
  my_off_t end_of_file;
  /* Points to current read position in the buffer */
  byte	*read_pos;
  /* the non-inclusive boundary in the buffer for the currently valid read */
  byte  *read_end;
  byte  *buffer;				/* The read buffer */
  /* Used in ASYNC_IO */
  byte  *request_pos;

  /* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */
  byte  *write_buffer;
  /*
    Only used in SEQ_READ_APPEND, and points to the current read position
    in the write buffer. Note that reads in SEQ_READ_APPEND caches can
    happen from both read buffer (byte* buffer) and write buffer
    (byte* write_buffer).
391
  */
unknown's avatar
unknown committed
392 393 394 395 396 397 398 399 400 401 402
  byte *append_read_pos;
  /* Points to current write position in the write buffer */
  byte *write_pos;
  /* The non-inclusive boundary of the valid write area */
  byte *write_end;

  /*
    Current_pos and current_end are convenience variables used by
    my_b_tell() and other routines that need to know the current offset
    current_pos points to &write_pos, and current_end to &write_end in a
    WRITE_CACHE, and &read_pos and &read_end respectively otherwise
403
  */
unknown's avatar
unknown committed
404
  byte  **current_pos, **current_end;
unknown's avatar
cleanup  
unknown committed
405
#ifdef THREAD
unknown's avatar
unknown committed
406 407 408 409
  /*
    The lock is for append buffer used in SEQ_READ_APPEND cache
    need mutex copying from append buffer to read buffer.
  */
unknown's avatar
cleanup  
unknown committed
410
  pthread_mutex_t append_buffer_lock;
unknown's avatar
unknown committed
411 412 413 414 415 416 417
  /*
    The following is used when several threads are reading the
    same file in parallel. They are synchronized on disk
    accesses reading the cached part of the file asynchronously.
    It should be set to NULL to disable the feature.  Only
    READ_CACHE mode is supported.
  */
unknown's avatar
unknown committed
418
  IO_CACHE_SHARE *share;
419
#endif
unknown's avatar
unknown committed
420 421 422 423 424 425 426
  /*
    A caller will use my_b_read() macro to read from the cache
    if the data is already in cache, it will be simply copied with
    memcpy() and internal variables will be accordinging updated with
    no functions invoked. However, if the data is not fully in the cache,
    my_b_read() will call read_function to fetch the data. read_function
    must never be invoked directly.
427
  */
428
  int (*read_function)(struct st_io_cache *,byte *,uint);
unknown's avatar
unknown committed
429 430 431
  /*
    Same idea as in the case of read_function, except my_b_write() needs to
    be replaced with my_b_append() for a SEQ_READ_APPEND cache
432
  */
433
  int (*write_function)(struct st_io_cache *,const byte *,uint);
unknown's avatar
unknown committed
434 435 436 437
  /*
    Specifies the type of the cache. Depending on the type of the cache
    certain operations might not be available and yield unpredicatable
    results. Details to be documented later
438
  */
unknown's avatar
unknown committed
439
  enum cache_type type;
unknown's avatar
unknown committed
440 441 442 443 444 445
  /*
    Callbacks when the actual read I/O happens. These were added and
    are currently used for binary logging of LOAD DATA INFILE - when a
    block is read from the file, we create a block create/append event, and
    when IO_CACHE is closed, we create an end event. These functions could,
    of course be used for other things
446
  */
447 448
  IO_CACHE_CALLBACK pre_read;
  IO_CACHE_CALLBACK post_read;
449
  IO_CACHE_CALLBACK pre_close;
450 451 452 453 454
  /*
    Counts the number of times, when we were forced to use disk. We use it to
    increase the binlog_cache_disk_use status variable.
  */
  ulong disk_writes;
unknown's avatar
unknown committed
455
  void* arg;				/* for use by pre/post_read */
456 457
  char *file_name;			/* if used with 'open_cached_file' */
  char *dir,*prefix;
458
  File file; /* file descriptor */
unknown's avatar
unknown committed
459 460 461 462 463 464
  /*
    seek_not_done is set by my_b_seek() to inform the upcoming read/write
    operation that a seek needs to be preformed prior to the actual I/O
    error is 0 if the cache operation was successful, -1 if there was a
    "hard" error, and the actual number of I/O-ed bytes if the read/write was
    partial.
465
  */
unknown's avatar
unknown committed
466
  int	seek_not_done,error;
unknown's avatar
unknown committed
467 468 469 470
  /* buffer_length is memory size allocated for buffer or write_buffer */
  uint	buffer_length;
  /* read_length is the same as buffer_length except when we use async io */
  uint  read_length;
unknown's avatar
unknown committed
471
  myf	myflags;			/* Flags used to my_read/my_write */
unknown's avatar
unknown committed
472
  /*
unknown's avatar
unknown committed
473 474 475 476 477
    alloced_buffer is 1 if the buffer was allocated by init_io_cache() and
    0 if it was supplied by the user.
    Currently READ_NET is the only one that will use a buffer allocated
    somewhere else
  */
unknown's avatar
unknown committed
478
  my_bool alloced_buffer;
unknown's avatar
unknown committed
479
#ifdef HAVE_AIOWAIT
unknown's avatar
unknown committed
480 481 482
  /*
    As inidicated by ifdef, this is for async I/O, which is not currently
    used (because it's not reliable on all systems)
483
  */
unknown's avatar
unknown committed
484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499
  uint inited;
  my_off_t aio_read_pos;
  my_aio_result aio_result;
#endif
} IO_CACHE;

typedef int (*qsort2_cmp)(const void *, const void *, const void *);

	/* defines for mf_iocache */

	/* Test if buffer is inited */
#define my_b_clear(info) (info)->buffer=0
#define my_b_inited(info) (info)->buffer
#define my_b_EOF INT_MIN

#define my_b_read(info,Buffer,Count) \
unknown's avatar
unknown committed
500 501 502
  ((info)->read_pos + (Count) <= (info)->read_end ?\
   (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \
    ((info)->read_pos+=(Count)),0) :\
unknown's avatar
unknown committed
503 504
   (*(info)->read_function)((info),Buffer,Count))

505 506 507 508 509
#define my_b_write(info,Buffer,Count) \
 ((info)->write_pos + (Count) <=(info)->write_end ?\
  (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\
   ((info)->write_pos+=(Count)),0) : \
   (*(info)->write_function)((info),(Buffer),(Count)))
unknown's avatar
unknown committed
510

unknown's avatar
unknown committed
511
#define my_b_get(info) \
unknown's avatar
unknown committed
512 513
  ((info)->read_pos != (info)->read_end ?\
   ((info)->read_pos++, (int) (uchar) (info)->read_pos[-1]) :\
unknown's avatar
unknown committed
514 515 516 517
   _my_b_get(info))

	/* my_b_write_byte dosn't have any err-check */
#define my_b_write_byte(info,chr) \
unknown's avatar
unknown committed
518 519 520
  (((info)->write_pos < (info)->write_end) ?\
   ((*(info)->write_pos++)=(chr)) :\
   (_my_b_write(info,0,0) , ((*(info)->write_pos++)=(chr))))
unknown's avatar
unknown committed
521 522

#define my_b_fill_cache(info) \
unknown's avatar
unknown committed
523
  (((info)->read_end=(info)->read_pos),(*(info)->read_function)(info,0,0))
unknown's avatar
unknown committed
524

unknown's avatar
unknown committed
525
#define my_b_tell(info) ((info)->pos_in_file + \
unknown's avatar
unknown committed
526
			 (uint) (*(info)->current_pos - (info)->request_pos))
527 528 529

/* tell write offset in the SEQ_APPEND cache */
my_off_t my_b_append_tell(IO_CACHE* info);
530
my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */
unknown's avatar
unknown committed
531 532 533

#define my_b_bytes_in_cache(info) (uint) (*(info)->current_end - \
					  *(info)->current_pos)
unknown's avatar
unknown committed
534

unknown's avatar
unknown committed
535 536
typedef uint32 ha_checksum;

537 538
/* Define the type of function to be passed to process_default_option_files */
typedef int (*Process_option_func)(void *ctx, const char *group_name,
539
                                   const char *option);
540

unknown's avatar
unknown committed
541
#include <my_alloc.h>
unknown's avatar
unknown committed
542 543 544 545 546 547 548 549 550 551 552

	/* Prototypes for mysys and my_func functions */

extern int my_copy(const char *from,const char *to,myf MyFlags);
extern int my_append(const char *from,const char *to,myf MyFlags);
extern int my_delete(const char *name,myf MyFlags);
extern int my_getwd(my_string buf,uint size,myf MyFlags);
extern int my_setwd(const char *dir,myf MyFlags);
extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags);
extern gptr my_once_alloc(uint Size,myf MyFlags);
extern void my_once_free(void);
unknown's avatar
unknown committed
553 554
extern char *my_once_strdup(const char *src,myf myflags);
extern char *my_once_memdup(const char *src, uint len, myf myflags);
unknown's avatar
unknown committed
555
extern File my_open(const char *FileName,int Flags,myf MyFlags);
unknown's avatar
unknown committed
556 557 558
extern File my_register_filename(File fd, const char *FileName,
				 enum file_type type_of_file,
				 uint error_message_number, myf MyFlags);
unknown's avatar
unknown committed
559 560 561
extern File my_create(const char *FileName,int CreateFlags,
		      int AccsesFlags, myf MyFlags);
extern int my_close(File Filedes,myf MyFlags);
unknown's avatar
unknown committed
562
extern File my_dup(File file, myf MyFlags);
unknown's avatar
unknown committed
563
extern int my_mkdir(const char *dir, int Flags, myf MyFlags);
564 565 566 567 568
extern int my_readlink(char *to, const char *filename, myf MyFlags);
extern int my_realpath(char *to, const char *filename, myf MyFlags);
extern File my_create_with_symlink(const char *linkname, const char *filename,
				   int createflags, int access_flags,
				   myf MyFlags);
569 570
extern int my_delete_with_symlink(const char *name, myf MyFlags);
extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags);
571
extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
unknown's avatar
unknown committed
572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597
extern uint my_read(File Filedes,byte *Buffer,uint Count,myf MyFlags);
extern uint my_pread(File Filedes,byte *Buffer,uint Count,my_off_t offset,
		     myf MyFlags);
extern int my_rename(const char *from,const char *to,myf MyFlags);
extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags);
extern my_off_t my_tell(File fd,myf MyFlags);
extern uint my_write(File Filedes,const byte *Buffer,uint Count,
		     myf MyFlags);
extern uint my_pwrite(File Filedes,const byte *Buffer,uint Count,
		      my_off_t offset,myf MyFlags);
extern uint my_fread(FILE *stream,byte *Buffer,uint Count,myf MyFlags);
extern uint my_fwrite(FILE *stream,const byte *Buffer,uint Count,
		      myf MyFlags);
extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags);
extern my_off_t my_ftell(FILE *stream,myf MyFlags);
extern gptr _mymalloc(uint uSize,const char *sFile,
		      uint uLine, myf MyFlag);
extern gptr _myrealloc(gptr pPtr,uint uSize,const char *sFile,
		       uint uLine, myf MyFlag);
extern gptr my_multi_malloc _VARARGS((myf MyFlags, ...));
extern void _myfree(gptr pPtr,const char *sFile,uint uLine, myf MyFlag);
extern int _sanity(const char *sFile,unsigned int uLine);
extern gptr _my_memdup(const byte *from,uint length,
		       const char *sFile, uint uLine,myf MyFlag);
extern my_string _my_strdup(const char *from, const char *sFile, uint uLine,
			    myf MyFlag);
598 599 600
extern char *_my_strdup_with_length(const byte *from, uint length,
				    const char *sFile, uint uLine,
				    myf MyFlag);
unknown's avatar
unknown committed
601

unknown's avatar
unknown committed
602 603 604 605 606
#ifdef __WIN__
extern int my_access(const char *path, int amode);
#else
#define my_access access
#endif
unknown's avatar
unknown committed
607
extern int check_if_legal_filename(const char *path);
608

unknown's avatar
unknown committed
609 610 611 612 613
#ifndef TERMINATE
extern void TERMINATE(FILE *file);
#endif
extern void init_glob_errs(void);
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
614
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
unknown's avatar
unknown committed
615
extern int my_fclose(FILE *fd,myf MyFlags);
616
extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags);
617
extern int my_sync(File fd, myf my_flags);
unknown's avatar
unknown committed
618 619 620 621
extern int my_error _VARARGS((int nr,myf MyFlags, ...));
extern int my_printf_error _VARARGS((uint my_err, const char *format,
				     myf MyFlags, ...)
				    __attribute__ ((format (printf, 2, 4))));
622 623
extern int my_error_register(const char **errmsgs, int first, int last);
extern const char **my_error_unregister(int first, int last);
unknown's avatar
unknown committed
624 625 626
extern int my_message(uint my_err, const char *str,myf MyFlags);
extern int my_message_no_curses(uint my_err, const char *str,myf MyFlags);
extern int my_message_curses(uint my_err, const char *str,myf MyFlags);
627
extern my_bool my_init(void);
unknown's avatar
unknown committed
628 629 630 631 632
extern void my_end(int infoflag);
extern int my_redel(const char *from, const char *to, int MyFlags);
extern int my_copystat(const char *from, const char *to, int MyFlags);
extern my_string my_filename(File fd);

633
#ifndef THREAD
unknown's avatar
unknown committed
634 635
extern void dont_break(void);
extern void allow_break(void);
636 637 638 639 640
#else
#define dont_break()
#define allow_break()
#endif

unknown's avatar
unknown committed
641 642 643 644
extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist);
extern char *my_tmpdir(MY_TMPDIR *tmpdir);
extern void free_tmpdir(MY_TMPDIR *tmpdir);

unknown's avatar
unknown committed
645 646 647 648 649
extern void my_remember_signal(int signal_number,sig_handler (*func)(int));
extern uint dirname_part(my_string to,const char *name);
extern uint dirname_length(const char *name);
#define base_name(A) (A+dirname_length(A))
extern int test_if_hard_path(const char *dir_name);
650
extern my_bool has_path(const char *name);
651
extern char *convert_dirname(char *to, const char *from, const char *from_end);
unknown's avatar
unknown committed
652 653 654
extern void to_unix_path(my_string name);
extern my_string fn_ext(const char *name);
extern my_string fn_same(my_string toname,const char *name,int flag);
655 656
extern my_string fn_format(my_string to,const char *name,const char *dir,
			   const char *form, uint flag);
unknown's avatar
unknown committed
657 658 659 660 661
extern size_s strlength(const char *str);
extern void pack_dirname(my_string to,const char *from);
extern uint unpack_dirname(my_string to,const char *from);
extern uint cleanup_dirname(my_string to,const char *from);
extern uint system_filename(my_string to,const char *from);
662
extern uint unpack_filename(my_string to,const char *from);
unknown's avatar
unknown committed
663 664 665 666 667 668 669
extern my_string intern_filename(my_string to,const char *from);
extern my_string directory_file_name(my_string dst, const char *src);
extern int pack_filename(my_string to, const char *name, size_s max_length);
extern my_string my_path(my_string to,const char *progname,
			 const char *own_pathname_part);
extern my_string my_load_path(my_string to, const char *path,
			      const char *own_path_prefix);
670
extern int wild_compare(const char *str,const char *wildstr,pbool str_is_pattern);
unknown's avatar
unknown committed
671 672 673
extern WF_PACK *wf_comp(my_string str);
extern int wf_test(struct wild_file_pack *wf_pack,const char *name);
extern void wf_end(struct wild_file_pack *buffer);
unknown's avatar
unknown committed
674
extern size_s strip_sp(my_string str);
unknown's avatar
unknown committed
675
extern void get_date(my_string to,int timeflag,time_t use_time);
676
extern void soundex(CHARSET_INFO *, my_string out_pntr, my_string in_pntr,pbool remove_garbage);
unknown's avatar
unknown committed
677 678 679 680 681 682 683 684 685 686 687
extern int init_record_cache(RECORD_CACHE *info,uint cachesize,File file,
			     uint reclength,enum cache_type type,
			     pbool use_async_io);
extern int read_cache_record(RECORD_CACHE *info,byte *to);
extern int end_record_cache(RECORD_CACHE *info);
extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos,
			      const byte *record,uint length);
extern int flush_write_cache(RECORD_CACHE *info);
extern long my_clock(void);
extern sig_handler sigtstp_handler(int signal_number);
extern void handle_recived_signals(void);
688

unknown's avatar
unknown committed
689 690 691 692 693 694 695
extern sig_handler my_set_alarm_variable(int signo);
extern void my_string_ptr_sort(void *base,uint items,size_s size);
extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
				  size_s size_of_element,uchar *buffer[]);
extern qsort_t qsort2(void *base_ptr, size_t total_elems, size_t size,
		      qsort2_cmp cmp, void *cmp_argument);
extern qsort2_cmp get_ptr_compare(uint);
unknown's avatar
unknown committed
696 697
void my_store_ptr(byte *buff, uint pack_length, my_off_t pos);
my_off_t my_get_ptr(byte *ptr, uint pack_length);
unknown's avatar
unknown committed
698 699 700 701 702 703
extern int init_io_cache(IO_CACHE *info,File file,uint cachesize,
			 enum cache_type type,my_off_t seek_offset,
			 pbool use_async_io, myf cache_myflags);
extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type,
			       my_off_t seek_offset,pbool use_async_io,
			       pbool clear_cache);
704
extern void setup_io_cache(IO_CACHE* info);
unknown's avatar
unknown committed
705
extern int _my_b_read(IO_CACHE *info,byte *Buffer,uint Count);
unknown's avatar
unknown committed
706 707
#ifdef THREAD
extern int _my_b_read_r(IO_CACHE *info,byte *Buffer,uint Count);
708 709 710
extern void init_io_cache_share(IO_CACHE *info,
				IO_CACHE_SHARE *s, uint num_threads);
extern void remove_io_thread(IO_CACHE *info);
unknown's avatar
unknown committed
711
#endif
unknown's avatar
cleanup  
unknown committed
712
extern int _my_b_seq_read(IO_CACHE *info,byte *Buffer,uint Count);
unknown's avatar
unknown committed
713 714 715 716
extern int _my_b_net_read(IO_CACHE *info,byte *Buffer,uint Count);
extern int _my_b_get(IO_CACHE *info);
extern int _my_b_async_read(IO_CACHE *info,byte *Buffer,uint Count);
extern int _my_b_write(IO_CACHE *info,const byte *Buffer,uint Count);
unknown's avatar
unknown committed
717
extern int my_b_append(IO_CACHE *info,const byte *Buffer,uint Count);
718 719
extern int my_b_safe_write(IO_CACHE *info,const byte *Buffer,uint Count);

unknown's avatar
unknown committed
720 721
extern int my_block_write(IO_CACHE *info, const byte *Buffer,
			  uint Count, my_off_t pos);
722
extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock);
723

724
#define flush_io_cache(info) my_b_flush_io_cache((info),1)
725

unknown's avatar
unknown committed
726
extern int end_io_cache(IO_CACHE *info);
727 728 729
extern uint my_b_fill(IO_CACHE *info);
extern void my_b_seek(IO_CACHE *info,my_off_t pos);
extern uint my_b_gets(IO_CACHE *info, char *to, uint max_length);
730
extern my_off_t my_b_filelength(IO_CACHE *info);
731
extern uint my_b_printf(IO_CACHE *info, const char* fmt, ...);
732
extern uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap);
unknown's avatar
unknown committed
733 734 735 736 737
extern my_bool open_cached_file(IO_CACHE *cache,const char *dir,
				 const char *prefix, uint cache_size,
				 myf cache_myflags);
extern my_bool real_open_cached_file(IO_CACHE *cache);
extern void close_cached_file(IO_CACHE *cache);
738 739
File create_temp_file(char *to, const char *dir, const char *pfx,
		      int mode, myf MyFlags);
740 741 742
#define my_init_dynamic_array(A,B,C,D) init_dynamic_array(A,B,C,D CALLER_INFO)
#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array(A,B,C,D ORIG_CALLER_INFO)
extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array,uint element_size,
743 744
                                  uint init_alloc,uint alloc_increment
                                  CALLER_INFO_PROTO);
unknown's avatar
unknown committed
745 746 747 748 749 750 751 752 753 754 755
extern my_bool insert_dynamic(DYNAMIC_ARRAY *array,gptr element);
extern byte *alloc_dynamic(DYNAMIC_ARRAY *array);
extern byte *pop_dynamic(DYNAMIC_ARRAY*);
extern my_bool set_dynamic(DYNAMIC_ARRAY *array,gptr element,uint array_index);
extern void get_dynamic(DYNAMIC_ARRAY *array,gptr element,uint array_index);
extern void delete_dynamic(DYNAMIC_ARRAY *array);
extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index);
extern void freeze_size(DYNAMIC_ARRAY *array);
#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element)
#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index))
#define push_dynamic(A,B) insert_dynamic(A,B)
unknown's avatar
unknown committed
756
#define reset_dynamic(array) ((array)->elements= 0)
unknown's avatar
unknown committed
757 758 759 760

extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str,
				   uint init_alloc,uint alloc_increment);
extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append);
761 762
my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
			  uint length);
unknown's avatar
unknown committed
763 764 765 766 767 768 769 770 771 772
extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str);
extern my_bool dynstr_realloc(DYNAMIC_STRING *str, ulong additional_size);
extern void dynstr_free(DYNAMIC_STRING *str);
#ifdef HAVE_MLOCK
extern byte *my_malloc_lock(uint length,myf flags);
extern void my_free_lock(byte *ptr,myf flags);
#else
#define my_malloc_lock(A,B) my_malloc((A),(B))
#define my_free_lock(A,B) my_free((A),(B))
#endif
unknown's avatar
unknown committed
773
#define alloc_root_inited(A) ((A)->min_malloc != 0)
774
#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8)
unknown's avatar
unknown committed
775
#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0)
unknown's avatar
unknown committed
776 777 778
extern void init_alloc_root(MEM_ROOT *mem_root, uint block_size,
			    uint pre_alloc_size);
extern gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size);
779
extern gptr multi_alloc_root(MEM_ROOT *mem_root, ...);
unknown's avatar
unknown committed
780 781
extern void free_root(MEM_ROOT *root, myf MyFLAGS);
extern void set_prealloc_root(MEM_ROOT *root, char *ptr);
782 783
extern void reset_root_defaults(MEM_ROOT *mem_root, uint block_size,
                                uint prealloc_size);
unknown's avatar
unknown committed
784 785 786
extern char *strdup_root(MEM_ROOT *root,const char *str);
extern char *strmake_root(MEM_ROOT *root,const char *str,uint len);
extern char *memdup_root(MEM_ROOT *root,const char *str,uint len);
unknown's avatar
unknown committed
787 788 789
extern int get_defaults_options(int argc, char **argv,
                                char **defaults, char **extra_defaults,
                                char **group_suffix);
790 791
extern int load_defaults(const char *conf_file, const char **groups,
			 int *argc, char ***argv);
792 793 794
extern int modify_defaults_file(const char *file_location, const char *option,
                                const char *option_value,
                                const char *section_name, int remove_option);
795 796 797
extern int my_search_option_files(const char *conf_file, int *argc,
                                  char ***argv, uint *args_used,
                                  Process_option_func func, void *func_ctx);
unknown's avatar
unknown committed
798
extern void free_defaults(char **argv);
799
extern void my_print_default_files(const char *conf_file);
unknown's avatar
unknown committed
800 801 802 803
extern void print_defaults(const char *conf_file, const char **groups);
extern my_bool my_compress(byte *, ulong *, ulong *);
extern my_bool my_uncompress(byte *, ulong *, ulong *);
extern byte *my_compress_alloc(const byte *packet, ulong *len, ulong *complen);
unknown's avatar
unknown committed
804
extern ha_checksum my_checksum(ha_checksum crc, const byte *mem, uint count);
unknown's avatar
unknown committed
805
extern uint my_bit_log2(ulong value);
806
extern uint my_count_bits(ulonglong v);
807
extern uint my_count_bits_ushort(ushort v);
unknown's avatar
unknown committed
808
extern void my_sleep(ulong m_seconds);
809
extern ulong crc32(ulong crc, const uchar *buf, uint len);
810 811 812
extern uint my_set_max_open_files(uint files);
void my_free_open_file_info(void);

unknown's avatar
unknown committed
813
ulonglong my_getsystime(void);
unknown's avatar
unknown committed
814 815
my_bool my_gethwaddr(uchar *to);

unknown's avatar
unknown committed
816
#ifdef HAVE_SYS_MMAN_H
817 818 819 820 821 822 823
#include <sys/mman.h>

#ifndef MAP_NOSYNC
#define MAP_NOSYNC      0
#endif

#define my_mmap(a,b,c,d,e,f)    mmap(a,b,c,d,e,f)
unknown's avatar
unknown committed
824
#ifdef HAVE_GETPAGESIZE
825
#define my_getpagesize()        getpagesize()
unknown's avatar
unknown committed
826 827 828 829
#else
/* qnx ? */
#define my_getpagesize()        8192
#endif
unknown's avatar
unknown committed
830
#define my_munmap(a,b)          munmap((a),(b))
831 832 833 834 835

#else
/* not a complete set of mmap() flags, but only those that nesessary */
#define PROT_READ        1
#define PROT_WRITE       2
unknown's avatar
unknown committed
836 837
#define MAP_SHARED       0x0001
#define MAP_NOSYNC       0x0800
838 839
#define MAP_FAILED       ((void *)-1)
#define MS_SYNC          0x0000
unknown's avatar
unknown committed
840 841

#ifndef __NETWARE__
unknown's avatar
unknown committed
842
#define HAVE_MMAP
unknown's avatar
unknown committed
843
#endif
844 845 846 847 848 849 850 851

int my_getpagesize(void);
void *my_mmap(void *, size_t, int, int, int, my_off_t);
int my_munmap(void *, size_t);
#endif

int my_msync(int, void *, size_t, int);

852 853 854 855 856 857 858 859 860 861 862 863 864 865
/* character sets */
extern uint get_charset_number(const char *cs_name, uint cs_flags);
extern uint get_collation_number(const char *name);
extern const char *get_charset_name(uint cs_number);

extern CHARSET_INFO *get_charset(uint cs_number, myf flags);
extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags);
extern CHARSET_INFO *get_charset_by_csname(const char *cs_name,
					   uint cs_flags, myf my_flags);
extern void free_charsets(void);
extern char *get_charsets_dir(char *buf);
extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2);
extern my_bool init_compiled_charsets(myf flags);
extern void add_compiled_collation(CHARSET_INFO *cs);
unknown's avatar
unknown committed
866 867
extern ulong escape_string_for_mysql(CHARSET_INFO *charset_info,
                                     char *to, ulong to_length,
868
                                     const char *from, ulong length);
869 870 871 872 873
#ifdef __WIN__
#define BACKSLASH_MBTAIL
/* File system character set */
extern CHARSET_INFO *fs_character_set(void);
#endif
874 875 876
extern ulong escape_quotes_for_mysql(CHARSET_INFO *charset_info,
                                     char *to, ulong to_length,
                                     const char *from, ulong length);
unknown's avatar
unknown committed
877

878 879 880 881
extern void thd_increment_bytes_sent(ulong length);
extern void thd_increment_bytes_received(ulong length);
extern void thd_increment_net_big_packet_count(ulong length);

unknown's avatar
unknown committed
882 883
#ifdef __WIN__
extern my_bool have_tcpip;		/* Is set if tcpip is used */
884 885 886 887 888 889 890 891

/* implemented in my_windac.c */

int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror,
                            DWORD owner_rights, DWORD everybody_rights);

void my_security_attr_free(SECURITY_ATTRIBUTES *sa);

892 893 894
/* implemented in my_conio.c */
char* my_cgets(char *string, unsigned long clen, unsigned long* plen);

unknown's avatar
unknown committed
895
#endif
unknown's avatar
unknown committed
896 897 898 899
#ifdef __NETWARE__
void netware_reg_user(const char *ip, const char *user,
		      const char *application);
#endif
unknown's avatar
unknown committed
900

unknown's avatar
unknown committed
901
C_MODE_END
unknown's avatar
unknown committed
902 903
#include "raid.h"
#endif /* _my_sys_h */