Fixes for OS2.

Fix bug in isamlog
Add argument types to function declarations.


Docs/manual.texi:
  Updated credits
client/mysql.cc:
  Fixes for OS2
client/mysqladmin.c:
  Fixes for OS2
client/mysqldump.c:
  Fixes for OS2
client/mysqlimport.c:
  Fixes for OS2
client/mysqltest.c:
  Fixes for OS2
dbug/dbug.c:
  Fixes for OS2.
  Use new C calling convention.
dbug/factorial.c:
  Fixes for OS2.
  Use new C calling convention.
include/errmsg.h:
  Fix for OS2
include/global.h:
  Fixes for OS2.
include/my_pthread.h:
  Fixes for OS2.
include/my_sys.h:
  Fixes for OS2.
include/mysql_com.h:
  Move defines to global.h
include/thr_alarm.h:
  Fixes for OS2.
isam/isamchk.c:
  Fixes for OS2.
  Add arguments to function declarations.
isam/isamlog.c:
  Fixes for OS2.
  Fix bug in logfile handling.
isam/test1.c:
  Add arguments to function decl
isam/test2.c:
  Add arguments to function declarations.
isam/test_all.res:
  Update result
libmysql/get_password.c:
  Fixes for OS2.
libmysql/libmysql.c:
  Fixes for OS2.
libmysql/net.c:
  Fixes for OS2.
libmysql/violite.c:
  Add arguments to function declarations.
merge/_locking.c:
  Add argument types to function declarations.
merge/close.c:
  Add argument types to function declarations.
merge/create.c:
  Add argument types to function declarations.
merge/extra.c:
  Add argument types to function declarations.
merge/open.c:
  Add argument types to function declarations.
merge/panic.c:
  Add argument types to function declarations.
merge/rsame.c:
  Add argument types to function declarations.
merge/update.c:
  Add argument types to function declarations.
myisam/ft_eval.c:
  Portability fix
myisam/ft_search.c:
  Portability fix
myisam/ft_test1.c:
  Portability fix
myisam/ftdefs.h:
  Portability fix
myisam/mi_check.c:
  Portability fix
myisam/mi_test1.c:
  Portability fix
myisam/mi_test2.c:
  Portability fix
myisam/mi_test_all.sh:
  Update to test for MACH variable
myisam/myisamlog.c:
  Cleanup
myisam/myisampack.c:
  Don't use variable 'new'
myisam/sort.c:
  Portability fix
myisammrg/myrg_delete.c:
  Add argument types to function declarations.
myisammrg/myrg_locking.c:
  Add argument types to function declarations.
myisammrg/myrg_open.c:
  Add argument types to function declarations.
myisammrg/myrg_panic.c:
  Add argument types to function declarations.
mysql-test/t/backup.test:
  Fix for OS2
mysql-test/t/show_check.test:
  Fix for OS2
mysys/charset.c:
  Dont use variable 'new'
mysys/default.c:
  Fixes for OS2.
mysys/getopt.c:
  Fixes for OS2.
mysys/getopt1.c:
  Fixes for OS2.
mysys/list.c:
  Don't use variable 'new'
mysys/mf_dirname.c:
  Fixes for OS2.
mysys/mf_format.c:
  Fixes for OS2.
mysys/mf_path.c:
  Fixes for OS2.
mysys/mf_qsort.c:
  Portability fix
mysys/mf_tempfile.c:
  Fixes for OS2.
mysys/my_clock.c:
  Fixes for OS2.
mysys/my_copy.c:
  Fixes for OS2.
mysys/my_create.c:
  Fixes for OS2.
mysys/my_getwd.c:
  Fixes for OS2.
mysys/my_init.c:
  Fixes for OS2.
mysys/my_lib.c:
  Fixes for OS2.
mysys/my_lock.c:
  Fixes for OS2.
mysys/my_malloc.c:
  Portability fix
mysys/my_mkdir.c:
  Fixes for OS2.
mysys/my_open.c:
  Fixes for OS2.
mysys/my_pthread.c:
  Fixes for OS2.
mysys/my_realloc.c:
  Fixes for OS2.
mysys/my_redel.c:
  Fixes for OS2.
mysys/my_static.c:
  Fixes for OS2.
mysys/my_tempnam.c:
  Fixes for OS2.
mysys/my_thr_init.c:
  Fixes for OS2.
mysys/my_write.c:
  Fixes for OS2.
mysys/test_charset.c:
  Fixes for OS2.
mysys/thr_alarm.c:
  Fixes for OS2.
mysys/tree.c:
  Fixes for OS2.
sql/field.cc:
  Fixes for OS2.
sql/field.h:
  Fixes for OS2.
sql/gen_lex_hash.cc:
  Fixes for OS2.
sql/hostname.cc:
  Fixes for OS2.
sql/item_func.cc:
  Fixes for OS2.
sql/item_strfunc.cc:
  Fixes for OS2.
sql/log_event.cc:
  Fixes for OS2.
sql/md5.c:
  Fixes for OS2.
sql/mini_client.cc:
  Fixes for OS2.
sql/mysql_priv.h:
  Fixes for OS2.
sql/mysqld.cc:
  Fixes for OS2.
sql/net_serv.cc:
  Fixes for OS2.
sql/slave.cc:
  Fixes for OS2.
sql/sql_base.cc:
  Fixes for OS2.
sql/sql_db.cc:
  Portability fix
sql/sql_insert.cc:
  Fixes for OS2.
sql/sql_load.cc:
  Fixes for OS2.
sql/sql_parse.cc:
  Fixes for OS2.
sql/sql_table.cc:
  Fixes for OS2.
sql/sql_udf.cc:
  Fixes for OS2.
sql/violite.c:
  Fixes for OS2.
strings/ctype-big5.c:
  Fixes for OS2.
strings/ctype-gbk.c:
  Fixes for OS2.
strings/ctype-sjis.c:
  Fixes for OS2.
strings/ctype-tis620.c:
  Fixes for OS2.
strings/ctype.c:
  Fixes for OS2.
strings/strnlen.c:
  Fixes for OS2.
This commit is contained in:
unknown 2001-08-22 01:45:07 +03:00
parent d61418b94f
commit 31b9e6e03f
137 changed files with 9927 additions and 852 deletions

View File

@ -46155,6 +46155,8 @@ incredible help we got in managing the MySQL mailing lists.
@item Igor Romanenko @email{igor@@frog.kiev.ua} @item Igor Romanenko @email{igor@@frog.kiev.ua}
@code{mysqldump} (previously @code{msqldump}, but ported and enhanced by @code{mysqldump} (previously @code{msqldump}, but ported and enhanced by
Monty). Monty).
@item Yuri Dario
For keeping up and extending the MySQL OS/2 port.
@item Tim Bunce, Alligator Descartes @item Tim Bunce, Alligator Descartes
For the @code{DBD} (Perl) interface. For the @code{DBD} (Perl) interface.
@item Tim Bunce @item Tim Bunce
@ -46282,6 +46284,8 @@ MySQL server.
@item Albert Chin-A-Young. @item Albert Chin-A-Young.
Configure updates for Tru64, large file support and better TCP wrappers Configure updates for Tru64, large file support and better TCP wrappers
support. support.
@item John Birrell
Emulation of pthread_mutex() for OS/2.
@end table @end table
Other contributors, bugfinders, and testers: James H. Thompson, Maurizio Other contributors, bugfinders, and testers: James H. Thompson, Maurizio
@ -46543,6 +46547,8 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.42 @appendixsubsec Changes in release 3.23.42
@itemize @bullet @itemize @bullet
@item @item
Applied large patch for OS/2 from Yuri Dario.
@item
Fixed problem with InnoDB when one could get the error @code{Can't Fixed problem with InnoDB when one could get the error @code{Can't
execute the given command...} even when one didn't have an active execute the given command...} even when one didn't have an active
transaction. transaction.

View File

@ -77,7 +77,7 @@ extern "C" {
#undef bcmp // Fix problem with new readline #undef bcmp // Fix problem with new readline
#undef bzero #undef bzero
#ifdef __WIN__ #if defined( __WIN__) || defined(OS2)
#include <conio.h> #include <conio.h>
#else #else
#include <readline/readline.h> #include <readline/readline.h>
@ -569,7 +569,7 @@ static int get_options(int argc, char **argv)
set_all_changeable_vars(changeable_vars); set_all_changeable_vars(changeable_vars);
while ((c=getopt_long(argc,argv, while ((c=getopt_long(argc,argv,
"?ABCD:LfgGHinNoqrstTU::vVw::WEe:h:O:P:S:u:#::p::", (char*) "?ABCD:LfgGHinNoqrstTU::vVw::WEe:h:O:P:S:u:#::p::",
long_options, &option_index)) != EOF) long_options, &option_index)) != EOF)
{ {
switch(c) { switch(c) {
@ -767,10 +767,20 @@ static int get_options(int argc, char **argv)
return(0); return(0);
} }
#if defined(OS2)
static char* readline( char* prompt)
{
#if defined(OS2)
static char linebuffer[254];
#endif
puts( prompt);
return gets( linebuffer);
}
#endif
static int read_lines(bool execute_commands) static int read_lines(bool execute_commands)
{ {
#ifdef __WIN__ #if defined( __WIN__) || defined(OS2)
char linebuffer[254]; char linebuffer[254];
#endif #endif
char *line; char *line;
@ -790,7 +800,7 @@ static int read_lines(bool execute_commands)
} }
else else
{ {
#ifdef __WIN__ #if defined( __WIN__) || defined(OS2)
if (opt_outfile && glob_buffer.is_empty()) if (opt_outfile && glob_buffer.is_empty())
fflush(OUTFILE); fflush(OUTFILE);
tee_fputs(glob_buffer.is_empty() ? "mysql> " : tee_fputs(glob_buffer.is_empty() ? "mysql> " :
@ -1483,7 +1493,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
static void init_pager() static void init_pager()
{ {
#ifndef __WIN__ #if !defined( __WIN__) && !defined( OS2)
if (!opt_nopager) if (!opt_nopager)
{ {
if (!(PAGER= popen(pager, "w"))) if (!(PAGER= popen(pager, "w")))
@ -1499,7 +1509,7 @@ static void init_pager()
static void end_pager() static void end_pager()
{ {
#ifndef __WIN__ #if !defined( __WIN__) && !defined( OS2)
if (!opt_nopager) if (!opt_nopager)
pclose(PAGER); pclose(PAGER);
#endif #endif
@ -2337,6 +2347,9 @@ void tee_fprintf(FILE *file, const char *fmt, ...)
va_start(args, fmt); va_start(args, fmt);
(void) vfprintf(file, fmt, args); (void) vfprintf(file, fmt, args);
#ifdef OS2
fflush( file);
#endif
if (opt_outfile) if (opt_outfile)
(void) vfprintf(OUTFILE, fmt, args); (void) vfprintf(OUTFILE, fmt, args);
va_end(args); va_end(args);
@ -2346,6 +2359,9 @@ void tee_fprintf(FILE *file, const char *fmt, ...)
void tee_fputs(const char *s, FILE *file) void tee_fputs(const char *s, FILE *file)
{ {
fputs(s, file); fputs(s, file);
#ifdef OS2
fflush( file);
#endif
if (opt_outfile) if (opt_outfile)
fputs(s, OUTFILE); fputs(s, OUTFILE);
} }
@ -2355,6 +2371,9 @@ void tee_puts(const char *s, FILE *file)
{ {
fputs(s, file); fputs(s, file);
fputs("\n", file); fputs("\n", file);
#ifdef OS2
fflush( file);
#endif
if (opt_outfile) if (opt_outfile)
{ {
fputs(s, OUTFILE); fputs(s, OUTFILE);
@ -2365,11 +2384,14 @@ void tee_puts(const char *s, FILE *file)
void tee_putc(int c, FILE *file) void tee_putc(int c, FILE *file)
{ {
putc(c, file); putc(c, file);
#ifdef OS2
fflush( file);
#endif
if (opt_outfile) if (opt_outfile)
putc(c, OUTFILE); putc(c, OUTFILE);
} }
#ifdef __WIN__ #if defined( __WIN__) || defined( OS2)
#include <time.h> #include <time.h>
#else #else
#include <sys/times.h> #include <sys/times.h>
@ -2379,7 +2401,7 @@ void tee_putc(int c, FILE *file)
static ulong start_timer(void) static ulong start_timer(void)
{ {
#ifdef __WIN__ #if defined( __WIN__) || defined( OS2)
return clock(); return clock();
#else #else
struct tms tms_tmp; struct tms tms_tmp;

View File

@ -132,7 +132,7 @@ static struct option long_options[] = {
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
CHANGEABLE_VAR changeable_vars[] = { static CHANGEABLE_VAR changeable_vars[] = {
{ "connect_timeout", (long*) &opt_connect_timeout, 0, 0, 3600*12, 0, 1}, { "connect_timeout", (long*) &opt_connect_timeout, 0, 0, 3600*12, 0, 1},
{ "shutdown_timeout", (long*) &opt_shutdown_timeout, SHUTDOWN_DEF_TIMEOUT, 0, { "shutdown_timeout", (long*) &opt_shutdown_timeout, SHUTDOWN_DEF_TIMEOUT, 0,
3600*12, 0, 1}, 3600*12, 0, 1},
@ -152,7 +152,8 @@ int main(int argc,char *argv[])
load_defaults("my",load_default_groups,&argc,&argv); load_defaults("my",load_default_groups,&argc,&argv);
set_all_changeable_vars( changeable_vars ); set_all_changeable_vars( changeable_vars );
while ((c=getopt_long(argc,argv,"h:i:p::u:#::P:sS:Ct:fq?vVw::WrEO:", while ((c=getopt_long(argc,argv,
(char*) "h:i:p::u:#::P:sS:Ct:fq?vVw::WrEO:",
long_options, &option_index)) != EOF) long_options, &option_index)) != EOF)
{ {
switch(c) { switch(c) {
@ -1121,14 +1122,15 @@ static void wait_pidfile(char *pidfile)
uint count=0; uint count=0;
system_filename(buff,pidfile); system_filename(buff,pidfile);
while ((fd = open(buff, O_RDONLY)) >= 0 && count++ < opt_shutdown_timeout) while ((fd = my_open(buff, O_RDONLY, MYF(0))) >= 0 &&
count++ < opt_shutdown_timeout)
{ {
close(fd); my_close(fd,MYF(0));
sleep(1); sleep(1);
} }
if (fd >= 0) if (fd >= 0)
{ {
close(fd); my_close(fd,MYF(0));
fprintf(stderr, fprintf(stderr,
"Warning; Aborted waiting on pid file: '%s' after %d seconds\n", "Warning; Aborted waiting on pid file: '%s' after %d seconds\n",
buff, count-1); buff, count-1);

View File

@ -85,11 +85,11 @@ static int first_error=0;
extern ulong net_buffer_length; extern ulong net_buffer_length;
static DYNAMIC_STRING extended_row; static DYNAMIC_STRING extended_row;
#include "sslopt-vars.h" #include "sslopt-vars.h"
FILE *result_file; FILE *md_result_file;
enum options {OPT_FTB=256, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC, OPT_KEYWORDS, enum md_options {OPT_FTB=256, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC,
OPT_LOCKS, OPT_DROP, OPT_OPTIMIZE, OPT_DELAYED, OPT_TABLES, OPT_KEYWORDS, OPT_LOCKS, OPT_DROP, OPT_OPTIMIZE, OPT_DELAYED,
OPT_CHARSETS_DIR, OPT_DEFAULT_CHARSET}; OPT_TABLES, MD_OPT_CHARSETS_DIR, MD_OPT_DEFAULT_CHARSET};
static struct option long_options[] = static struct option long_options[] =
{ {
@ -98,12 +98,12 @@ static struct option long_options[] =
{"add-drop-table", no_argument, 0, OPT_DROP}, {"add-drop-table", no_argument, 0, OPT_DROP},
{"add-locks", no_argument, 0, OPT_LOCKS}, {"add-locks", no_argument, 0, OPT_LOCKS},
{"allow-keywords", no_argument, 0, OPT_KEYWORDS}, {"allow-keywords", no_argument, 0, OPT_KEYWORDS},
{"character-sets-dir",required_argument,0, OPT_CHARSETS_DIR}, {"character-sets-dir",required_argument,0, MD_OPT_CHARSETS_DIR},
{"complete-insert", no_argument, 0, 'c'}, {"complete-insert", no_argument, 0, 'c'},
{"compress", no_argument, 0, 'C'}, {"compress", no_argument, 0, 'C'},
{"databases", no_argument, 0, 'B'}, {"databases", no_argument, 0, 'B'},
{"debug", optional_argument, 0, '#'}, {"debug", optional_argument, 0, '#'},
{"default-character-set", required_argument, 0, OPT_DEFAULT_CHARSET}, {"default-character-set", required_argument, 0, MD_OPT_DEFAULT_CHARSET},
{"delayed-insert", no_argument, 0, OPT_DELAYED}, {"delayed-insert", no_argument, 0, OPT_DELAYED},
{"extended-insert", no_argument, 0, 'e'}, {"extended-insert", no_argument, 0, 'e'},
{"fields-terminated-by", required_argument, 0, (int) OPT_FTB}, {"fields-terminated-by", required_argument, 0, (int) OPT_FTB},
@ -145,7 +145,7 @@ static struct option long_options[] =
static const char *load_default_groups[]= { "mysqldump","client",0 }; static const char *load_default_groups[]= { "mysqldump","client",0 };
CHANGEABLE_VAR changeable_vars[] = { CHANGEABLE_VAR md_changeable_vars[] = {
{ "max_allowed_packet", (long*) &max_allowed_packet,24*1024*1024,4096, { "max_allowed_packet", (long*) &max_allowed_packet,24*1024*1024,4096,
24*1024L*1024L,MALLOC_OVERHEAD,1024}, 24*1024L*1024L,MALLOC_OVERHEAD,1024},
{ "net_buffer_length", (long*) &net_buffer_length,1024*1024L-1025,4096, { "net_buffer_length", (long*) &net_buffer_length,1024*1024L-1025,4096,
@ -265,10 +265,10 @@ puts("\
print_defaults("my",load_default_groups); print_defaults("my",load_default_groups);
printf("\nPossible variables for option --set-variable (-O) are:\n"); printf("\nPossible variables for option --set-variable (-O) are:\n");
for (i=0 ; changeable_vars[i].name ; i++) for (i=0 ; md_changeable_vars[i].name ; i++)
printf("%-20s current value: %lu\n", printf("%-20s current value: %lu\n",
changeable_vars[i].name, md_changeable_vars[i].name,
(ulong) *changeable_vars[i].varptr); (ulong) *md_changeable_vars[i].varptr);
} /* usage */ } /* usage */
@ -290,9 +290,9 @@ static int get_options(int *argc,char ***argv)
int c,option_index; int c,option_index;
my_bool tty_password=0; my_bool tty_password=0;
result_file=stdout; md_result_file=stdout;
load_defaults("my",load_default_groups,argc,argv); load_defaults("my",load_default_groups,argc,argv);
set_all_changeable_vars(changeable_vars); set_all_changeable_vars(md_changeable_vars);
while ((c=getopt_long(*argc,*argv, while ((c=getopt_long(*argc,*argv,
"#::p::h:u:O:P:r:S:T:EBaAcCdefFlnqtvVw:?Ix", "#::p::h:u:O:P:r:S:T:EBaAcCdefFlnqtvVw:?Ix",
long_options, &option_index)) != EOF) long_options, &option_index)) != EOF)
@ -307,10 +307,10 @@ static int get_options(int *argc,char ***argv)
case 'A': case 'A':
opt_alldbs=1; opt_alldbs=1;
break; break;
case OPT_DEFAULT_CHARSET: case MD_OPT_DEFAULT_CHARSET:
default_charset= optarg; default_charset= optarg;
break; break;
case OPT_CHARSETS_DIR: case MD_OPT_CHARSETS_DIR:
charsets_dir= optarg; charsets_dir= optarg;
break; break;
case 'f': case 'f':
@ -332,7 +332,7 @@ static int get_options(int *argc,char ***argv)
break; break;
#endif #endif
case 'O': case 'O':
if (set_changeable_var(optarg, changeable_vars)) if (set_changeable_var(optarg, md_changeable_vars))
{ {
usage(); usage();
return(1); return(1);
@ -355,7 +355,7 @@ static int get_options(int *argc,char ***argv)
opt_mysql_port= (unsigned int) atoi(optarg); opt_mysql_port= (unsigned int) atoi(optarg);
break; break;
case 'r': case 'r':
if (!(result_file = my_fopen(optarg, O_WRONLY | O_BINARY, if (!(md_result_file = my_fopen(optarg, O_WRONLY | O_BINARY,
MYF(MY_WME)))) MYF(MY_WME))))
exit(1); exit(1);
break; break;
@ -602,7 +602,7 @@ static uint getTableStructure(char *table, char* db)
char *strpos, *table_name; char *strpos, *table_name;
const char *delayed; const char *delayed;
char name_buff[NAME_LEN+3],table_buff[NAME_LEN+3]; char name_buff[NAME_LEN+3],table_buff[NAME_LEN+3];
FILE *sql_file = result_file; FILE *sql_file = md_result_file;
DBUG_ENTER("getTableStructure"); DBUG_ENTER("getTableStructure");
delayed= opt_delayed ? " DELAYED " : ""; delayed= opt_delayed ? " DELAYED " : "";
@ -973,14 +973,14 @@ static void dumpTable(uint numFields, char *table)
} }
else else
{ {
fprintf(result_file,"\n#\n# Dumping data for table '%s'\n", table); fprintf(md_result_file,"\n#\n# Dumping data for table '%s'\n", table);
sprintf(query, "SELECT * FROM %s", quote_name(table,table_buff)); sprintf(query, "SELECT * FROM %s", quote_name(table,table_buff));
if (where) if (where)
{ {
fprintf(result_file,"# WHERE: %s\n",where); fprintf(md_result_file,"# WHERE: %s\n",where);
strxmov(strend(query), " WHERE ",where,NullS); strxmov(strend(query), " WHERE ",where,NullS);
} }
fputs("#\n\n", result_file); fputs("#\n\n", md_result_file);
if (mysql_query(sock, query)) if (mysql_query(sock, query))
{ {
@ -1007,7 +1007,7 @@ static void dumpTable(uint numFields, char *table)
} }
if (opt_lock) if (opt_lock)
fprintf(result_file,"LOCK TABLES %s WRITE;\n", fprintf(md_result_file,"LOCK TABLES %s WRITE;\n",
quote_name(table,table_buff)); quote_name(table,table_buff));
total_length=net_buffer_length; /* Force row break */ total_length=net_buffer_length; /* Force row break */
@ -1021,7 +1021,7 @@ static void dumpTable(uint numFields, char *table)
ulong *lengths=mysql_fetch_lengths(res); ulong *lengths=mysql_fetch_lengths(res);
rownr++; rownr++;
if (!extended_insert) if (!extended_insert)
fputs(insert_pat,result_file); fputs(insert_pat,md_result_file);
mysql_field_seek(res,0); mysql_field_seek(res,0);
for (i = 0; i < mysql_num_fields(res); i++) for (i = 0; i < mysql_num_fields(res); i++)
@ -1075,17 +1075,17 @@ static void dumpTable(uint numFields, char *table)
else else
{ {
if (i) if (i)
fputc(',',result_file); fputc(',',md_result_file);
if (row[i]) if (row[i])
{ {
if (!IS_NUM_FIELD(field)) if (!IS_NUM_FIELD(field))
unescape(result_file, row[i], lengths[i]); unescape(md_result_file, row[i], lengths[i]);
else else
fputs(row[i],result_file); fputs(row[i],md_result_file);
} }
else else
{ {
fputs("NULL",result_file); fputs("NULL",md_result_file);
} }
} }
} }
@ -1098,25 +1098,25 @@ static void dumpTable(uint numFields, char *table)
if (total_length + row_length < net_buffer_length) if (total_length + row_length < net_buffer_length)
{ {
total_length += row_length; total_length += row_length;
fputc(',',result_file); /* Always row break */ fputc(',',md_result_file); /* Always row break */
fputs(extended_row.str,result_file); fputs(extended_row.str,md_result_file);
} }
else else
{ {
if (row_break) if (row_break)
fputs(";\n", result_file); fputs(";\n", md_result_file);
row_break=1; /* This is first row */ row_break=1; /* This is first row */
fputs(insert_pat,result_file); fputs(insert_pat,md_result_file);
fputs(extended_row.str,result_file); fputs(extended_row.str,md_result_file);
total_length = row_length+init_length; total_length = row_length+init_length;
} }
} }
else else
fputs(");\n", result_file); fputs(");\n", md_result_file);
} }
if (extended_insert && row_break) if (extended_insert && row_break)
fputs(";\n", result_file); /* If not empty table */ fputs(";\n", md_result_file); /* If not empty table */
fflush(result_file); fflush(md_result_file);
if (mysql_errno(sock)) if (mysql_errno(sock))
{ {
sprintf(query,"%s: Error %d: %s when dumping table '%s' at row: %ld\n", sprintf(query,"%s: Error %d: %s when dumping table '%s' at row: %ld\n",
@ -1130,7 +1130,7 @@ static void dumpTable(uint numFields, char *table)
return; return;
} }
if (opt_lock) if (opt_lock)
fputs("UNLOCK TABLES;\n", result_file); fputs("UNLOCK TABLES;\n", md_result_file);
mysql_free_result(res); mysql_free_result(res);
} }
} /* dumpTable */ } /* dumpTable */
@ -1206,11 +1206,11 @@ static int init_dumping(char *database)
{ {
if (opt_databases || opt_alldbs) if (opt_databases || opt_alldbs)
{ {
fprintf(result_file,"\n#\n# Current Database: %s\n#\n", database); fprintf(md_result_file,"\n#\n# Current Database: %s\n#\n", database);
if (!opt_create_db) if (!opt_create_db)
fprintf(result_file,"\nCREATE DATABASE /*!32312 IF NOT EXISTS*/ %s;\n", fprintf(md_result_file,"\nCREATE DATABASE /*!32312 IF NOT EXISTS*/ %s;\n",
database); database);
fprintf(result_file,"\nUSE %s;\n", database); fprintf(md_result_file,"\nUSE %s;\n", database);
} }
} }
if (extended_insert) if (extended_insert)
@ -1342,7 +1342,7 @@ int main(int argc, char **argv)
if (dbConnect(current_host, current_user, opt_password)) if (dbConnect(current_host, current_user, opt_password))
exit(EX_MYSQLERR); exit(EX_MYSQLERR);
if (!path) if (!path)
write_heder(result_file, *argv); write_heder(md_result_file, *argv);
if (opt_first_slave) if (opt_first_slave)
{ {
@ -1378,9 +1378,9 @@ int main(int argc, char **argv)
} }
} }
dbDisconnect(current_host); dbDisconnect(current_host);
fputs("\n", result_file); fputs("\n", md_result_file);
if (result_file != stdout) if (md_result_file != stdout)
my_fclose(result_file, MYF(0)); my_fclose(md_result_file, MYF(0));
my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR)); my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR));
if (extended_insert) if (extended_insert)
dynstr_free(&extended_row); dynstr_free(&extended_row);

View File

@ -41,7 +41,7 @@ static char *field_escape(char *to,const char *from,uint length);
static char *add_load_option(char *ptr,const char *object, static char *add_load_option(char *ptr,const char *object,
const char *statement); const char *statement);
static my_bool verbose=0,lock_tables=0,ignore_errors=0,delete=0, static my_bool verbose=0,lock_tables=0,ignore_errors=0,opt_delete=0,
replace=0,silent=0,ignore=0,opt_compress=0,opt_local_file=0; replace=0,silent=0,ignore=0,opt_compress=0,opt_local_file=0;
static MYSQL mysql_connection; static MYSQL mysql_connection;
@ -54,7 +54,7 @@ static uint opt_mysql_port=0;
static my_string opt_mysql_unix_port=0; static my_string opt_mysql_unix_port=0;
#include "sslopt-vars.h" #include "sslopt-vars.h"
enum options {OPT_FTB=256, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC, enum mi_options {OPT_FTB=256, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC,
OPT_LOW_PRIORITY, OPT_CHARSETS_DIR, OPT_DEFAULT_CHARSET}; OPT_LOW_PRIORITY, OPT_CHARSETS_DIR, OPT_DEFAULT_CHARSET};
static struct option long_options[] = static struct option long_options[] =
@ -173,7 +173,8 @@ static int get_options(int *argc, char ***argv)
int c, option_index; int c, option_index;
my_bool tty_password=0; my_bool tty_password=0;
while ((c=getopt_long(*argc,*argv,"#::p::c:h:u:P:S:CdfilLrsvV?IW", while ((c=getopt_long(*argc,*argv,
(char*) "#::p::c:h:u:P:S:CdfilLrsvV?IW",
long_options, &option_index)) != EOF) long_options, &option_index)) != EOF)
{ {
switch(c) { switch(c) {
@ -190,7 +191,7 @@ static int get_options(int *argc, char ***argv)
charsets_dir= optarg; charsets_dir= optarg;
break; break;
case 'd': case 'd':
delete= 1; opt_delete= 1;
break; break;
case 'f': case 'f':
ignore_errors= 1; ignore_errors= 1;
@ -313,7 +314,7 @@ static int write_to_table(char *filename, MYSQL *sock)
else else
my_load_path(hard_path, filename, NULL); /* filename includes the path */ my_load_path(hard_path, filename, NULL); /* filename includes the path */
if (delete) if (opt_delete)
{ {
if (verbose) if (verbose)
fprintf(stdout, "Deleting the old data from table %s\n", tablename); fprintf(stdout, "Deleting the old data from table %s\n", tablename);

View File

@ -51,7 +51,11 @@
#include <mysql.h> #include <mysql.h>
#include <mysql_version.h> #include <mysql_version.h>
#include <m_ctype.h> #include <m_ctype.h>
#ifdef OS2
#include <config-os2.h>
#else
#include <my_config.h> #include <my_config.h>
#endif
#include <my_dir.h> #include <my_dir.h>
#include <hash.h> #include <hash.h>
#include <mysqld_error.h> #include <mysqld_error.h>
@ -829,6 +833,17 @@ int do_sleep(struct st_query* q)
if (!*p) if (!*p)
die("Missing argument in sleep\n"); die("Missing argument in sleep\n");
t.tv_usec = 0; t.tv_usec = 0;
#ifdef OS2
if (opt_sleep)
DosSleep( opt_sleep * 1000);
else
DosSleep( atof( p) * 1000);
return 0;
#else
if (opt_sleep) if (opt_sleep)
t.tv_sec = opt_sleep; t.tv_sec = opt_sleep;
else else
@ -858,6 +873,7 @@ int do_sleep(struct st_query* q)
} }
t.tv_usec *= dec_mul; t.tv_usec *= dec_mul;
return select(0,0,0,0, &t); return select(0,0,0,0, &t);
#endif
} }
static void get_file_name(char *filename, struct st_query* q) static void get_file_name(char *filename, struct st_query* q)
@ -1882,7 +1898,7 @@ static VAR* var_init(VAR* v, const char* name, int name_len, const char* val,
static void var_free(void* v) static void var_free(void* v)
{ {
my_free(((VAR*) v)->str_val, MYF(MY_WME)); my_free(((VAR*) v)->str_val, MYF(MY_WME));
my_free(v, MYF(MY_WME)); my_free((char*) v, MYF(MY_WME));
} }
@ -2744,7 +2760,7 @@ uint replace_strings(REPLACE *rep, my_string *start,uint *max_length,
{ {
reg1 REPLACE *rep_pos; reg1 REPLACE *rep_pos;
reg2 REPLACE_STRING *rep_str; reg2 REPLACE_STRING *rep_str;
my_string to,end,pos,new; my_string to,end,pos,new_str;
end=(to= *start) + *max_length-1; end=(to= *start) + *max_length-1;
rep_pos=rep+1; rep_pos=rep+1;
@ -2756,10 +2772,10 @@ uint replace_strings(REPLACE *rep, my_string *start,uint *max_length,
if (to == end) if (to == end)
{ {
(*max_length)+=8192; (*max_length)+=8192;
if (!(new=my_realloc(*start,*max_length,MYF(MY_WME)))) if (!(new_str=my_realloc(*start,*max_length,MYF(MY_WME))))
return (uint) -1; return (uint) -1;
to=new+(to - *start); to=new_str+(to - *start);
end=(*start=new)+ *max_length-1; end=(*start=new_str)+ *max_length-1;
} }
*to++= *from++; *to++= *from++;
} }
@ -2771,10 +2787,10 @@ uint replace_strings(REPLACE *rep, my_string *start,uint *max_length,
if (to == end) if (to == end)
{ {
(*max_length)*=2; (*max_length)*=2;
if (!(new=my_realloc(*start,*max_length,MYF(MY_WME)))) if (!(new_str=my_realloc(*start,*max_length,MYF(MY_WME))))
return (uint) -1; return (uint) -1;
to=new+(to - *start); to=new_str+(to - *start);
end=(*start=new)+ *max_length-1; end=(*start=new_str)+ *max_length-1;
} }
*to++= *pos; *to++= *pos;
} }

View File

@ -307,6 +307,7 @@ static char *static_strtok(char *s1,pchar chr);
* Macros and defines for testing file accessibility under UNIX and MSDOS. * Macros and defines for testing file accessibility under UNIX and MSDOS.
*/ */
#undef EXISTS
#if !defined(HAVE_ACCESS) || defined(MSDOS) #if !defined(HAVE_ACCESS) || defined(MSDOS)
#define EXISTS(pathname) (FALSE) /* Assume no existance */ #define EXISTS(pathname) (FALSE) /* Assume no existance */
#define Writable(name) (TRUE) #define Writable(name) (TRUE)
@ -489,8 +490,7 @@ static CODE_STATE static_code_state = { 0,0,"?func","?file",NULL,0,NULL,
* *
*/ */
void _db_push_ (control) void _db_push_ (const char *control)
const char *control;
{ {
reg1 char *scan; reg1 char *scan;
reg2 struct link *temp; reg2 struct link *temp;
@ -691,15 +691,14 @@ void _db_pop_ ()
* *
*/ */
void _db_enter_ (_func_, _file_, _line_, _sfunc_, _sfile_, _slevel_, void _db_enter_ (
_sframep_) const char *_func_,
const char *_func_; const char *_file_,
const char *_file_; uint _line_,
uint _line_; const char **_sfunc_,
const char **_sfunc_; const char **_sfile_,
const char **_sfile_; uint *_slevel_,
uint *_slevel_; char ***_sframep_ __attribute__((unused)))
char ***_sframep_ __attribute__((unused));
{ {
reg1 CODE_STATE *state; reg1 CODE_STATE *state;
@ -777,11 +776,11 @@ char ***_sframep_ __attribute__((unused));
* *
*/ */
void _db_return_ (_line_, _sfunc_, _sfile_, _slevel_) void _db_return_ (
uint _line_; uint _line_,
const char **_sfunc_; const char **_sfunc_,
const char **_sfile_; const char **_sfile_,
uint *_slevel_; uint *_slevel_)
{ {
CODE_STATE *state; CODE_STATE *state;
@ -851,9 +850,9 @@ uint *_slevel_;
* *
*/ */
void _db_pargs_ (_line_, keyword) void _db_pargs_ (
uint _line_; uint _line_,
const char *keyword; const char *keyword)
{ {
CODE_STATE *state=code_state(); CODE_STATE *state=code_state();
state->u_line = _line_; state->u_line = _line_;
@ -934,10 +933,11 @@ void _db_doprnt_ (const char *format,...)
* Is used to examine corrputed memory or arrays. * Is used to examine corrputed memory or arrays.
*/ */
void _db_dump_(_line_,keyword,memory,length) void _db_dump_(
uint _line_,length; uint _line_,
const char *keyword; const char *keyword,
const char *memory; const char *memory,
uint length)
{ {
int pos; int pos;
char dbuff[90]; char dbuff[90];
@ -1004,11 +1004,11 @@ const char *memory;
* *
*/ */
static struct link *ListParse (ctlp) static struct link *ListParse (
char *ctlp; char *ctlp)
{ {
REGISTER char *start; REGISTER char *start;
REGISTER struct link *new; REGISTER struct link *new_malloc;
REGISTER struct link *head; REGISTER struct link *head;
head = NULL; head = NULL;
@ -1020,10 +1020,10 @@ char *ctlp;
if (*ctlp == ',') { if (*ctlp == ',') {
*ctlp++ = EOS; *ctlp++ = EOS;
} }
new = (struct link *) DbugMalloc (sizeof (struct link)); new_malloc = (struct link *) DbugMalloc (sizeof (struct link));
new -> str = StrDup (start); new_malloc -> str = StrDup (start);
new -> next_link = head; new_malloc -> next_link = head;
head = new; head = new_malloc;
} }
return (head); return (head);
} }
@ -1052,9 +1052,9 @@ char *ctlp;
* *
*/ */
static BOOLEAN InList (linkp, cp) static BOOLEAN InList (
struct link *linkp; struct link *linkp,
const char *cp; const char *cp)
{ {
REGISTER struct link *scan; REGISTER struct link *scan;
REGISTER BOOLEAN result; REGISTER BOOLEAN result;
@ -1098,7 +1098,7 @@ const char *cp;
static void PushState () static void PushState ()
{ {
REGISTER struct state *new; REGISTER struct state *new_malloc;
if (!init_done) if (!init_done)
{ {
@ -1106,19 +1106,19 @@ static void PushState ()
init_done=TRUE; init_done=TRUE;
} }
(void) code_state(); /* Alloc memory */ (void) code_state(); /* Alloc memory */
new = (struct state *) DbugMalloc (sizeof (struct state)); new_malloc = (struct state *) DbugMalloc (sizeof (struct state));
new -> flags = 0; new_malloc -> flags = 0;
new -> delay = 0; new_malloc -> delay = 0;
new -> maxdepth = MAXDEPTH; new_malloc -> maxdepth = MAXDEPTH;
new -> sub_level=0; new_malloc -> sub_level=0;
new -> out_file = stderr; new_malloc -> out_file = stderr;
new -> prof_file = (FILE*) 0; new_malloc -> prof_file = (FILE*) 0;
new -> functions = NULL; new_malloc -> functions = NULL;
new -> p_functions = NULL; new_malloc -> p_functions = NULL;
new -> keywords = NULL; new_malloc -> keywords = NULL;
new -> processes = NULL; new_malloc -> processes = NULL;
new -> next_state = stack; new_malloc -> next_state = stack;
stack=new; stack=new_malloc;
} }
@ -1216,8 +1216,8 @@ static BOOLEAN DoProfile ()
* *
*/ */
BOOLEAN _db_keyword_ (keyword) BOOLEAN _db_keyword_ (
const char *keyword; const char *keyword)
{ {
REGISTER BOOLEAN result; REGISTER BOOLEAN result;
CODE_STATE *state; CODE_STATE *state;
@ -1256,8 +1256,8 @@ const char *keyword;
* *
*/ */
static void Indent (indent) static void Indent (
int indent; int indent)
{ {
REGISTER int count; REGISTER int count;
@ -1289,8 +1289,8 @@ int indent;
* *
*/ */
static void FreeList (linkp) static void FreeList (
struct link *linkp; struct link *linkp)
{ {
REGISTER struct link *old; REGISTER struct link *old;
@ -1325,13 +1325,13 @@ struct link *linkp;
*/ */
static char *StrDup (str) static char *StrDup (
const char *str; const char *str)
{ {
reg1 char *new; reg1 char *new_malloc;
new = DbugMalloc ((int) strlen (str) + 1); new_malloc = DbugMalloc ((int) strlen (str) + 1);
(void) strcpy (new, str); (void) strcpy (new_malloc, str);
return (new); return (new_malloc);
} }
@ -1354,8 +1354,8 @@ const char *str;
* *
*/ */
static void DoPrefix (_line_) static void DoPrefix (
uint _line_; uint _line_)
{ {
CODE_STATE *state; CODE_STATE *state;
state=code_state(); state=code_state();
@ -1419,7 +1419,7 @@ static void DBUGOpenFile (const char *name,int append)
} }
else else
{ {
if (!Writable(name)) if (!Writable((char*)name))
{ {
(void) fprintf (stderr, ERR_OPEN, _db_process_, name); (void) fprintf (stderr, ERR_OPEN, _db_process_, name);
perror (""); perror ("");
@ -1528,8 +1528,8 @@ static FILE *OpenProfile (const char *name)
* *
*/ */
static void CloseFile (fp) static void CloseFile (
FILE *fp; FILE *fp)
{ {
if (fp != stderr && fp != stdout) { if (fp != stderr && fp != stdout) {
if (fclose (fp) == EOF) { if (fclose (fp) == EOF) {
@ -1590,14 +1590,14 @@ static void DbugExit (const char *why)
* *
*/ */
static char *DbugMalloc (size) static char *DbugMalloc (
int size; int size)
{ {
register char *new; register char *new_malloc;
if (!(new = malloc ((unsigned int) size))) if (!(new_malloc = (char*) malloc ((unsigned int) size)))
DbugExit ("out of memory"); DbugExit ("out of memory");
return (new); return (new_malloc);
} }
@ -1606,9 +1606,9 @@ int size;
* separator (to allow directory-paths in dos). * separator (to allow directory-paths in dos).
*/ */
static char *static_strtok (s1, separator) static char *static_strtok (
char *s1; char *s1,
pchar separator; pchar separator)
{ {
static char *end = NULL; static char *end = NULL;
reg1 char *rtnval,*cpy; reg1 char *rtnval,*cpy;
@ -1692,8 +1692,8 @@ static char *BaseName (const char *pathname)
#ifndef Writable #ifndef Writable
static BOOLEAN Writable (pathname) static BOOLEAN Writable (
char *pathname; char *pathname)
{ {
REGISTER BOOLEAN granted; REGISTER BOOLEAN granted;
REGISTER char *lastslash; REGISTER char *lastslash;
@ -1746,8 +1746,8 @@ char *pathname;
*/ */
#ifndef ChangeOwner #ifndef ChangeOwner
static void ChangeOwner (pathname) static void ChangeOwner (
char *pathname; char *pathname)
{ {
if (chown (pathname, getuid (), getgid ()) == -1) if (chown (pathname, getuid (), getgid ()) == -1)
{ {
@ -1847,8 +1847,8 @@ EXPORT void _db_longjmp_ ()
#define HZ (50) /* Probably in some header somewhere */ #define HZ (50) /* Probably in some header somewhere */
#endif #endif
static int DelayArg (value) static int DelayArg (
int value; int value)
{ {
uint delayarg = 0; uint delayarg = 0;
@ -1868,8 +1868,8 @@ int value;
*/ */
#if ! defined(Delay) && ! defined(AMIGA) #if ! defined(Delay) && ! defined(AMIGA)
static int Delay (ticks) static int Delay (
int ticks; int ticks)
{ {
return ticks; return ticks;
} }
@ -1969,7 +1969,8 @@ void _db_unlock_file()
* own for whatever system that you have. * own for whatever system that you have.
*/ */
#ifdef HAVE_GETRUSAGE #ifndef THREAD
#if defined(HAVE_GETRUSAGE)
#include <sys/param.h> #include <sys/param.h>
#include <sys/resource.h> #include <sys/resource.h>
@ -1989,15 +1990,13 @@ static unsigned long Clock ()
return ((ru.ru_utime.tv_sec * 1000) + (ru.ru_utime.tv_usec / 1000)); return ((ru.ru_utime.tv_sec * 1000) + (ru.ru_utime.tv_usec / 1000));
} }
#else #elif defined(MSDOS) || defined(__WIN__) || defined(OS2)
#if defined(MSDOS) || defined(__WIN__)
static ulong Clock() static ulong Clock()
{ {
return clock()*(1000/CLOCKS_PER_SEC); return clock()*(1000/CLOCKS_PER_SEC);
} }
#else #elif defined (amiga)
#ifdef amiga
struct DateStamp { /* Yes, this is a hack, but doing it right */ struct DateStamp { /* Yes, this is a hack, but doing it right */
long ds_Days; /* is incredibly ugly without splitting this */ long ds_Days; /* is incredibly ugly without splitting this */
@ -2030,19 +2029,13 @@ static unsigned long Clock ()
} }
return (millisec); return (millisec);
} }
#else #else
#ifndef THREAD
static unsigned long Clock () static unsigned long Clock ()
{ {
return (0); return (0);
} }
#endif
#endif /* amiga */
#endif /* MSDOS || __WIN__ */
#endif /* RUSAGE */ #endif /* RUSAGE */
#endif /* THREADS */
#ifdef NO_VARARGS #ifdef NO_VARARGS

View File

@ -4,8 +4,8 @@
#include <global.h> #include <global.h>
int factorial (value) int factorial (
register int value; register int value)
{ {
DBUG_ENTER ("factorial"); DBUG_ENTER ("factorial");
DBUG_PRINT ("find", ("find %d factorial", value)); DBUG_PRINT ("find", ("find %d factorial", value));

822
include/config-os2.h Normal file
View File

@ -0,0 +1,822 @@
/* Copyright (C) 2000 MySQL AB & Yuri Dario
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/* Defines for OS2 to make it compatible for MySQL */
#ifndef __CONFIG_OS2_H__
#define __CONFIG_OS2_H__
#include <os2.h>
#include <math.h>
#include <io.h>
/* Define to name of system eg solaris*/
#define SYSTEM_TYPE "IBM OS/2 Warp"
/* Define to machine type name eg sun10 */
#define MACHINE_TYPE "i686"
/* Name of package */
#define PACKAGE "mysql"
/* Version number of package */
#define VERSION MYSQL_SERVER_VERSION
/* Default socket */
#define MYSQL_UNIX_ADDR "\\socket\\MySQL"
#define FN_LIBCHAR '\\'
#define FN_ROOTDIR "\\"
#define MY_NFILE 1024 /* This is only used to save filenames */
#define HAVE_ACCESS
#define DEFAULT_MYSQL_HOME "c:\\mysql"
#define DEFAULT_BASEDIR "C:\\"
#define SHAREDIR "share"
#define DEFAULT_CHARSET_HOME "C:/mysql/"
#define _POSIX_PATH_MAX 255
#define DWORD ULONG
#define O_SHARE 0x1000 /* Open file in sharing mode */
#define FILE_BINARY O_BINARY /* my_fopen in binary mode */
#define S_IROTH S_IREAD /* for my_lib */
#define O_NONBLOCK 0x10
#define NO_OPEN_3 /* For my_create() */
#define SIGQUIT SIGTERM /* No SIGQUIT */
#define SIGALRM 14 /* Alarm */
#define NO_FCNTL_NONBLOCK
#define EFBIG E2BIG
//#define ENFILE EMFILE
//#define ENAMETOOLONG (EOS2ERR+2)
//#define ETIMEDOUT 145
//#define EPIPE 146
#define EROFS 147
#define sleep(A) DosSleep((A)*1000)
#define closesocket(A) soclose(A)
#define F_OK 0
#define W_OK 2
#define bzero(x,y) memset((x),'\0',(y))
#define bcopy(x,y,z) memcpy((y),(x),(z))
#define bcmp(x,y,z) memcmp((y),(x),(z))
#define F_RDLCK 4 /* Read lock. */
#define F_WRLCK 2 /* Write lock. */
#define F_UNLCK 0 /* Remove lock. */
#define S_IFMT 0xF000 /* Mask for file type */
#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */
#ifdef __cplusplus
extern "C"
#endif
double _cdecl rint( double nr);
DWORD TlsAlloc( void);
BOOL TlsFree( DWORD);
PVOID TlsGetValue( DWORD);
BOOL TlsSetValue( DWORD, PVOID);
/* support for > 2GB file size */
#define SIZEOF_OFF_T 8
#define lseek(A,B,C) _lseek64( A, B, C)
#define tell(A) _lseek64( A, 0, SEEK_CUR)
/* Some typedefs */
typedef ulonglong os_off_t;
/* config.h. Generated automatically by configure. */
/* config.h.in. Generated automatically from configure.in by autoheader. */
/* Define if using alloca.c. */
/* #undef C_ALLOCA */
/* Define to empty if the keyword does not work. */
/* #undef const */
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
This function is required for alloca.c support on those systems. */
/* #undef CRAY_STACKSEG_END */
/* Define if you have alloca, as a function or macro. */
#define HAVE_ALLOCA 1
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
//#define HAVE_ALLOCA_H 1
/* Define if you don't have vprintf but do have _doprnt. */
/* #undef HAVE_DOPRNT */
/* Define if you have a working `mmap' system call. */
/* #undef HAVE_MMAP */
/* Define if system calls automatically restart after interruption
by a signal. */
/* #undef HAVE_RESTARTABLE_SYSCALLS */
/* Define if your struct stat has st_rdev. */
#define HAVE_ST_RDEV 1
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
//#define HAVE_SYS_WAIT_H 1
/* Define if you don't have tm_zone but do have the external array
tzname. */
#define HAVE_TZNAME 1
/* Define if utime(file, NULL) sets file's timestamp to the present. */
#define HAVE_UTIME_NULL 1
/* Define if you have the vprintf function. */
#define HAVE_VPRINTF 1
/* Define as __inline if that's what the C compiler calls it. */
/* #undef inline */
/* Define to `long' if <sys/types.h> doesn't define. */
/* #undef off_t */
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void
/* Define to `unsigned' if <sys/types.h> doesn't define. */
/* #undef size_t */
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at run-time.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown
*/
#define STACK_DIRECTION -1
/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */
/* #undef STAT_MACROS_BROKEN */
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#define TIME_WITH_SYS_TIME 1
/* Define if your <sys/time.h> declares struct tm. */
/* #undef TM_IN_SYS_TIME */
/* Define if your processor stores words with the most significant
byte first (like Motorola and SPARC, unlike Intel and VAX). */
/* #undef WORDS_BIGENDIAN */
/* Version of .frm files */
#define DOT_FRM_VERSION 6
/* READLINE: */
#define FIONREAD_IN_SYS_IOCTL 1
/* READLINE: Define if your system defines TIOCGWINSZ in sys/ioctl.h. */
/* #undef GWINSZ_IN_SYS_IOCTL */
/* Do we have FIONREAD */
#define FIONREAD_IN_SYS_IOCTL 1
/* atomic_add() from <asm/atomic.h> (Linux only) */
/* #undef HAVE_ATOMIC_ADD */
/* atomic_sub() from <asm/atomic.h> (Linux only) */
/* #undef HAVE_ATOMIC_SUB */
/* bool is not defined by all C++ compilators */
#define HAVE_BOOL 1
/* Have berkeley db installed */
//#define HAVE_BERKELEY_DB 1
/* DSB style signals ? */
/* #undef HAVE_BSD_SIGNALS */
/* Can netinet be included */
/* #undef HAVE_BROKEN_NETINET_INCLUDES */
/* READLINE: */
/* #undef HAVE_BSD_SIGNALS */
/* ZLIB and compress: */
#define HAVE_COMPRESS 1
/* Define if we are using OSF1 DEC threads */
/* #undef HAVE_DEC_THREADS */
/* Define if we are using OSF1 DEC threads on 3.2 */
/* #undef HAVE_DEC_3_2_THREADS */
/* fp_except from ieeefp.h */
/* #undef HAVE_FP_EXCEPT */
/* READLINE: */
/* #undef HAVE_GETPW_DECLS */
/* Solaris define gethostbyname_r with 5 arguments. glibc2 defines
this with 6 arguments */
/* #undef HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE */
/* In OSF 4.0f the 3'd argument to gethostname_r is hostent_data * */
/* #undef HAVE_GETHOSTBYNAME_R_RETURN_INT */
/* Define if int8, int16 and int32 types exist */
/* #undef HAVE_INT_8_16_32 */
/* Define if have -lwrap */
/* #undef HAVE_LIBWRAP */
/* Define if we are using Xavier Leroy's LinuxThreads */
/* #undef HAVE_LINUXTHREADS */
/* Do we use user level threads */
/* #undef HAVE_mit_thread */
/* For some non posix threads */
/* #undef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC */
/* For some non posix threads */
/* #undef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */
/* READLINE: */
#define HAVE_POSIX_SIGNALS 1
/* sigwait with one argument */
/* #undef HAVE_NONPOSIX_SIGWAIT */
/* pthread_attr_setscope */
#define HAVE_PTHREAD_ATTR_SETSCOPE 1
/* POSIX readdir_r */
/* #undef HAVE_READDIR_R */
/* POSIX sigwait */
/* #undef HAVE_SIGWAIT */
/* crypt */
#define HAVE_CRYPT 1
/* Solaris define gethostbyaddr_r with 7 arguments. glibc2 defines
this with 8 arguments */
/* #undef HAVE_SOLARIS_STYLE_GETHOST */
/* Timespec has a ts_sec instead of tv_sev */
#define HAVE_TIMESPEC_TS_SEC 1
/* Have the tzname variable */
#define HAVE_TZNAME 1
/* Define if the system files define uchar */
/* #undef HAVE_UCHAR */
/* Define if the system files define uint */
/* #undef HAVE_UINT */
/* Define if the system files define ulong */
/* #undef HAVE_ULONG */
/* UNIXWARE7 threads are not posix */
/* #undef HAVE_UNIXWARE7_THREADS */
/* new UNIXWARE7 threads that are not yet posix */
/* #undef HAVE_UNIXWARE7_POSIX */
/* READLINE: */
/* #undef HAVE_USG_SIGHOLD */
/* Define if want -lwrap */
/* #undef LIBWRAP */
/* mysql client protocoll version */
#define PROTOCOL_VERSION 10
/* Define if qsort returns void */
#define QSORT_TYPE_IS_VOID 1
/* Define as the return type of qsort (int or void). */
#define RETQSORTTYPE void
/* Define as the base type of the last arg to accept */
#define SOCKET_SIZE_TYPE int
/* Last argument to get/setsockopt */
/* #undef SOCKOPT_OPTLEN_TYPE */
/* #undef SPEED_T_IN_SYS_TYPES */
/* #undef SPRINTF_RETURNS_PTR */
#define SPRINTF_RETURNS_INT 1
/* #undef SPRINTF_RETURNS_GARBAGE */
/* #undef STRUCT_DIRENT_HAS_D_FILENO */
#define STRUCT_DIRENT_HAS_D_INO 1
/* Define if you want to have threaded code. This may be undef on client code */
#define THREAD 1
/* Should be client be thread safe */
/* #undef THREAD_SAFE_CLIENT */
/* READLINE: */
/* #undef TIOCSTAT_IN_SYS_IOCTL */
/* Use multi-byte character routines */
/* #undef USE_MB */
/* #undef USE_MB_IDENT */
/* Use MySQL RAID */
/* #undef USE_RAID */
/* Use strcoll() functions when comparing and sorting. */
/* #undef USE_STRCOLL */
/* READLINE: */
#define VOID_SIGHANDLER 1
/* The number of bytes in a char. */
#define SIZEOF_CHAR 1
/* The number of bytes in a int. */
#define SIZEOF_INT 4
/* The number of bytes in a long. */
#define SIZEOF_LONG 4
/* The number of bytes in a long long. */
#define SIZEOF_LONG_LONG 8
/* Define if you have the alarm function. */
#define HAVE_ALARM 1
/* Define if you have the atod function. */
/* #undef HAVE_ATOD */
/* Define if you have the bcmp function. */
#define HAVE_BCMP 1
/* Define if you have the bfill function. */
/* #undef HAVE_BFILL */
/* Define if you have the bmove function. */
/* #undef HAVE_BMOVE */
/* Define if you have the bzero function. */
#define HAVE_BZERO 1
/* Define if you have the chsize function. */
#define HAVE_CHSIZE 1
/* Define if you have the cuserid function. */
//#define HAVE_CUSERID 1
/* Define if you have the dlerror function. */
#define HAVE_DLERROR 1
/* Define if you have the dlopen function. */
#define HAVE_DLOPEN 1
/* Define if you have the fchmod function. */
/* #undef HAVE_FCHMOD */
/* Define if you have the fcntl function. */
//#define HAVE_FCNTL 1
/* Define if you have the fconvert function. */
/* #undef HAVE_FCONVERT */
/* Define if you have the finite function. */
/* #undef HAVE_FINITE */
/* Define if you have the fpresetsticky function. */
/* #undef HAVE_FPRESETSTICKY */
/* Define if you have the fpsetmask function. */
/* #undef HAVE_FPSETMASK */
/* Define if you have the fseeko function. */
/* #undef HAVE_FSEEKO */
/* Define if you have the ftruncate function. */
//#define HAVE_FTRUNCATE 1
/* Define if you have the getcwd function. */
#define HAVE_GETCWD 1
/* Define if you have the gethostbyaddr_r function. */
/* #undef HAVE_GETHOSTBYADDR_R */
/* Define if you have the gethostbyname_r function. */
/* #undef HAVE_GETHOSTBYNAME_R */
/* Define if you have the getpagesize function. */
#define HAVE_GETPAGESIZE 1
/* Define if you have the getpass function. */
//#define HAVE_GETPASS 1
/* Define if you have the getpassphrase function. */
/* #undef HAVE_GETPASSPHRASE */
/* Define if you have the getpwnam function. */
//#define HAVE_GETPWNAM 1
/* Define if you have the getpwuid function. */
//#define HAVE_GETPWUID 1
/* Define if you have the getrlimit function. */
/* #undef HAVE_GETRLIMIT */
/* Define if you have the getrusage function. */
/* #undef HAVE_GETRUSAGE */
/* Define if you have the getwd function. */
#define HAVE_GETWD 1
/* Define if you have the index function. */
#define HAVE_INDEX 1
/* Define if you have the initgroups function. */
/* #undef HAVE_INITGROUPS */
/* Define if you have the localtime_r function. */
#define HAVE_LOCALTIME_R 1
/* Define if you have the locking function. */
/* #undef HAVE_LOCKING */
/* Define if you have the longjmp function. */
#define HAVE_LONGJMP 1
/* Define if you have the lrand48 function. */
/* #undef HAVE_LRAND48 */
/* Define if you have the lstat function. */
/* #undef HAVE_LSTAT */
/* Define if you have the madvise function. */
/* #undef HAVE_MADVISE */
/* Define if you have the memcpy function. */
#define HAVE_MEMCPY 1
/* Define if you have the memmove function. */
#define HAVE_MEMMOVE 1
/* Define if you have the mkstemp function. */
//#define HAVE_MKSTEMP 1
/* Define if you have the mlockall function. */
/* #undef HAVE_MLOCKALL */
/* Define if you have the perror function. */
#define HAVE_PERROR 1
/* Define if you have the poll function. */
/* #undef HAVE_POLL */
/* Define if you have the pread function. */
/* #undef HAVE_PREAD */
/* Define if you have the pthread_attr_create function. */
/* #undef HAVE_PTHREAD_ATTR_CREATE */
/* Define if you have the pthread_attr_setprio function. */
#define HAVE_PTHREAD_ATTR_SETPRIO 1
/* Define if you have the pthread_attr_setschedparam function. */
/* #undef HAVE_PTHREAD_ATTR_SETSCHEDPARAM */
/* Define if you have the pthread_attr_setstacksize function. */
#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1
/* Define if you have the pthread_condattr_create function. */
/* #undef HAVE_PTHREAD_CONDATTR_CREATE */
/* Define if you have the pthread_getsequence_np function. */
/* #undef HAVE_PTHREAD_GETSEQUENCE_NP */
/* Define if you have the pthread_init function. */
/* #undef HAVE_PTHREAD_INIT */
/* Define if you have the pthread_rwlock_rdlock function. */
/* #undef HAVE_PTHREAD_RWLOCK_RDLOCK */
/* Define if you have the pthread_setprio function. */
#define HAVE_PTHREAD_SETPRIO 1
/* Define if you have the pthread_setprio_np function. */
/* #undef HAVE_PTHREAD_SETPRIO_NP */
/* Define if you have the pthread_setschedparam function. */
/* #undef HAVE_PTHREAD_SETSCHEDPARAM */
/* Define if you have the pthread_sigmask function. */
#define HAVE_PTHREAD_SIGMASK 1
/* Define if you have the putenv function. */
#define HAVE_PUTENV 1
/* Define if you have the readlink function. */
/* #undef HAVE_READLINK */
/* Define if you have the realpath function. */
/* #undef HAVE_REALPATH */
/* Define if you have the rename function. */
#define HAVE_RENAME 1
/* Define if you have the rint function. */
#define HAVE_RINT 1
/* Define if you have the rwlock_init function. */
/* #undef HAVE_RWLOCK_INIT */
/* Define if you have the select function. */
#define HAVE_SELECT 1
/* Define if you have the setenv function. */
/* #undef HAVE_SETENV */
/* Define if you have the setlocale function. */
#define HAVE_SETLOCALE 1
/* Define if you have the setupterm function. */
/* #undef HAVE_SETUPTERM */
/* Define if you have the sighold function. */
/* #undef HAVE_SIGHOLD */
/* Define if you have the sigset function. */
/* #undef HAVE_SIGSET */
/* Define if you have the sigthreadmask function. */
/* #undef HAVE_SIGTHREADMASK */
/* Define if you have the snprintf function. */
//#define HAVE_SNPRINTF 1
/* Define if you have the socket function. */
#define HAVE_SOCKET 1
/* Define if you have the stpcpy function. */
/* #undef HAVE_STPCPY */
/* Define if you have the strcasecmp function. */
/* #undef HAVE_STRCASECMP */
/* Define if you have the strcoll function. */
#define HAVE_STRCOLL 1
/* Define if you have the strerror function. */
#define HAVE_STRERROR 1
/* Define if you have the strnlen function. */
/* #undef HAVE_STRNLEN */
/* Define if you have the strpbrk function. */
#define HAVE_STRPBRK 1
/* Define if you have the strstr function. */
#define HAVE_STRSTR 1
/* Define if you have the strtok_r function. */
/* #undef HAVE_STRTOK_R */
/* Define if you have the strtol function. */
#define HAVE_STRTOL 1
/* Define if you have the strtoul function. */
#define HAVE_STRTOUL 1
/* Define if you have the strtoull function. */
/* #undef HAVE_STRTOULL */
/* Define if you have the tcgetattr function. */
#define HAVE_TCGETATTR 1
/* Define if you have the tell function. */
#define HAVE_TELL 1
/* Define if you have the tempnam function. */
#define HAVE_TEMPNAM 1
/* Define if you have the thr_setconcurrency function. */
/* #undef HAVE_THR_SETCONCURRENCY */
/* Define if you have the vidattr function. */
/* #undef HAVE_VIDATTR */
/* Define if you have the <alloca.h> header file. */
//#define HAVE_ALLOCA_H 1
/* Define if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1
/* Define if you have the <asm/termbits.h> header file. */
/* #undef HAVE_ASM_TERMBITS_H */
/* Define if you have the <crypt.h> header file. */
#define HAVE_CRYPT_H 1
/* Define if you have the <curses.h> header file. */
//#define HAVE_CURSES_H 1
/* Define if you have the <dirent.h> header file. */
//#define HAVE_DIRENT_H 1
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define if you have the <float.h> header file. */
#define HAVE_FLOAT_H 1
/* Define if you have the <floatingpoint.h> header file. */
/* #undef HAVE_FLOATINGPOINT_H */
/* Define if you have the <grp.h> header file. */
//#define HAVE_GRP_H 1
/* Define if you have the <ieeefp.h> header file. */
/* #undef HAVE_IEEEFP_H */
/* Define if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1
/* Define if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define if you have the <ndir.h> header file. */
/* #undef HAVE_NDIR_H */
/* Define if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1
/* Define if you have the <paths.h> header file. */
/* #undef HAVE_PATHS_H */
/* Define if you have the <pwd.h> header file. */
//#define HAVE_PWD_H 1
/* Define if you have the <sched.h> header file. */
/* #undef HAVE_SCHED_H */
/* Define if you have the <select.h> header file. */
/* #undef HAVE_SELECT_H */
/* Define if you have the <stdarg.h> header file. */
#define HAVE_STDARG_H 1
/* Define if you have the <stddef.h> header file. */
#define HAVE_STDDEF_H 1
/* Define if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define if you have the <strings.h> header file. */
//#define HAVE_STRINGS_H 1
/* Define if you have the <synch.h> header file. */
/* #undef HAVE_SYNCH_H */
/* Define if you have the <sys/dir.h> header file. */
//#define HAVE_SYS_DIR_H 1
/* Define if you have the <sys/file.h> header file. */
//#define HAVE_SYS_FILE_H 1
/* Define if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1
/* Define if you have the <sys/mman.h> header file. */
/* #undef HAVE_SYS_MMAN_H */
/* Define if you have the <sys/ndir.h> header file. */
/* #undef HAVE_SYS_NDIR_H */
/* Define if you have the <sys/pte.h> header file. */
/* #undef HAVE_SYS_PTE_H */
/* Define if you have the <sys/ptem.h> header file. */
/* #undef HAVE_SYS_PTEM_H */
/* Define if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1
/* Define if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1
/* Define if you have the <sys/stream.h> header file. */
/* #undef HAVE_SYS_STREAM_H */
/* Define if you have the <sys/timeb.h> header file. */
#define HAVE_SYS_TIMEB_H 1
/* Define if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define if you have the <sys/un.h> header file. */
#define HAVE_SYS_UN_H 1
/* Define if you have the <sys/utime.h> header file. */
#define HAVE_SYS_UTIME_H 1
/* Define if you have the <sys/vadvise.h> header file. */
/* #undef HAVE_SYS_VADVISE_H */
/* Define if you have the <sys/wait.h> header file. */
//#define HAVE_SYS_WAIT_H 1
/* Define if you have the <term.h> header file. */
/* #undef HAVE_TERM_H */
/* Define if you have the <termbits.h> header file. */
/* #undef HAVE_TERMBITS_H */
/* Define if you have the <termcap.h> header file. */
//#define HAVE_TERMCAP_H 1
/* Define if you have the <termio.h> header file. */
//#define HAVE_TERMIO_H 1
/* Define if you have the <termios.h> header file. */
//#define HAVE_TERMIOS_H 1
/* Define if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define if you have the <utime.h> header file. */
#define HAVE_UTIME_H 1
/* Define if you have the <varargs.h> header file. */
#define HAVE_VARARGS_H 1
/* Define if you have the bind library (-lbind). */
/* #undef HAVE_LIBBIND */
/* Define if you have the c_r library (-lc_r). */
/* #undef HAVE_LIBC_R */
/* Define if you have the compat library (-lcompat). */
/* #undef HAVE_LIBCOMPAT */
/* Define if you have the crypt library (-lcrypt). */
#define HAVE_LIBCRYPT 1
/* Define if you have the dl library (-ldl). */
#define HAVE_LIBDL 1
/* Define if you have the gen library (-lgen). */
/* #undef HAVE_LIBGEN */
/* Define if you have the m library (-lm). */
#define HAVE_LIBM 1
/* Define if you have the nsl library (-lnsl). */
/* #undef HAVE_LIBNSL */
/* Define if you have the nsl_r library (-lnsl_r). */
/* #undef HAVE_LIBNSL_R */
/* Define if you have the pthread library (-lpthread). */
/* #undef HAVE_LIBPTHREAD */
/* Define if you have the socket library (-lsocket). */
/* #undef HAVE_LIBSOCKET */
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */
/* Define to make fseeko etc. visible, on some hosts. */
/* #undef _LARGEFILE_SOURCE */
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
#endif // __CONFIG_OS2_H__

View File

@ -29,6 +29,7 @@ extern const char *client_errors[]; /* Error messages */
#define CR_MIN_ERROR 2000 /* For easier client code */ #define CR_MIN_ERROR 2000 /* For easier client code */
#define CR_MAX_ERROR 2999 #define CR_MAX_ERROR 2999
#undef ER
#define ER(X) client_errors[(X)-CR_MIN_ERROR] #define ER(X) client_errors[(X)-CR_MIN_ERROR]
#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */ #define CLIENT_ERRMAP 2 /* Errormap used by my_error() */

View File

@ -43,14 +43,14 @@
#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) #if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)
#include <config-win.h> #include <config-win.h>
#elif defined(OS2)
#include <config-os2.h>
#else #else
#include <my_config.h> #include <my_config.h>
#endif #if defined(__cplusplus) && defined(inline)
#if defined(__cplusplus)
#if defined(inline)
#undef inline /* fix configure problem */ #undef inline /* fix configure problem */
#endif #endif
#endif /* _cplusplus */ #endif /* _WIN32... */
/* Fix problem with S_ISLNK() on Linux */ /* Fix problem with S_ISLNK() on Linux */
#if defined(HAVE_LINUXTHREADS) #if defined(HAVE_LINUXTHREADS)
@ -76,7 +76,7 @@
#define __STDC_EXT__ 1 /* To get large file support on hpux */ #define __STDC_EXT__ 1 /* To get large file support on hpux */
#endif #endif
#if defined(THREAD) && !defined(__WIN__) #if defined(THREAD) && !defined(__WIN__) && !defined(OS2)
#ifndef _POSIX_PTHREAD_SEMANTICS #ifndef _POSIX_PTHREAD_SEMANTICS
#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ #define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */
#endif #endif
@ -220,7 +220,9 @@
#define POSIX_MISTAKE 1 /* regexp: Fix stupid spec error */ #define POSIX_MISTAKE 1 /* regexp: Fix stupid spec error */
#define USE_REGEX 1 /* We want the use the regex library */ #define USE_REGEX 1 /* We want the use the regex library */
/* Do not define for ultra sparcs */ /* Do not define for ultra sparcs */
#ifndef OS2
#define USE_BMOVE512 1 /* Use this unless the system bmove is faster */ #define USE_BMOVE512 1 /* Use this unless the system bmove is faster */
#endif
/* Paranoid settings. Define I_AM_PARANOID if you are paranoid */ /* Paranoid settings. Define I_AM_PARANOID if you are paranoid */
#ifdef I_AM_PARANOID #ifdef I_AM_PARANOID
@ -470,7 +472,11 @@ extern double my_atof(const char*);
#endif #endif
#undef remove /* Crashes MySQL on SCO 5.0.0 */ #undef remove /* Crashes MySQL on SCO 5.0.0 */
#ifndef __WIN__ #ifndef __WIN__
#ifdef OS2
#define closesocket(A) soclose(A)
#else
#define closesocket(A) close(A) #define closesocket(A) close(A)
#endif
#ifndef ulonglong2double #ifndef ulonglong2double
#define ulonglong2double(A) ((double) (A)) #define ulonglong2double(A) ((double) (A))
#define my_off_t2double(A) ((double) (A)) #define my_off_t2double(A) ((double) (A))
@ -559,9 +565,13 @@ typedef long my_ptrdiff_t;
#ifndef NEAR #ifndef NEAR
#define NEAR /* Who needs segments ? */ #define NEAR /* Who needs segments ? */
#define FAR /* On a good machine */ #define FAR /* On a good machine */
#ifndef HUGE_PTR
#define HUGE_PTR #define HUGE_PTR
#endif #endif
#ifndef STDCALL #endif
#if defined(__IBMC__) || defined(__IBMCPP__)
#define STDCALL _System _Export
#elif !defined( STDCALL)
#define STDCALL #define STDCALL
#endif #endif
@ -629,10 +639,20 @@ typedef ulonglong my_off_t;
typedef unsigned long my_off_t; typedef unsigned long my_off_t;
#endif #endif
#define MY_FILEPOS_ERROR (~(my_off_t) 0) #define MY_FILEPOS_ERROR (~(my_off_t) 0)
#ifndef __WIN__ #if !defined(__WIN__) && !defined(OS2)
typedef off_t os_off_t; typedef off_t os_off_t;
#endif #endif
#if defined(__WIN__)
#define socket_errno WSAGetLastError()
#elif defined(OS2)
#define socket_errno sock_errno()
#define closesocket(A) soclose(A)
#else
#define socket_errno errno
#define closesocket(A) close(A)
#endif
typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */ typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */
typedef short int15; /* Most effective integer 0 <= x <= 32767 */ typedef short int15; /* Most effective integer 0 <= x <= 32767 */
typedef char *my_string; /* String of characters */ typedef char *my_string; /* String of characters */

View File

@ -25,9 +25,19 @@
#define ETIME ETIMEDOUT /* For FreeBSD */ #define ETIME ETIMEDOUT /* For FreeBSD */
#endif #endif
#if defined(__WIN__) #if defined(__WIN__) || defined(OS2)
#ifdef OS2
typedef ULONG HANDLE;
typedef ULONG DWORD;
typedef int sigset_t;
#endif
#ifdef OS2
typedef HMTX pthread_mutex_t;
#else
typedef CRITICAL_SECTION pthread_mutex_t; typedef CRITICAL_SECTION pthread_mutex_t;
#endif
typedef HANDLE pthread_t; typedef HANDLE pthread_t;
typedef struct thread_attr { typedef struct thread_attr {
DWORD dwStackSize ; DWORD dwStackSize ;
@ -46,19 +56,30 @@ typedef struct st_pthread_link {
typedef struct { typedef struct {
uint32 waiting; uint32 waiting;
#ifdef OS2
HEV semaphore;
#else
HANDLE semaphore; HANDLE semaphore;
#endif
} pthread_cond_t; } pthread_cond_t;
#ifndef OS2
struct timespec { /* For pthread_cond_timedwait() */ struct timespec { /* For pthread_cond_timedwait() */
time_t tv_sec; time_t tv_sec;
long tv_nsec; long tv_nsec;
}; };
#endif
typedef int pthread_mutexattr_t; typedef int pthread_mutexattr_t;
#define win_pthread_self my_thread_var->pthread_self #define win_pthread_self my_thread_var->pthread_self
#ifdef OS2
#define pthread_handler_decl(A,B) void * _Optlink A(void *B)
typedef void * (_Optlink *pthread_handler)(void *);
#else
#define pthread_handler_decl(A,B) void * __cdecl A(void *B) #define pthread_handler_decl(A,B) void * __cdecl A(void *B)
typedef void * (__cdecl *pthread_handler)(void *); typedef void * (__cdecl *pthread_handler)(void *);
#endif
void win_pthread_init(void); void win_pthread_init(void);
int win_pthread_setspecific(void *A,void *B,uint length); int win_pthread_setspecific(void *A,void *B,uint length);
@ -78,12 +99,14 @@ struct tm *localtime_r(const time_t *timep,struct tm *tmp);
void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/
#ifndef OS2
#define ETIMEDOUT 145 /* Win32 doesn't have this */ #define ETIMEDOUT 145 /* Win32 doesn't have this */
#define getpid() GetCurrentThreadId() #define getpid() GetCurrentThreadId()
#endif
#define pthread_self() win_pthread_self #define pthread_self() win_pthread_self
#define HAVE_LOCALTIME_R #define HAVE_LOCALTIME_R 1
#define _REENTRANT #define _REENTRANT 1
#define HAVE_PTHREAD_ATTR_SETSTACKSIZE #define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1
#ifdef USE_TLS /* For LIBMYSQL.DLL */ #ifdef USE_TLS /* For LIBMYSQL.DLL */
#undef SAFE_MUTEX /* This will cause conflicts */ #undef SAFE_MUTEX /* This will cause conflicts */
@ -105,13 +128,23 @@ void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/
#endif /* USE_TLS */ #endif /* USE_TLS */
#define pthread_equal(A,B) ((A) == (B)) #define pthread_equal(A,B) ((A) == (B))
#ifdef OS2
int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
int pthread_mutex_lock (pthread_mutex_t *);
int pthread_mutex_unlock (pthread_mutex_t *);
int pthread_mutex_destroy (pthread_mutex_t *);
#define my_pthread_setprio(A,B) DosSetPriority(PRTYS_THREAD,PRTYC_NOCHANGE, B, A)
#define pthread_kill(A,B) raise(B)
#else
#define pthread_mutex_init(A,B) InitializeCriticalSection(A) #define pthread_mutex_init(A,B) InitializeCriticalSection(A)
#define pthread_mutex_lock(A) (EnterCriticalSection(A),0) #define pthread_mutex_lock(A) (EnterCriticalSection(A),0)
#define pthread_mutex_unlock(A) LeaveCriticalSection(A) #define pthread_mutex_unlock(A) LeaveCriticalSection(A)
#define pthread_mutex_destroy(A) DeleteCriticalSection(A) #define pthread_mutex_destroy(A) DeleteCriticalSection(A)
#define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B)) #define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B))
/* Dummy defines for easier code */
#define pthread_kill(A,B) pthread_dummy(0) #define pthread_kill(A,B) pthread_dummy(0)
#endif /* OS2 */
/* Dummy defines for easier code */
#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) #define pthread_attr_setdetachstate(A,B) pthread_dummy(0)
#define my_pthread_attr_setprio(A,B) pthread_attr_setprio(A,B) #define my_pthread_attr_setprio(A,B) pthread_attr_setprio(A,B)
#define pthread_attr_setscope(A,B) #define pthread_attr_setscope(A,B)
@ -311,12 +344,15 @@ extern void my_pthread_attr_setprio(pthread_attr_t *attr, int priority);
#undef HAVE_GETHOSTBYADDR_R /* No definition */ #undef HAVE_GETHOSTBYADDR_R /* No definition */
#endif #endif
#ifndef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC #if defined(OS2)
#define my_pthread_getspecific(T,A) ((T) &(A))
#define pthread_setspecific(A,B) win_pthread_setspecific(&(A),(B),sizeof(A))
#elif !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC)
#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) #define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B))
#else #else
#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) #define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B))
void *my_pthread_getspecific_imp(pthread_key_t key); void *my_pthread_getspecific_imp(pthread_key_t key);
#endif #endif /* OS2 */
#ifndef HAVE_LOCALTIME_R #ifndef HAVE_LOCALTIME_R
struct tm *localtime_r(const time_t *clock, struct tm *res); struct tm *localtime_r(const time_t *clock, struct tm *res);

View File

@ -126,6 +126,7 @@ extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick;
extern ulonglong safemalloc_mem_limit; extern ulonglong safemalloc_mem_limit;
#else #else
#define my_checkmalloc() (0) #define my_checkmalloc() (0)
#undef TERMINATE
#define TERMINATE(A) {} #define TERMINATE(A) {}
#define QUICK_SAFEMALLOC #define QUICK_SAFEMALLOC
#define NORMAL_SAFEMALLOC #define NORMAL_SAFEMALLOC

View File

@ -233,10 +233,4 @@ void my_thread_end(void);
#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ #define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
#ifdef __WIN__
#define socket_errno WSAGetLastError()
#else
#define socket_errno errno
#endif
#endif #endif

View File

@ -65,7 +65,7 @@ typedef struct st_thr_alarm_entry
rf_SetTimer crono; rf_SetTimer crono;
} thr_alarm_entry; } thr_alarm_entry;
#elif defined(__EMX__) #elif defined(__EMX__) || defined(OS2)
typedef struct st_thr_alarm_entry typedef struct st_thr_alarm_entry
{ {

View File

@ -44,7 +44,7 @@ SET_STACK_SIZE(9000) /* Minimum stack size for program */
#define T_SORT_RECORDS 4096 #define T_SORT_RECORDS 4096
#define T_SORT_INDEX 8192 #define T_SORT_INDEX 8192
#define T_WAIT_FOREVER 16384 #define T_WAIT_FOREVER 16384
#define T_REP_BY_SORT 32768 #define T_REP_BY_SORT 32768L
#define O_NEW_INDEX 1 /* Bits set in out_flag */ #define O_NEW_INDEX 1 /* Bits set in out_flag */
@ -74,17 +74,17 @@ SET_STACK_SIZE(9000) /* Minimum stack size for program */
#define UPDATE_STAT 2 #define UPDATE_STAT 2
#define UPDATE_SORT 4 #define UPDATE_SORT 4
typedef struct st_sort_key_blocks { /* Used when sorting */ typedef struct st_isam_sort_key_blocks { /* Used when sorting */
uchar *buff,*end_pos; uchar *buff,*end_pos;
uchar lastkey[N_MAX_POSSIBLE_KEY_BUFF]; uchar lastkey[N_MAX_POSSIBLE_KEY_BUFF];
uint last_length; uint last_length;
int inited; int inited;
} SORT_KEY_BLOCKS; } ISAM_SORT_KEY_BLOCKS;
typedef struct st_sort_info { typedef struct st_isam_sort_info {
N_INFO *info; N_INFO *info;
enum data_file_type new_data_file_type; enum data_file_type new_data_file_type;
SORT_KEY_BLOCKS *key_block,*key_block_end; ISAM_SORT_KEY_BLOCKS *key_block,*key_block_end;
uint key,find_length; uint key,find_length;
ulong pos,max_pos,filepos,start_recpos,filelength,dupp,max_records,unique, ulong pos,max_pos,filepos,start_recpos,filelength,dupp,max_records,unique,
buff_length; buff_length;
@ -92,9 +92,9 @@ typedef struct st_sort_info {
char *record,*buff; char *record,*buff;
N_KEYDEF *keyinfo; N_KEYDEF *keyinfo;
N_KEYSEG *keyseg; N_KEYSEG *keyseg;
} SORT_INFO; } ISAM_SORT_INFO;
enum options {OPT_CHARSETS_DIR=256}; enum ic_options {OPT_CHARSETS_DIR_IC=256};
static ulong use_buffers=0,read_buffer_length=0,write_buffer_length=0, static ulong use_buffers=0,read_buffer_length=0,write_buffer_length=0,
sort_buffer_length=0,sort_key_blocks=0,crc=0,unique_count=0; sort_buffer_length=0,sort_key_blocks=0,crc=0,unique_count=0;
@ -120,7 +120,7 @@ static const char *type_names[]=
static char temp_filename[FN_REFLEN], *isam_file_name, *default_charset; static char temp_filename[FN_REFLEN], *isam_file_name, *default_charset;
static IO_CACHE read_cache; static IO_CACHE read_cache;
static SORT_INFO sort_info; static ISAM_SORT_INFO sort_info;
static int tmpfile_createflag=O_RDWR | O_TRUNC | O_EXCL; static int tmpfile_createflag=O_RDWR | O_TRUNC | O_EXCL;
static const char *load_default_groups[]= { "isamchk",0 }; static const char *load_default_groups[]= { "isamchk",0 };
@ -171,12 +171,12 @@ static int sort_key_cmp(const void *not_used, const void *a,const void *b);
static int sort_key_write(const void *a); static int sort_key_write(const void *a);
static ulong get_record_for_key(N_INFO *info,N_KEYDEF *keyinfo, static ulong get_record_for_key(N_INFO *info,N_KEYDEF *keyinfo,
uchar *key); uchar *key);
static int sort_insert_key(reg1 SORT_KEY_BLOCKS *key_block,uchar *key, static int sort_insert_key(reg1 ISAM_SORT_KEY_BLOCKS *key_block,uchar *key,
ulong prev_block); ulong prev_block);
static int sort_delete_record(void); static int sort_delete_record(void);
static void usage(void); static void usage(void);
static int flush_pending_blocks(void); static int flush_pending_blocks(void);
static SORT_KEY_BLOCKS *alloc_key_blocks(uint blocks,uint buffer_length); static ISAM_SORT_KEY_BLOCKS *alloc_key_blocks(uint blocks,uint buffer_length);
static int test_if_almost_full(N_INFO *info); static int test_if_almost_full(N_INFO *info);
static int recreate_database(N_INFO **info,char *filename); static int recreate_database(N_INFO **info,char *filename);
static void save_integer(byte *pos,uint pack_length,ulong value); static void save_integer(byte *pos,uint pack_length,ulong value);
@ -186,9 +186,7 @@ static int update_state_info(N_INFO *info,uint update);
/* Main program */ /* Main program */
int main(argc,argv) int main( int argc, char **argv)
int argc;
char **argv;
{ {
int error; int error;
MY_INIT(argv[0]); MY_INIT(argv[0]);
@ -255,7 +253,7 @@ static CHANGEABLE_VAR changeable_vars[] = {
static struct option long_options[] = static struct option long_options[] =
{ {
{"analyze", no_argument, 0, 'a'}, {"analyze", no_argument, 0, 'a'},
{"character-sets-dir", required_argument, 0, OPT_CHARSETS_DIR}, {"character-sets-dir", required_argument, 0, OPT_CHARSETS_DIR_IC},
#ifndef DBUG_OFF #ifndef DBUG_OFF
{"debug", required_argument, 0, '#'}, {"debug", required_argument, 0, '#'},
#endif #endif
@ -284,7 +282,7 @@ static struct option long_options[] =
static void print_version(void) static void print_version(void)
{ {
printf("%s Ver 5.16 for %s at %s\n",my_progname,SYSTEM_TYPE, printf("%s Ver 5.17 for %s at %s\n",my_progname,SYSTEM_TYPE,
MACHINE_TYPE); MACHINE_TYPE);
} }
@ -598,7 +596,7 @@ static void get_options(register int *argc,register char ***argv)
case 'C': case 'C':
default_charset=optarg; default_charset=optarg;
break; break;
case OPT_CHARSETS_DIR: case OPT_CHARSETS_DIR_IC:
charsets_dir = optarg; charsets_dir = optarg;
break; break;
case 'b': case 'b':
@ -706,9 +704,7 @@ static void get_options(register int *argc,register char ***argv)
/* Check delete links */ /* Check delete links */
static int chk_del(info,test_flag) static int chk_del( reg1 N_INFO *info, uint test_flag)
reg1 N_INFO *info;
uint test_flag;
{ {
reg2 ulong i; reg2 ulong i;
uint j,delete_link_length; uint j,delete_link_length;
@ -793,9 +789,7 @@ wrong:
/* Kontrollerar l{nkarna i nyckelfilen */ /* Kontrollerar l{nkarna i nyckelfilen */
static int check_k_link(info,nr) static int check_k_link( register N_INFO *info, uint nr)
register N_INFO *info;
uint nr;
{ {
ulong next_link,records; ulong next_link,records;
DBUG_ENTER("check_k_link"); DBUG_ENTER("check_k_link");
@ -898,8 +892,7 @@ static int chk_size(register N_INFO *info)
/* Kontrollerar nycklarna */ /* Kontrollerar nycklarna */
static int chk_key(info) static int chk_key( register N_INFO *info)
register N_INFO *info;
{ {
uint key; uint key;
ulong keys,all_keydata,all_totaldata,key_totlength,length, ulong keys,all_keydata,all_totaldata,key_totlength,length,
@ -988,12 +981,8 @@ register N_INFO *info;
/* Check if index is ok */ /* Check if index is ok */
static int chk_index(info,keyinfo,page,buff,keys,level) static int chk_index(N_INFO *info, N_KEYDEF *keyinfo, ulong page, uchar *buff,
N_INFO *info; ulong *keys,uint level)
N_KEYDEF *keyinfo;
ulong page,*keys;
uchar *buff;
uint level;
{ {
int flag; int flag;
uint used_length,comp_flag,nod_flag; uint used_length,comp_flag,nod_flag;
@ -1129,9 +1118,7 @@ ulong count;
/* Calc length of key in normal isam */ /* Calc length of key in normal isam */
static uint isam_key_length(info,keyinfo) static uint isam_key_length( N_INFO *info, reg1 N_KEYDEF *keyinfo)
N_INFO *info;
reg1 N_KEYDEF *keyinfo;
{ {
uint length; uint length;
N_KEYSEG *keyseg; N_KEYSEG *keyseg;
@ -2962,8 +2949,7 @@ static int sort_key_cmp(const void *not_used __attribute__((unused)),
} /* sort_key_cmp */ } /* sort_key_cmp */
static int sort_key_write(a) static int sort_key_write( const void *a)
const void *a;
{ {
int cmp=sort_info.key_block->inited ? int cmp=sort_info.key_block->inited ?
_nisam_key_cmp(sort_info.keyseg,sort_info.key_block->lastkey,(uchar*) a, _nisam_key_cmp(sort_info.keyseg,sort_info.key_block->lastkey,(uchar*) a,
@ -2997,10 +2983,7 @@ const void *a;
/* get pointer to record from a key */ /* get pointer to record from a key */
static ulong get_record_for_key(info,keyinfo,key) static ulong get_record_for_key( N_INFO *info, N_KEYDEF *keyinfo, uchar *key)
N_INFO *info;
N_KEYDEF *keyinfo;
uchar *key;
{ {
return _nisam_dpos(info,0,key+_nisam_keylength(keyinfo,key)); return _nisam_dpos(info,0,key+_nisam_keylength(keyinfo,key));
} /* get_record_for_key */ } /* get_record_for_key */
@ -3008,10 +2991,8 @@ uchar *key;
/* Insert a key in sort-key-blocks */ /* Insert a key in sort-key-blocks */
static int sort_insert_key(key_block,key,prev_block) static int sort_insert_key(reg1 ISAM_SORT_KEY_BLOCKS *key_block,
reg1 SORT_KEY_BLOCKS *key_block; uchar *key, ulong prev_block)
uchar *key;
ulong prev_block;
{ {
uint a_length,t_length,nod_flag; uint a_length,t_length,nod_flag;
ulong filepos; ulong filepos;
@ -3140,7 +3121,7 @@ static int flush_pending_blocks()
uint nod_flag,length; uint nod_flag,length;
ulong filepos; ulong filepos;
N_INFO *info; N_INFO *info;
SORT_KEY_BLOCKS *key_block; ISAM_SORT_KEY_BLOCKS *key_block;
DBUG_ENTER("flush_pending_blocks"); DBUG_ENTER("flush_pending_blocks");
filepos= NI_POS_ERROR; /* if empty file */ filepos= NI_POS_ERROR; /* if empty file */
@ -3169,14 +3150,13 @@ static int flush_pending_blocks()
/* alloc space and pointers for key_blocks */ /* alloc space and pointers for key_blocks */
static SORT_KEY_BLOCKS *alloc_key_blocks(blocks,buffer_length) static ISAM_SORT_KEY_BLOCKS *alloc_key_blocks(uint blocks, uint buffer_length)
uint blocks,buffer_length;
{ {
reg1 uint i; reg1 uint i;
SORT_KEY_BLOCKS *block; ISAM_SORT_KEY_BLOCKS *block;
DBUG_ENTER("alloc_key_blocks"); DBUG_ENTER("alloc_key_blocks");
if (!(block=(SORT_KEY_BLOCKS*) my_malloc((sizeof(SORT_KEY_BLOCKS)+ if (!(block=(ISAM_SORT_KEY_BLOCKS*) my_malloc((sizeof(ISAM_SORT_KEY_BLOCKS)+
buffer_length+IO_SIZE)*blocks, buffer_length+IO_SIZE)*blocks,
MYF(0)))) MYF(0))))
{ {
@ -3253,8 +3233,7 @@ void print_error(const char *fmt,...)
/* Check if file is almost full */ /* Check if file is almost full */
static int test_if_almost_full(info) static int test_if_almost_full(N_INFO *info)
N_INFO *info;
{ {
double diff= 0.9; double diff= 0.9;
if (info->s->base.options & HA_OPTION_COMPRESS_RECORD) if (info->s->base.options & HA_OPTION_COMPRESS_RECORD)
@ -3274,9 +3253,7 @@ N_INFO *info;
/* Recreate table with bigger more alloced record-data */ /* Recreate table with bigger more alloced record-data */
static int recreate_database(org_info,filename) static int recreate_database(N_INFO **org_info, char *filename)
N_INFO **org_info;
char *filename;
{ {
int error; int error;
N_INFO info; N_INFO info;
@ -3369,10 +3346,7 @@ end:
/* Store long in 1,2,3 or 4 bytes */ /* Store long in 1,2,3 or 4 bytes */
static void save_integer(pos,pack_length,value) static void save_integer( byte *pos, uint pack_length, ulong value)
byte *pos;
uint pack_length;
ulong value;
{ {
switch (pack_length) { switch (pack_length) {
case 4: int4store(pos,value); break; case 4: int4store(pos,value); break;
@ -3386,8 +3360,7 @@ ulong value;
/* write suffix to data file if neaded */ /* write suffix to data file if neaded */
static int write_data_suffix(info) static int write_data_suffix( N_INFO *info)
N_INFO *info;
{ {
if (info->s->base.options & HA_OPTION_COMPRESS_RECORD && if (info->s->base.options & HA_OPTION_COMPRESS_RECORD &&
sort_info.fix_datafile) sort_info.fix_datafile)
@ -3407,9 +3380,7 @@ N_INFO *info;
/* Update state and isamchk_time of indexfile */ /* Update state and isamchk_time of indexfile */
static int update_state_info(info,update) static int update_state_info( N_INFO *info, uint update)
N_INFO *info;
uint update;
{ {
ISAM_SHARE *share=info->s; ISAM_SHARE *share=info->s;
uint base_pos=uint2korr(info->s->state.header.base_pos); uint base_pos=uint2korr(info->s->state.header.base_pos);

View File

@ -29,7 +29,7 @@
#define FILENAME(A) (A ? A->show_name : "Unknown") #define FILENAME(A) (A ? A->show_name : "Unknown")
struct file_info { struct isamlog_file_info {
long process; long process;
int filenr,id; int filenr,id;
my_string name,show_name,record; my_string name,show_name,record;
@ -46,7 +46,7 @@ struct test_if_open_param {
struct st_access_param struct st_access_param
{ {
ulong min_accessed; ulong min_accessed;
struct file_info *found; struct isamlog_file_info *found;
}; };
#define NO_FILEPOS (ulong) ~0L #define NO_FILEPOS (ulong) ~0L
@ -56,21 +56,22 @@ static void get_options(int *argc,char ***argv);
static int examine_log(my_string file_name,char **table_names); static int examine_log(my_string file_name,char **table_names);
static int read_string(IO_CACHE *file,gptr *to,uint length); static int read_string(IO_CACHE *file,gptr *to,uint length);
static int file_info_compare(void *a,void *b); static int file_info_compare(void *a,void *b);
static int test_if_open(struct file_info *key,element_count count, static int test_if_open(struct isamlog_file_info *key,element_count count,
struct test_if_open_param *param); struct test_if_open_param *param);
static void fix_blob_pointers(N_INFO *isam,byte *record); static void fix_blob_pointers(N_INFO *isam,byte *record);
static uint set_maximum_open_files(uint); static uint set_maximum_open_files(uint);
static int test_when_accessed(struct file_info *key,element_count count, static int test_when_accessed(struct isamlog_file_info *key,element_count count,
struct st_access_param *access_param); struct st_access_param *access_param);
static void file_info_free(struct file_info *info); static void file_info_free(struct isamlog_file_info *info);
static int close_some_file(TREE *tree); static int close_some_file(TREE *tree);
static int reopen_closed_file(TREE *tree,struct file_info *file_info); static int reopen_closed_file(TREE *tree,struct isamlog_file_info *file_info);
static int find_record_with_key(struct file_info *file_info,byte *record); static int find_record_with_key(struct isamlog_file_info *file_info,
byte *record);
static void printf_log(const char *str,...); static void printf_log(const char *str,...);
static bool cmp_filename(struct file_info *file_info,my_string name); static bool cmp_filename(struct isamlog_file_info *file_info,my_string name);
static uint verbose=0,update=0,test_info=0,max_files=0,re_open_count=0, static uint verbose=0,update=0,test_info=0,max_files=0,re_open_count=0,
recover=0,prefix_remove=0; recover=0,prefix_remove=0,opt_processes=0;
static my_string log_filename=0,filepath=0,write_filename=0,record_pos_file=0; static my_string log_filename=0,filepath=0,write_filename=0,record_pos_file=0;
static ulong com_count[10][3],number_of_commands=(ulong) ~0L,start_offset=0, static ulong com_count[10][3],number_of_commands=(ulong) ~0L,start_offset=0,
record_pos= NO_FILEPOS,isamlog_filepos,isamlog_process; record_pos= NO_FILEPOS,isamlog_filepos,isamlog_process;
@ -78,9 +79,7 @@ static const char *command_name[]=
{"open","write","update","delete","close","extra","lock","re-open",NullS}; {"open","write","update","delete","close","extra","lock","re-open",NullS};
int main(argc,argv) int main(int argc, char **argv)
int argc;
char **argv;
{ {
int error,i,first; int error,i,first;
ulong total_count,total_error,total_recover; ulong total_count,total_error,total_recover;
@ -92,11 +91,11 @@ char **argv;
max_files=(set_maximum_open_files(min(max_files,8))-6)/2; max_files=(set_maximum_open_files(min(max_files,8))-6)/2;
if (update) if (update)
printf("Trying to %s isamfiles according to log '%s'\n", printf("Trying to %s ISAM files according to log '%s'\n",
(recover ? "recover" : "update"),log_filename); (recover ? "recover" : "update"),log_filename);
error= examine_log(log_filename,argv); error= examine_log(log_filename,argv);
if (update && ! error) if (update && ! error)
puts("isamfile:s updated successfully"); puts("Tables updated successfully");
total_count=total_error=total_recover=0; total_count=total_error=total_recover=0;
for (i=first=0 ; command_name[i] ; i++) for (i=first=0 ; command_name[i] ; i++)
{ {
@ -128,17 +127,15 @@ char **argv;
} /* main */ } /* main */
static void get_options(argc,argv) static void get_options(register int *argc, register char ***argv)
register int *argc;
register char ***argv;
{ {
int help,version; int help,version;
const char *usage; const char *pos,*usage;
char *pos, option; char option;
help=0; help=0;
usage="Usage: %s [-?iruvIV] [-c #] [-f #] [-F filepath/] [-o #] [-R file recordpos] [-w write_file] [log-filename [table ...]] \n"; usage="Usage: %s [-?iruvIPV] [-c #] [-f #] [-F filepath/] [-o #] [-R file recordpos] [-w write_file] [log-filename [table ...]] \n";
pos= (char*) ""; pos= "";
while (--*argc > 0 && *(pos = *(++*argv)) == '-' ) { while (--*argc > 0 && *(pos = *(++*argv)) == '-' ) {
while (*++pos) while (*++pos)
@ -147,7 +144,7 @@ register char ***argv;
switch((option=*pos)) { switch((option=*pos)) {
case '#': case '#':
DBUG_PUSH (++pos); DBUG_PUSH (++pos);
pos= (char*) " "; /* Skipp rest of arg */ pos=" "; /* Skipp rest of arg */
break; break;
case 'c': case 'c':
if (! *++pos) if (! *++pos)
@ -158,7 +155,7 @@ register char ***argv;
pos= *(++*argv); pos= *(++*argv);
} }
number_of_commands=(ulong) atol(pos); number_of_commands=(ulong) atol(pos);
pos= (char*) " "; pos=" ";
break; break;
case 'u': case 'u':
update=1; update=1;
@ -172,7 +169,7 @@ register char ***argv;
pos= *(++*argv); pos= *(++*argv);
} }
max_files=(uint) atoi(pos); max_files=(uint) atoi(pos);
pos= (char*) " "; pos=" ";
break; break;
case 'i': case 'i':
test_info=1; test_info=1;
@ -186,7 +183,7 @@ register char ***argv;
pos= *(++*argv); pos= *(++*argv);
} }
start_offset=(ulong) atol(pos); start_offset=(ulong) atol(pos);
pos= (char*) " "; pos=" ";
break; break;
case 'p': case 'p':
if (! *++pos) if (! *++pos)
@ -202,6 +199,9 @@ register char ***argv;
update=1; update=1;
recover++; recover++;
break; break;
case 'P':
opt_processes=1;
break;
case 'R': case 'R':
if (! *++pos) if (! *++pos)
{ {
@ -210,11 +210,11 @@ register char ***argv;
else else
pos= *(++*argv); pos= *(++*argv);
} }
record_pos_file=pos; record_pos_file=(char*) pos;
if (!--*argc) if (!--*argc)
goto err; goto err;
record_pos=(ulong) atol(*(++*argv)); record_pos=(ulong) atol(*(++*argv));
pos= (char*) " "; pos= " ";
break; break;
case 'v': case 'v':
verbose++; verbose++;
@ -227,8 +227,8 @@ register char ***argv;
else else
pos= *(++*argv); pos= *(++*argv);
} }
write_filename=pos; write_filename=(char*) pos;
pos= (char*) " "; pos=" ";
break; break;
case 'F': case 'F':
if (! *++pos) if (! *++pos)
@ -238,20 +238,20 @@ register char ***argv;
else else
pos= *(++*argv); pos= *(++*argv);
} }
filepath=pos; filepath= (char*) pos;
pos= (char*) " "; pos=" ";
break; break;
case 'V': case 'V':
version=1; version=1;
/* Fall through */ /* Fall through */
case 'I': case 'I':
case '?': case '?':
printf("%s Ver 3.2 for %s at %s\n",my_progname,SYSTEM_TYPE, printf("%s Ver 3.3 for %s at %s\n",my_progname,SYSTEM_TYPE,
MACHINE_TYPE); MACHINE_TYPE);
puts("TCX Datakonsult AB, by Monty, for your professional use\n"); puts("By Monty, for your professional use\n");
if (version) if (version)
break; break;
puts("Write info about whats in a nisam log file."); puts("Write info about whats in a ISAM log file.");
printf("If no file name is given %s is used\n",log_filename); printf("If no file name is given %s is used\n",log_filename);
puts(""); puts("");
printf(usage,my_progname); printf(usage,my_progname);
@ -261,6 +261,7 @@ register char ***argv;
puts(" -o \"offset\" -p # \"remove # components from path\""); puts(" -o \"offset\" -p # \"remove # components from path\"");
puts(" -r \"recover\" -R \"file recordposition\""); puts(" -r \"recover\" -R \"file recordposition\"");
puts(" -u \"update\" -v \"verbose\" -w \"write file\""); puts(" -u \"update\" -v \"verbose\" -w \"write file\"");
puts(" -P \"processes\"");
puts("\nOne can give a second and a third '-v' for more verbose."); puts("\nOne can give a second and a third '-v' for more verbose.");
puts("Normaly one does a update (-u)."); puts("Normaly one does a update (-u).");
puts("If a recover is done all writes and all possibly updates and deletes is done\nand errors are only counted."); puts("If a recover is done all writes and all possibly updates and deletes is done\nand errors are only counted.");
@ -281,7 +282,7 @@ register char ***argv;
} }
if (*argc >= 1) if (*argc >= 1)
{ {
log_filename=pos; log_filename=(char*) pos;
(*argc)--; (*argc)--;
(*argv)++; (*argv)++;
} }
@ -308,7 +309,8 @@ static int examine_log(my_string file_name, char **table_names)
FILE *write_file; FILE *write_file;
enum ha_extra_function extra_command; enum ha_extra_function extra_command;
TREE tree; TREE tree;
struct file_info file_info,*curr_file_info; struct isamlog_file_info file_info,*curr_file_info;
char llbuff[22],llbuff2[22];
DBUG_ENTER("examine_log"); DBUG_ENTER("examine_log");
if ((file=my_open(file_name,O_RDONLY,MYF(MY_WME))) < 0) if ((file=my_open(file_name,O_RDONLY,MYF(MY_WME))) < 0)
@ -336,8 +338,11 @@ static int examine_log(my_string file_name, char **table_names)
isamlog_filepos=my_b_tell(&cache)-9L; isamlog_filepos=my_b_tell(&cache)-9L;
file_info.filenr=uint2korr(head+1); file_info.filenr=uint2korr(head+1);
isamlog_process=file_info.process=(long) uint4korr(head+3); isamlog_process=file_info.process=(long) uint4korr(head+3);
if (!opt_processes)
file_info.process=0;
result=uint2korr(head+7); result=uint2korr(head+7);
if ((curr_file_info=(struct file_info*) tree_search(&tree,&file_info))) if ((curr_file_info=(struct isamlog_file_info*)
tree_search(&tree,&file_info)))
{ {
curr_file_info->accessed=access_time; curr_file_info->accessed=access_time;
if (update && curr_file_info->used && curr_file_info->closed) if (update && curr_file_info->used && curr_file_info->closed)
@ -352,7 +357,7 @@ static int examine_log(my_string file_name, char **table_names)
} }
command=(uint) head[0]; command=(uint) head[0];
if (command < sizeof(com_count)/sizeof(com_count[0][0])/3 && if (command < sizeof(com_count)/sizeof(com_count[0][0])/3 &&
(!curr_file_info || curr_file_info->used)) (!table_names[0] || (curr_file_info && curr_file_info->used)))
{ {
com_count[command][0]++; com_count[command][0]++;
if (result) if (result)
@ -360,12 +365,15 @@ static int examine_log(my_string file_name, char **table_names)
} }
switch ((enum nisam_log_commands) command) { switch ((enum nisam_log_commands) command) {
case LOG_OPEN: case LOG_OPEN:
if (!table_names[0])
{
com_count[command][0]--; /* Must be counted explicite */ com_count[command][0]--; /* Must be counted explicite */
if (result) if (result)
com_count[command][1]--; com_count[command][1]--;
}
if (curr_file_info) if (curr_file_info)
printf("\nWarning: %s is opened twice with same process and filenumber\n", printf("\nWarning: %s is opened with same process and filenumber\nMaybe you should use the -P option ?\n",
curr_file_info->show_name); curr_file_info->show_name);
if (my_b_read(&cache,(byte*) head,2)) if (my_b_read(&cache,(byte*) head,2))
goto err; goto err;
@ -376,11 +384,17 @@ static int examine_log(my_string file_name, char **table_names)
goto err; goto err;
{ {
uint i; uint i;
char *pos=file_info.name,*to; char *pos,*to;
/* Fix if old DOS files to new format */
for (pos=file_info.name; (pos=strchr(pos,'\\')) ; pos++)
*pos= '/';
pos=file_info.name;
for (i=0 ; i < prefix_remove ; i++) for (i=0 ; i < prefix_remove ; i++)
{ {
char *next; char *next;
if (!(next=strchr(pos,FN_LIBCHAR))) if (!(next=strchr(pos,'/')))
break; break;
pos=next+1; pos=next+1;
} }
@ -438,7 +452,7 @@ static int examine_log(my_string file_name, char **table_names)
if (file_info.used) if (file_info.used)
{ {
if (verbose && !record_pos_file) if (verbose && !record_pos_file)
printf_log("%s: open",file_info.show_name); printf_log("%s: open -> %d",file_info.show_name, file_info.filenr);
com_count[command][0]++; com_count[command][0]++;
if (result) if (result)
com_count[command][1]++; com_count[command][1]++;
@ -453,7 +467,6 @@ static int examine_log(my_string file_name, char **table_names)
{ {
if (!curr_file_info->closed) if (!curr_file_info->closed)
files_open--; files_open--;
file_info_free(curr_file_info);
VOID(tree_delete(&tree,(gptr) curr_file_info)); VOID(tree_delete(&tree,(gptr) curr_file_info));
} }
break; break;
@ -464,14 +477,17 @@ static int examine_log(my_string file_name, char **table_names)
if (verbose && !record_pos_file && if (verbose && !record_pos_file &&
(!table_names[0] || (curr_file_info && curr_file_info->used))) (!table_names[0] || (curr_file_info && curr_file_info->used)))
printf_log("%s: %s(%d) -> %d",FILENAME(curr_file_info), printf_log("%s: %s(%d) -> %d",FILENAME(curr_file_info),
command_name[command], extra_command,result); command_name[command], (int) extra_command,result);
if (update && curr_file_info && !curr_file_info->closed) if (update && curr_file_info && !curr_file_info->closed)
{ {
if (nisam_extra(curr_file_info->isam,extra_command) != (int) result) if (nisam_extra(curr_file_info->isam,extra_command) != (int) result)
{ {
fflush(stdout);
VOID(fprintf(stderr, VOID(fprintf(stderr,
"Warning: error %d, expected %d on command %s at %lx\n", "Warning: error %d, expected %d on command %s at %s\n",
my_errno,result,command_name[command],isamlog_filepos)); my_errno,result,command_name[command],
llstr(isamlog_filepos,llbuff)));
fflush(stderr);
} }
} }
break; break;
@ -501,6 +517,9 @@ static int examine_log(my_string file_name, char **table_names)
goto com_err; goto com_err;
if (ni_result) if (ni_result)
com_count[command][2]++; /* Mark error */ com_count[command][2]++; /* Mark error */
if (verbose)
printf_log("error: Got result %d from mi_delete instead of %d",
ni_result, result);
} }
} }
break; break;
@ -539,6 +558,8 @@ static int examine_log(my_string file_name, char **table_names)
result=0; result=0;
goto com_err; goto com_err;
} }
if (verbose)
printf_log("error: Didn't find row to update with mi_rrnd");
if (recover == 1 || result || if (recover == 1 || result ||
find_record_with_key(curr_file_info,buff)) find_record_with_key(curr_file_info,buff))
{ {
@ -553,6 +574,9 @@ static int examine_log(my_string file_name, char **table_names)
{ {
if (!recover) if (!recover)
goto com_err; goto com_err;
if (verbose)
printf_log("error: Got result %d from mi_update instead of %d",
ni_result, result);
if (ni_result) if (ni_result)
com_count[command][2]++; /* Mark error */ com_count[command][2]++; /* Mark error */
} }
@ -570,9 +594,10 @@ static int examine_log(my_string file_name, char **table_names)
} }
if (! recover && filepos != curr_file_info->isam->lastpos) if (! recover && filepos != curr_file_info->isam->lastpos)
{ {
printf("Warning: Wrote at position: %ld, should have been %ld", printf("error: Wrote at position: %s, should have been %s",
curr_file_info->isam->lastpos,(long) filepos); llstr(curr_file_info->isam->lastpos,llbuff),
goto com_err; llstr(filepos,llbuff2));
goto end;
} }
} }
} }
@ -597,6 +622,7 @@ static int examine_log(my_string file_name, char **table_names)
VOID(fprintf(stderr, VOID(fprintf(stderr,
"Error: found unknown command %d in logfile, aborted\n", "Error: found unknown command %d in logfile, aborted\n",
command)); command));
fflush(stderr);
goto end; goto end;
} }
} }
@ -609,11 +635,16 @@ static int examine_log(my_string file_name, char **table_names)
DBUG_RETURN(0); DBUG_RETURN(0);
err: err:
fflush(stdout);
VOID(fprintf(stderr,"Got error %d when reading from logfile\n",my_errno)); VOID(fprintf(stderr,"Got error %d when reading from logfile\n",my_errno));
fflush(stderr);
goto end; goto end;
com_err: com_err:
VOID(fprintf(stderr,"Got error %d, expected %d on command %s at %lx\n", fflush(stdout);
my_errno,result,command_name[command],isamlog_filepos)); VOID(fprintf(stderr,"Got error %d, expected %d on command %s at %s\n",
my_errno,result,command_name[command],
llstr(isamlog_filepos,llbuff)));
fflush(stderr);
end: end:
end_key_cache(); end_key_cache();
delete_tree(&tree); delete_tree(&tree);
@ -625,10 +656,7 @@ static int examine_log(my_string file_name, char **table_names)
} }
static int read_string(file,to,length) static int read_string(IO_CACHE *file, reg1 gptr *to, reg2 uint length)
IO_CACHE *file;
reg1 gptr *to;
reg2 uint length;
{ {
DBUG_ENTER("read_string"); DBUG_ENTER("read_string");
@ -647,24 +675,22 @@ reg2 uint length;
} /* read_string */ } /* read_string */
static int file_info_compare(a,b) static int file_info_compare(void *a, void *b)
void *a;
void *b;
{ {
long lint; long lint;
if ((lint=((struct file_info*) a)->process - if ((lint=((struct isamlog_file_info*) a)->process -
((struct file_info*) b)->process)) ((struct isamlog_file_info*) b)->process))
return lint < 0L ? -1 : 1; return lint < 0L ? -1 : 1;
return ((struct file_info*) a)->filenr - ((struct file_info*) b)->filenr; return (((struct isamlog_file_info*) a)->filenr -
((struct isamlog_file_info*) b)->filenr);
} }
/* ARGSUSED */ /* ARGSUSED */
static int test_if_open (key,count,param) static int test_if_open (struct isamlog_file_info *key,
struct file_info *key; element_count count __attribute__((unused)),
element_count count __attribute__((unused)); struct test_if_open_param *param)
struct test_if_open_param *param;
{ {
if (!strcmp(key->name,param->name) && key->id > param->max_id) if (!strcmp(key->name,param->name) && key->id > param->max_id)
param->max_id=key->id; param->max_id=key->id;
@ -672,9 +698,7 @@ struct test_if_open_param *param;
} }
static void fix_blob_pointers(info,record) static void fix_blob_pointers( N_INFO *info, byte *record)
N_INFO *info;
byte *record;
{ {
byte *pos; byte *pos;
N_BLOB *blob,*end; N_BLOB *blob,*end;
@ -689,8 +713,7 @@ byte *record;
} }
} }
static uint set_maximum_open_files(maximum_files) static uint set_maximum_open_files(uint maximum_files)
uint maximum_files;
{ {
#if defined(HAVE_GETRUSAGE) && defined(RLIMIT_NOFILE) #if defined(HAVE_GETRUSAGE) && defined(RLIMIT_NOFILE)
struct rlimit rlimit; struct rlimit rlimit;
@ -725,10 +748,9 @@ uint maximum_files;
/* close the file with hasn't been accessed for the longest time */ /* close the file with hasn't been accessed for the longest time */
/* ARGSUSED */ /* ARGSUSED */
static int test_when_accessed (key,count,access_param) static int test_when_accessed (struct isamlog_file_info *key,
struct file_info *key; element_count count __attribute__((unused)),
element_count count __attribute__((unused)); struct st_access_param *access_param)
struct st_access_param *access_param;
{ {
if (key->accessed < access_param->min_accessed && ! key->closed) if (key->accessed < access_param->min_accessed && ! key->closed)
{ {
@ -739,9 +761,9 @@ struct st_access_param *access_param;
} }
static void file_info_free(fileinfo) static void file_info_free(struct isamlog_file_info *fileinfo)
struct file_info *fileinfo;
{ {
DBUG_ENTER("file_info_free");
if (update) if (update)
{ {
if (!fileinfo->closed) if (!fileinfo->closed)
@ -751,12 +773,12 @@ struct file_info *fileinfo;
} }
my_free(fileinfo->name,MYF(0)); my_free(fileinfo->name,MYF(0));
my_free(fileinfo->show_name,MYF(0)); my_free(fileinfo->show_name,MYF(0));
DBUG_VOID_RETURN;
} }
static int close_some_file(tree) static int close_some_file(TREE *tree)
TREE *tree;
{ {
struct st_access_param access_param; struct st_access_param access_param;
@ -774,9 +796,7 @@ TREE *tree;
} }
static int reopen_closed_file(tree,fileinfo) static int reopen_closed_file(TREE *tree, struct isamlog_file_info *fileinfo)
TREE *tree;
struct file_info *fileinfo;
{ {
char name[FN_REFLEN]; char name[FN_REFLEN];
if (close_some_file(tree)) if (close_some_file(tree))
@ -794,9 +814,8 @@ struct file_info *fileinfo;
/* Try to find record with uniq key */ /* Try to find record with uniq key */
static int find_record_with_key(file_info,record) static int find_record_with_key(struct isamlog_file_info *file_info,
struct file_info *file_info; byte *record)
byte *record;
{ {
uint key; uint key;
N_INFO *info=file_info->isam; N_INFO *info=file_info->isam;
@ -817,10 +836,11 @@ byte *record;
static void printf_log(const char *format,...) static void printf_log(const char *format,...)
{ {
char llbuff[21];
va_list args; va_list args;
va_start(args,format); va_start(args,format);
if (verbose > 2) if (verbose > 2)
printf("%9ld:",isamlog_filepos); printf("%9s:",llstr(isamlog_filepos,llbuff));
if (verbose > 1) if (verbose > 1)
printf("%5ld ",isamlog_process); /* Write process number */ printf("%5ld ",isamlog_process); /* Write process number */
(void) vprintf((char*) format,args); (void) vprintf((char*) format,args);
@ -829,9 +849,7 @@ static void printf_log(const char *format,...)
} }
static bool cmp_filename(file_info,name) static bool cmp_filename(struct isamlog_file_info *file_info,my_string name)
struct file_info *file_info;
my_string name;
{ {
if (!file_info) if (!file_info)
return 1; return 1;

View File

@ -21,9 +21,7 @@ static void get_options(int argc, char *argv[]);
static int rec_pointer_size=0,verbose=0,remove_ant=0,pack_keys=1,flags[50], static int rec_pointer_size=0,verbose=0,remove_ant=0,pack_keys=1,flags[50],
packed_field=FIELD_SKIPP_PRESPACE; packed_field=FIELD_SKIPP_PRESPACE;
int main(argc,argv) int main(int argc, char *argv[])
int argc;
char *argv[];
{ {
N_INFO *file; N_INFO *file;
int i,j,error,deleted,found; int i,j,error,deleted,found;
@ -145,9 +143,7 @@ err:
/* l{ser optioner */ /* l{ser optioner */
/* OBS! intierar endast DEBUG - ingen debuggning h{r ! */ /* OBS! intierar endast DEBUG - ingen debuggning h{r ! */
static void get_options(argc,argv) static void get_options(int argc, char *argv[])
int argc;
char *argv[];
{ {
char *pos; char *pos;

View File

@ -53,13 +53,11 @@ static char record[300],record2[300],key[100],key2[100],
/* Test program */ /* Test program */
int main(argc,argv) int main(int argc, char *argv[])
int argc;
char *argv[];
{ {
uint i; uint i;
int j,n1,n2,n3,error,k; int j,n1,n2,n3,error,k;
uint write_count,update,dupp_keys,delete,start,length,blob_pos, uint write_count,update,dupp_keys,opt_delete,start,length,blob_pos,
reclength,ant; reclength,ant;
ulong lastpos,range_records,records; ulong lastpos,range_records,records;
N_INFO *file; N_INFO *file;
@ -138,7 +136,7 @@ char *argv[];
else else
recinfo[6].base.type= FIELD_LAST; recinfo[6].base.type= FIELD_LAST;
write_count=update=dupp_keys=delete=0; write_count=update=dupp_keys=opt_delete=0;
blob_buffer=0; blob_buffer=0;
for (i=999 ; i>0 ; i--) key1[i]=0; for (i=999 ; i>0 ; i--) key1[i]=0;
@ -232,7 +230,7 @@ char *argv[];
printf("error: %d; can't delete record: \"%s\"\n", my_errno,read_record); printf("error: %d; can't delete record: \"%s\"\n", my_errno,read_record);
goto err; goto err;
} }
delete++; opt_delete++;
key1[atoi(read_record+keyinfo[0].seg[0].base.start)]--; key1[atoi(read_record+keyinfo[0].seg[0].base.start)]--;
key3[atoi(read_record+keyinfo[2].seg[0].base.start)]=0; key3[atoi(read_record+keyinfo[2].seg[0].base.start)]=0;
} }
@ -346,9 +344,9 @@ char *argv[];
} }
while (nisam_rnext(file,read_record3,0) == 0 && ant < write_count+10) while (nisam_rnext(file,read_record3,0) == 0 && ant < write_count+10)
ant++; ant++;
if (ant != write_count - delete) if (ant != write_count - opt_delete)
{ {
printf("next: I found: %d records of %d\n",ant,write_count - delete); printf("next: I found: %d records of %d\n",ant,write_count - opt_delete);
goto end; goto end;
} }
if (nisam_rlast(file,read_record2,0) || if (nisam_rlast(file,read_record2,0) ||
@ -362,7 +360,7 @@ char *argv[];
ant=1; ant=1;
while (nisam_rprev(file,read_record3,0) == 0 && ant < write_count+10) while (nisam_rprev(file,read_record3,0) == 0 && ant < write_count+10)
ant++; ant++;
if (ant != write_count - delete) if (ant != write_count - opt_delete)
{ {
printf("prev: I found: %d records of %d\n",ant,write_count); printf("prev: I found: %d records of %d\n",ant,write_count);
goto end; goto end;
@ -414,7 +412,7 @@ char *argv[];
if (nisam_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT)) goto err; if (nisam_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT)) goto err;
if (nisam_rnext(file,read_record3,0)) goto err; if (nisam_rnext(file,read_record3,0)) goto err;
if (nisam_delete(file,read_record3)) goto err; if (nisam_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=1; ant=1;
while (nisam_rnext(file,read_record3,0) == 0 && while (nisam_rnext(file,read_record3,0) == 0 &&
bcmp(read_record3+start,key,length) == 0) ant++; bcmp(read_record3+start,key,length) == 0) ant++;
@ -431,7 +429,7 @@ char *argv[];
if (nisam_rprev(file,read_record3,0)) goto err; if (nisam_rprev(file,read_record3,0)) goto err;
if (nisam_rprev(file,read_record3,0)) goto err; if (nisam_rprev(file,read_record3,0)) goto err;
if (nisam_delete(file,read_record3)) goto err; if (nisam_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=1; ant=1;
while (nisam_rprev(file,read_record3,0) == 0 && while (nisam_rprev(file,read_record3,0) == 0 &&
bcmp(read_record3+start,key,length) == 0) ant++; bcmp(read_record3+start,key,length) == 0) ant++;
@ -447,7 +445,7 @@ char *argv[];
DBUG_PRINT("progpos",("first - delete - next -> last")); DBUG_PRINT("progpos",("first - delete - next -> last"));
if (nisam_rkey(file,read_record3,0,key,0,HA_READ_KEY_EXACT)) goto err; if (nisam_rkey(file,read_record3,0,key,0,HA_READ_KEY_EXACT)) goto err;
if (nisam_delete(file,read_record3)) goto err; if (nisam_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=1; ant=1;
if (nisam_rnext(file,read_record,0)) if (nisam_rnext(file,read_record,0))
goto err; /* Skall finnas poster */ goto err; /* Skall finnas poster */
@ -463,7 +461,7 @@ char *argv[];
DBUG_PRINT("progpos",("last - delete - prev -> first")); DBUG_PRINT("progpos",("last - delete - prev -> first"));
if (nisam_rprev(file,read_record3,0)) goto err; if (nisam_rprev(file,read_record3,0)) goto err;
if (nisam_delete(file,read_record3)) goto err; if (nisam_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=0; ant=0;
while (nisam_rprev(file,read_record3,0) == 0 && while (nisam_rprev(file,read_record3,0) == 0 &&
bcmp(read_record3+start,key,length) == 0) ant++; bcmp(read_record3+start,key,length) == 0) ant++;
@ -555,11 +553,11 @@ char *argv[];
printf("- nisam_info\n"); printf("- nisam_info\n");
nisam_info(file,&info,0); nisam_info(file,&info,0);
if (info.records != write_count-delete || info.deleted > delete + update if (info.records != write_count-opt_delete || info.deleted > opt_delete + update
|| info.keys != keys) || info.keys != keys)
{ {
puts("Wrong info from nisam_info"); puts("Wrong info from nisam_info");
printf("Got: records: %ld delete: %ld i_keys: %d\n", printf("Got: records: %ld opt_delete: %ld i_keys: %d\n",
info.records,info.deleted,info.keys); info.records,info.deleted,info.keys);
} }
if (verbose) if (verbose)
@ -591,10 +589,10 @@ char *argv[];
while ((error=nisam_rrnd(file,record,NI_POS_ERROR)) >= 0 && while ((error=nisam_rrnd(file,record,NI_POS_ERROR)) >= 0 &&
ant < write_count + 10) ant < write_count + 10)
ant+= error ? 0 : 1; ant+= error ? 0 : 1;
if (ant != write_count-delete) if (ant != write_count-opt_delete)
{ {
printf("rrnd with cache: I can only find: %d records of %d\n", printf("rrnd with cache: I can only find: %d records of %d\n",
ant,write_count-delete); ant,write_count-opt_delete);
goto end; goto end;
} }
if (nisam_extra(file,HA_EXTRA_NO_CACHE)) if (nisam_extra(file,HA_EXTRA_NO_CACHE))
@ -648,14 +646,14 @@ char *argv[];
printf("can't delete record: %s\n",read_record); printf("can't delete record: %s\n",read_record);
goto err; goto err;
} }
delete++; opt_delete++;
} }
} }
if (my_errno != HA_ERR_END_OF_FILE && my_errno != HA_ERR_RECORD_DELETED) if (my_errno != HA_ERR_END_OF_FILE && my_errno != HA_ERR_RECORD_DELETED)
printf("error: %d from nisam_rrnd\n",my_errno); printf("error: %d from nisam_rrnd\n",my_errno);
if (write_count != delete) if (write_count != opt_delete)
{ {
printf("Deleted only %d of %d records\n",write_count,delete); printf("Deleted only %d of %d records\n",write_count,opt_delete);
goto err; goto err;
} }
end: end:
@ -663,7 +661,7 @@ end:
goto err; goto err;
nisam_panic(HA_PANIC_CLOSE); /* Should close log */ nisam_panic(HA_PANIC_CLOSE); /* Should close log */
printf("\nFollowing test have been made:\n"); printf("\nFollowing test have been made:\n");
printf("Write records: %d\nUpdate records: %d\nSame-key-read: %d\nDelete records: %d\n", write_count,update,dupp_keys,delete); printf("Write records: %d\nUpdate records: %d\nSame-key-read: %d\nDelete records: %d\n", write_count,update,dupp_keys,opt_delete);
if (rec_pointer_size) if (rec_pointer_size)
printf("Record pointer size: %d\n",rec_pointer_size); printf("Record pointer size: %d\n",rec_pointer_size);
if (key_cacheing) if (key_cacheing)
@ -692,9 +690,7 @@ err:
/* l{ser optioner */ /* l{ser optioner */
/* OBS! intierar endast DEBUG - ingen debuggning h{r ! */ /* OBS! intierar endast DEBUG - ingen debuggning h{r ! */
static void get_options(argc,argv) static void get_options( int argc, char *argv[])
int argc;
char *argv[];
{ {
char *pos,*progname; char *pos,*progname;
DEBUGGER_OFF; DEBUGGER_OFF;
@ -785,8 +781,7 @@ char *argv[];
/* Ge ett randomv{rde inom ett intervall 0 <=x <= n */ /* Ge ett randomv{rde inom ett intervall 0 <=x <= n */
static uint rnd(max_value) static uint rnd( uint max_value)
uint max_value;
{ {
return (uint) ((rand() & 32767)/32767.0*max_value); return (uint) ((rand() & 32767)/32767.0*max_value);
} /* rnd */ } /* rnd */
@ -794,9 +789,7 @@ uint max_value;
/* G|r en record av skiftande length */ /* G|r en record av skiftande length */
static void fix_length(rec,length) static void fix_length( byte *rec, uint length)
byte *rec;
uint length;
{ {
bmove(rec+STANDAR_LENGTH, bmove(rec+STANDAR_LENGTH,
"0123456789012345678901234567890123456789012345678901234567890", "0123456789012345678901234567890123456789012345678901234567890",
@ -807,8 +800,7 @@ uint length;
/* Put maybe a blob in record */ /* Put maybe a blob in record */
static void put_blob_in_record(blob_pos,blob_buffer) static void put_blob_in_record(char *blob_pos, char **blob_buffer)
char *blob_pos,**blob_buffer;
{ {
ulong i,length; ulong i,length;
if (use_blob) if (use_blob)
@ -836,10 +828,7 @@ char *blob_pos,**blob_buffer;
} }
static void copy_key(info,inx,rec,key_buff) static void copy_key( N_INFO *info, uint inx, uchar *rec, uchar *key_buff)
N_INFO *info;
uint inx;
uchar *rec,*key_buff;
{ {
N_KEYSEG *keyseg; N_KEYSEG *keyseg;

View File

@ -11,16 +11,16 @@ test2 -L -K -W -P
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
Key cacheing used Key cacheing used
Write cacheing used Write cacheing used
Locking used Locking used
@ -37,16 +37,16 @@ test2 -L -K -W -P -A
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
Key cacheing used Key cacheing used
Write cacheing used Write cacheing used
Asyncron io with locking used Asyncron io with locking used
@ -62,16 +62,16 @@ test2 -L -K -W -P -S -R1 -m500
- Test read key-part - Test read key-part
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 484 Write records: 475
Update records: 48 Update records: 44
Same-key-read: 3 Same-key-read: 4
Delete records: 484 Delete records: 475
Record pointer size: 1 Record pointer size: 1
Key cacheing used Key cacheing used
Write cacheing used Write cacheing used
@ -79,8 +79,31 @@ Locking used
test2 -L -K -R1 -m2000 ; Should give error 135 test2 -L -K -R1 -m2000 ; Should give error 135
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
Error: 135 in write at record: 1122 - Delete
got error: 135 when using NISAM-database - Update
- Same key: first - next -> last - prev -> first
- All keys: first - next -> last - prev -> first
- Test if: Read first - next - prev - prev - next == first
- Test if: Read last - prev - next - next - prev == last
- Test read key-part
- Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first
- Read first - delete - next -> last
- Read last - delete - prev -> first
- Test if: Read rrnd - same
- Test nisam_records_in_range
- nisam_info
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys
Following test have been made:
Write records: 1647
Update records: 125
Same-key-read: 8
Delete records: 1647
Record pointer size: 1
Key cacheing used
Locking used
test2 -L -K -P -S -R3 -m50 -b1000000 test2 -L -K -P -S -R3 -m50 -b1000000
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -92,9 +115,9 @@ test2 -L -K -P -S -R3 -m50 -b1000000
- Test if: Read last - prev - next - next - prev == last - Test if: Read last - prev - next - next - prev == last
- Test read key-part - Test read key-part
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
@ -118,16 +141,16 @@ test2 -L -B
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 912 Write records: 903
Update records: 81 Update records: 86
Same-key-read: 5 Same-key-read: 5
Delete records: 912 Delete records: 903
Locking used Locking used
blobs used blobs used
test2 -L -K -W -P -m50 -l test2 -L -K -W -P -m50 -l
@ -141,9 +164,9 @@ test2 -L -K -W -P -m50 -l
- Test if: Read last - prev - next - next - prev == last - Test if: Read last - prev - next - next - prev == last
- Test read key-part - Test read key-part
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
@ -155,13 +178,13 @@ Key cacheing used
Write cacheing used Write cacheing used
Locking used Locking used
Commands Used count Errors Recover errors Commands Used count Errors Recover errors
open 3 0 0 open 14 0 0
write 150 0 0 write 700 0 0
update 15 0 0 update 70 0 0
delete 150 0 0 delete 700 0 0
close 3 0 0 close 14 0 0
extra 18 0 0 extra 84 0 0
Total 339 0 0 Total 1582 0 0
test2 -L -K -W -P -m50 -l -b100 test2 -L -K -W -P -m50 -l -b100
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -173,9 +196,9 @@ test2 -L -K -W -P -m50 -l -b100
- Test if: Read last - prev - next - next - prev == last - Test if: Read last - prev - next - next - prev == last
- Test read key-part - Test read key-part
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
@ -187,13 +210,13 @@ Key cacheing used
Write cacheing used Write cacheing used
Locking used Locking used
Commands Used count Errors Recover errors Commands Used count Errors Recover errors
open 4 0 0 open 15 0 0
write 200 0 0 write 750 0 0
update 20 0 0 update 75 0 0
delete 200 0 0 delete 750 0 0
close 4 0 0 close 15 0 0
extra 24 0 0 extra 90 0 0
Total 452 0 0 Total 1695 0 0
time test2 time test2
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -207,18 +230,16 @@ time test2
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
4.77user 6.81system 0:15.07elapsed 76%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps
time test2 -K time test2 -K
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -232,19 +253,17 @@ time test2 -K
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
Key cacheing used Key cacheing used
6.09user 4.33system 0:11.66elapsed 89%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps
time test2 -L time test2 -L
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -258,19 +277,17 @@ time test2 -L
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
Locking used Locking used
5.01user 5.20system 0:10.86elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps
time test2 -L -K time test2 -L -K
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -284,20 +301,18 @@ time test2 -L -K
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
Key cacheing used Key cacheing used
Locking used Locking used
5.63user 0.97system 0:07.85elapsed 84%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps
time test2 -L -K -W time test2 -L -K -W
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -311,21 +326,19 @@ time test2 -L -K -W
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
Key cacheing used Key cacheing used
Write cacheing used Write cacheing used
Locking used Locking used
5.28user 1.32system 0:08.86elapsed 74%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps
time test2 -L -K -W -S time test2 -L -K -W -S
- Creating isam-file - Creating isam-file
- Writing key:s - Writing key:s
@ -339,18 +352,16 @@ time test2 -L -K -W -S
- Read key (first) - next - delete - next -> last - Read key (first) - next - delete - next -> last
- Read last of key - prev - delete - prev -> first - Read last of key - prev - delete - prev -> first
- Test if: Read rrnd - same - Test if: Read rrnd - same
- Test ni_records_in_range - Test nisam_records_in_range
- ni_info - nisam_info
- ni_extra(CACHE) + ni_rrnd.... + ni_extra(NO_CACHE) - nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
- Removing keys - Removing keys
Following test have been made: Following test have been made:
Write records: 915 Write records: 907
Update records: 82 Update records: 87
Same-key-read: 6 Same-key-read: 6
Delete records: 915 Delete records: 907
Key cacheing used Key cacheing used
Write cacheing used Write cacheing used
Locking used Locking used
5.32user 0.62system 0:06.13elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps

View File

@ -35,7 +35,7 @@
#include <pwd.h> #include <pwd.h>
#endif /* HAVE_PWD_H */ #endif /* HAVE_PWD_H */
#else /* ! HAVE_GETPASS */ #else /* ! HAVE_GETPASS */
#ifndef __WIN__ #if !defined( __WIN__) && !defined(OS2)
#include <sys/ioctl.h> #include <sys/ioctl.h>
#ifdef HAVE_TERMIOS_H /* For tty-password */ #ifdef HAVE_TERMIOS_H /* For tty-password */
#include <termios.h> #include <termios.h>
@ -62,9 +62,8 @@
#define getpass(A) getpassphrase(A) #define getpass(A) getpassphrase(A)
#endif #endif
#ifdef __WIN__ #if defined( __WIN__) || defined(OS2)
/* were just going to fake it here and get input from /* were just going to fake it here and get input from the keyboard */
the keyboard */
char *get_tty_password(char *opt_message) char *get_tty_password(char *opt_message)
{ {

View File

@ -77,8 +77,7 @@ my_string mysql_unix_port=0;
#include <errno.h> #include <errno.h>
#define ERRNO errno #define ERRNO errno
#define SOCKET_ERROR -1 #define SOCKET_ERROR -1
#define closesocket(A) close(A) #endif /* __WIN__ */
#endif
static void mysql_once_init(void); static void mysql_once_init(void);
static MYSQL_DATA *read_rows (MYSQL *mysql,MYSQL_FIELD *fields, static MYSQL_DATA *read_rows (MYSQL *mysql,MYSQL_FIELD *fields,
@ -121,7 +120,7 @@ static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to,
static int connect2(my_socket s, const struct sockaddr *name, uint namelen, static int connect2(my_socket s, const struct sockaddr *name, uint namelen,
uint timeout) uint timeout)
{ {
#if defined(__WIN__) #if defined(__WIN__) || defined(OS2)
return connect(s, (struct sockaddr*) name, namelen); return connect(s, (struct sockaddr*) name, namelen);
#else #else
int flags, res, s_err; int flags, res, s_err;
@ -490,7 +489,7 @@ struct passwd *getpwuid(uid_t);
char* getlogin(void); char* getlogin(void);
#endif #endif
#if !defined(MSDOS) && ! defined(VMS) && !defined(__WIN__) #if !defined(MSDOS) && ! defined(VMS) && !defined(__WIN__) && !defined(OS2)
static void read_user_name(char *name) static void read_user_name(char *name)
{ {
DBUG_ENTER("read_user_name"); DBUG_ENTER("read_user_name");

View File

@ -34,6 +34,7 @@
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
#include <sys/types.h> #include <sys/types.h>
#include <violite.h>
#ifdef MYSQL_SERVER #ifdef MYSQL_SERVER
ulong max_allowed_packet=65536; ulong max_allowed_packet=65536;
@ -67,13 +68,19 @@ void sql_print_error(const char *format,...);
#define RETRY_COUNT mysqld_net_retry_count #define RETRY_COUNT mysqld_net_retry_count
extern ulong mysqld_net_retry_count; extern ulong mysqld_net_retry_count;
#else #else
#ifdef OS2 /* avoid name conflict */
#define thr_alarm_t thr_alarm_t_net
#define ALARM ALARM_net
#endif
typedef my_bool thr_alarm_t; typedef my_bool thr_alarm_t;
typedef my_bool ALARM; typedef my_bool ALARM;
#define thr_alarm_init(A) (*A)=0 #define thr_alarm_init(A) (*(A))=0
#define thr_alarm_in_use(A) (*(A)) #define thr_alarm_in_use(A) (*(A))
#define thr_end_alarm(A) #define thr_end_alarm(A)
#define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C)) #define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C))
static inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused))) inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused)))
{ {
*A=1; *A=1;
return 0; return 0;
@ -123,7 +130,7 @@ int my_net_init(NET *net, Vio* vio)
if (vio != 0) /* If real connection */ if (vio != 0) /* If real connection */
{ {
net->fd = vio_fd(vio); /* For perl DBI/DBD */ net->fd = vio_fd(vio); /* For perl DBI/DBD */
#if defined(MYSQL_SERVER) && !defined(___WIN__) && !defined(__EMX__) #if defined(MYSQL_SERVER) && !defined(___WIN__) && !defined(__EMX__) && !defined(OS2)
if (!(test_flags & TEST_BLOCKING)) if (!(test_flags & TEST_BLOCKING))
vio_blocking(vio, FALSE); vio_blocking(vio, FALSE);
#endif #endif
@ -270,7 +277,7 @@ net_real_write(NET *net,const char *packet,ulong len)
int length; int length;
char *pos,*end; char *pos,*end;
thr_alarm_t alarmed; thr_alarm_t alarmed;
#if !defined(__WIN__) && !defined(__EMX__) #if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2)
ALARM alarm_buff; ALARM alarm_buff;
#endif #endif
uint retry_count=0; uint retry_count=0;
@ -328,7 +335,7 @@ net_real_write(NET *net,const char *packet,ulong len)
if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0) if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0)
{ {
my_bool interrupted = vio_should_retry(net->vio); my_bool interrupted = vio_should_retry(net->vio);
#if (!defined(__WIN__) && !defined(__EMX__)) #if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2))
if ((interrupted || length==0) && !thr_alarm_in_use(&alarmed)) if ((interrupted || length==0) && !thr_alarm_in_use(&alarmed))
{ {
if (!thr_alarm(&alarmed,(uint) net_write_timeout,&alarm_buff)) if (!thr_alarm(&alarmed,(uint) net_write_timeout,&alarm_buff))
@ -425,7 +432,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed)
if ((int) (length=vio_read(net->vio,(char*) net->buff,remain)) <= 0L) if ((int) (length=vio_read(net->vio,(char*) net->buff,remain)) <= 0L)
{ {
my_bool interrupted = vio_should_retry(net->vio); my_bool interrupted = vio_should_retry(net->vio);
if (!thr_got_alarm(&alarmed) && interrupted) if (!thr_got_alarm(alarmed) && interrupted)
{ /* Probably in MIT threads */ { /* Probably in MIT threads */
if (retry_count++ < RETRY_COUNT) if (retry_count++ < RETRY_COUNT)
continue; continue;
@ -447,7 +454,7 @@ my_real_read(NET *net, ulong *complen)
uint i,retry_count=0; uint i,retry_count=0;
ulong len=packet_error; ulong len=packet_error;
thr_alarm_t alarmed; thr_alarm_t alarmed;
#if (!defined(__WIN__) && !defined(__EMX__)) || defined(MYSQL_SERVER) #if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2)) || defined(MYSQL_SERVER)
ALARM alarm_buff; ALARM alarm_buff;
#endif #endif
my_bool net_blocking=vio_is_blocking(net->vio); my_bool net_blocking=vio_is_blocking(net->vio);
@ -474,7 +481,7 @@ my_real_read(NET *net, ulong *complen)
DBUG_PRINT("info",("vio_read returned %d, errno: %d", DBUG_PRINT("info",("vio_read returned %d, errno: %d",
length, vio_errno(net->vio))); length, vio_errno(net->vio)));
#if (!defined(__WIN__) && !defined(__EMX__)) || defined(MYSQL_SERVER) #if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2)) || defined(MYSQL_SERVER)
/* /*
We got an error that there was no data on the socket. We now set up We got an error that there was no data on the socket. We now set up
an alarm to not 'read forever', change the socket to non blocking an alarm to not 'read forever', change the socket to non blocking

View File

@ -35,9 +35,11 @@
#ifdef HAVE_POLL #ifdef HAVE_POLL
#include <sys/poll.h> #include <sys/poll.h>
#endif #endif
#ifdef HAVE_SYS_IOCTL_H
#if defined(__EMX__)
#include <sys/ioctl.h> #include <sys/ioctl.h>
#endif
#if defined(__EMX__) || defined(OS2)
#define ioctlsocket ioctl #define ioctlsocket ioctl
#endif /* defined(__EMX__) */ #endif /* defined(__EMX__) */
@ -103,9 +105,12 @@ Vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost)
sprintf(vio->desc, sprintf(vio->desc,
(vio->type == VIO_TYPE_SOCKET ? "socket (%d)" : "TCP/IP (%d)"), (vio->type == VIO_TYPE_SOCKET ? "socket (%d)" : "TCP/IP (%d)"),
vio->sd); vio->sd);
#if !defined(___WIN__) && !defined(__EMX__) #if !defined(___WIN__) && !defined(__EMX__) && !defined(OS2)
#if !defined(NO_FCNTL_NONBLOCK) #if !defined(NO_FCNTL_NONBLOCK)
vio->fcntl_mode = fcntl(sd, F_GETFL); vio->fcntl_mode = fcntl(sd, F_GETFL);
#elif defined(HAVE_SYS_IOCTL_H) /* hpux */
/* Non blocking sockets doesn't work good on HPUX 11.0 */
(void) ioctl(sd,FIOSNBIO,0);
#endif #endif
#else /* !defined(__WIN__) && !defined(__EMX__) */ #else /* !defined(__WIN__) && !defined(__EMX__) */
{ {
@ -149,7 +154,7 @@ void vio_delete(Vio * vio)
int vio_errno(Vio *vio __attribute__((unused))) int vio_errno(Vio *vio __attribute__((unused)))
{ {
return errno; /* On Win32 this mapped to WSAGetLastError() */ return socket_errno; /* On Win32 this mapped to WSAGetLastError() */
} }
@ -158,12 +163,17 @@ int vio_read(Vio * vio, gptr buf, int size)
int r; int r;
DBUG_ENTER("vio_read"); DBUG_ENTER("vio_read");
DBUG_PRINT("enter", ("sd=%d, buf=%p, size=%d", vio->sd, buf, size)); DBUG_PRINT("enter", ("sd=%d, buf=%p, size=%d", vio->sd, buf, size));
#ifdef __WIN__ #if defined( __WIN__) || defined(OS2)
if (vio->type == VIO_TYPE_NAMEDPIPE) if (vio->type == VIO_TYPE_NAMEDPIPE)
{ {
DWORD length; DWORD length;
#ifdef OS2
if (!DosRead((HFILE)vio->hPipe, buf, size, &length))
DBUG_RETURN(-1);
#else
if (!ReadFile(vio->hPipe, buf, size, &length, NULL)) if (!ReadFile(vio->hPipe, buf, size, &length, NULL))
DBUG_RETURN(-1); DBUG_RETURN(-1);
#endif
DBUG_RETURN(length); DBUG_RETURN(length);
} }
r = recv(vio->sd, buf, size,0); r = recv(vio->sd, buf, size,0);
@ -174,7 +184,7 @@ int vio_read(Vio * vio, gptr buf, int size)
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (r < 0) if (r < 0)
{ {
DBUG_PRINT("error", ("Got error %d during read",errno)); DBUG_PRINT("vio_error", ("Got error %d during read",socket_errno));
} }
#endif /* DBUG_OFF */ #endif /* DBUG_OFF */
DBUG_PRINT("exit", ("%d", r)); DBUG_PRINT("exit", ("%d", r));
@ -187,12 +197,17 @@ int vio_write(Vio * vio, const gptr buf, int size)
int r; int r;
DBUG_ENTER("vio_write"); DBUG_ENTER("vio_write");
DBUG_PRINT("enter", ("sd=%d, buf=%p, size=%d", vio->sd, buf, size)); DBUG_PRINT("enter", ("sd=%d, buf=%p, size=%d", vio->sd, buf, size));
#ifdef __WIN__ #if defined( __WIN__) || defined(OS2)
if ( vio->type == VIO_TYPE_NAMEDPIPE) if ( vio->type == VIO_TYPE_NAMEDPIPE)
{ {
DWORD length; DWORD length;
#ifdef OS2
if (!DosWrite((HFILE)vio->hPipe, (char*) buf, size, &length))
DBUG_RETURN(-1);
#else
if (!WriteFile(vio->hPipe, (char*) buf, size, &length, NULL)) if (!WriteFile(vio->hPipe, (char*) buf, size, &length, NULL))
DBUG_RETURN(-1); DBUG_RETURN(-1);
#endif
DBUG_RETURN(length); DBUG_RETURN(length);
} }
r = send(vio->sd, buf, size,0); r = send(vio->sd, buf, size,0);
@ -202,7 +217,7 @@ int vio_write(Vio * vio, const gptr buf, int size)
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (r < 0) if (r < 0)
{ {
DBUG_PRINT("error", ("Got error on write: %d",errno)); DBUG_PRINT("vio_error", ("Got error on write: %d",socket_errno));
} }
#endif /* DBUG_OFF */ #endif /* DBUG_OFF */
DBUG_PRINT("exit", ("%d", r)); DBUG_PRINT("exit", ("%d", r));
@ -216,7 +231,7 @@ int vio_blocking(Vio * vio, my_bool set_blocking_mode)
DBUG_ENTER("vio_blocking"); DBUG_ENTER("vio_blocking");
DBUG_PRINT("enter", ("set_blocking_mode: %d", (int) set_blocking_mode)); DBUG_PRINT("enter", ("set_blocking_mode: %d", (int) set_blocking_mode));
#if !defined(___WIN__) && !defined(__EMX__) #if !defined(___WIN__) && !defined(__EMX__) && !defined(OS2)
#if !defined(NO_FCNTL_NONBLOCK) #if !defined(NO_FCNTL_NONBLOCK)
if (vio->sd >= 0) if (vio->sd >= 0)
@ -341,7 +356,7 @@ int vio_close(Vio * vio)
} }
if (r) if (r)
{ {
DBUG_PRINT("error", ("close() failed, error: %d",errno)); DBUG_PRINT("vio_error", ("close() failed, error: %d",socket_errno));
/* FIXME: error handling (not critical for MySQL) */ /* FIXME: error handling (not critical for MySQL) */
} }
vio->type= VIO_CLOSED; vio->type= VIO_CLOSED;
@ -380,7 +395,7 @@ my_bool vio_peer_addr(Vio * vio, char *buf)
if (getpeername(vio->sd, (struct sockaddr *) (& (vio->remote)), if (getpeername(vio->sd, (struct sockaddr *) (& (vio->remote)),
&addrLen) != 0) &addrLen) != 0)
{ {
DBUG_PRINT("exit", ("getpeername, error: %d", errno)); DBUG_PRINT("exit", ("getpeername, error: %d", socket_errno));
DBUG_RETURN(1); DBUG_RETURN(1);
} }
my_inet_ntoa(vio->remote.sin_addr,buf); my_inet_ntoa(vio->remote.sin_addr,buf);

View File

@ -20,9 +20,7 @@
#include "mrgdef.h" #include "mrgdef.h"
int mrg_lock_database(info,lock_type) int mrg_lock_database(MRG_INFO *info,int lock_type)
MRG_INFO *info;
int lock_type;
{ {
int error,new_error; int error,new_error;
MRG_TABLE *file; MRG_TABLE *file;

View File

@ -18,8 +18,7 @@
#include "mrgdef.h" #include "mrgdef.h"
int mrg_close(info) int mrg_close(register MRG_INFO *info)
register MRG_INFO *info;
{ {
int error=0,new_error; int error=0,new_error;
MRG_TABLE *file; MRG_TABLE *file;

View File

@ -23,8 +23,7 @@
a NULL-pointer last a NULL-pointer last
*/ */
int mrg_create(name,table_names) int mrg_create(const char *name, const char**table_names)
const char *name,**table_names;
{ {
int save_errno; int save_errno;
uint errpos; uint errpos;

View File

@ -22,9 +22,9 @@
#include "mrgdef.h" #include "mrgdef.h"
int mrg_extra(info,function) int mrg_extra(
MRG_INFO *info; MRG_INFO *info,
enum ha_extra_function function; enum ha_extra_function function)
{ {
MRG_TABLE *file; MRG_TABLE *file;

View File

@ -30,10 +30,10 @@
*/ */
MRG_INFO *mrg_open(name,mode,handle_locking) MRG_INFO *mrg_open(
const char *name; const char *name,
int mode; int mode,
int handle_locking; int handle_locking)
{ {
int save_errno,i,errpos; int save_errno,i,errpos;
uint files,dir_length,length; uint files,dir_length,length;

View File

@ -24,8 +24,8 @@
done for all single user files to get changes in database */ done for all single user files to get changes in database */
int mrg_panic(flag) int mrg_panic(
enum ha_panic_function flag; enum ha_panic_function flag)
{ {
int error=0; int error=0;
LIST *list_element,*next_open; LIST *list_element,*next_open;

View File

@ -17,10 +17,10 @@
#include "mrgdef.h" #include "mrgdef.h"
int mrg_rsame(info,record,inx) int mrg_rsame(
MRG_INFO *info; MRG_INFO *info,
byte *record; byte *record,
int inx; /* not used, should be 0 */ int inx) /* not used, should be 0 */
{ {
if (inx) if (inx)
{ {

View File

@ -18,9 +18,9 @@
#include "mrgdef.h" #include "mrgdef.h"
int mrg_update(info,oldrec,newrec) int mrg_update(
register MRG_INFO *info; register MRG_INFO *info,
const byte *oldrec,*newrec; const byte *oldrec, const byte *newrec)
{ {
if (!info->current_table) if (!info->current_table)
{ {

View File

@ -19,6 +19,8 @@
#include <getopt.h> #include <getopt.h>
static void print_error(int exit_code, const char *fmt,...); static void print_error(int exit_code, const char *fmt,...);
static void get_options(int argc, char *argv[]);
static int create_record(char *pos, FILE *file);
int main(int argc,char *argv[]) int main(int argc,char *argv[])
{ {
@ -123,7 +125,7 @@ void get_options(int argc,char *argv[])
{ {
FILE *f; char s[HA_FT_MAXLEN]; int i=0,n=SWL_INIT; FILE *f; char s[HA_FT_MAXLEN]; int i=0,n=SWL_INIT;
if(!(stopwordlist=malloc(n*sizeof(char *)))) if(!(stopwordlist=(const char**) malloc(n*sizeof(char *))))
print_error(1,"malloc(%d)",n*sizeof(char *)); print_error(1,"malloc(%d)",n*sizeof(char *));
if(!(f=fopen(optarg,"r"))) if(!(f=fopen(optarg,"r")))
print_error(1,"fopen(%s)",optarg); print_error(1,"fopen(%s)",optarg);

View File

@ -211,7 +211,7 @@ err:
int ft_read_next(FT_DOCLIST *handler, char *record) int ft_read_next(FT_DOCLIST *handler, char *record)
{ {
MI_INFO *info=handler->info; MI_INFO *info= (MI_INFO *) handler->info;
if (++handler->curdoc >= handler->ndocs) if (++handler->curdoc >= handler->ndocs)
{ {

View File

@ -32,6 +32,8 @@ static char record[MAX_REC_LENGTH],read_record[MAX_REC_LENGTH];
void get_options(int argc,char *argv[]); void get_options(int argc,char *argv[]);
static int run_test(const char *filename); static int run_test(const char *filename);
static void get_options(int argc, char *argv[]);
static void create_record(char *, int);
int main(int argc,char *argv[]) int main(int argc,char *argv[])
{ {
@ -46,8 +48,6 @@ static MI_COLUMNDEF recinfo[3];
static MI_KEYDEF keyinfo[2]; static MI_KEYDEF keyinfo[2];
static MI_KEYSEG keyseg[10]; static MI_KEYSEG keyseg[10];
void create_record(char *, int);
static int run_test(const char *filename) static int run_test(const char *filename)
{ {
MI_INFO *file; MI_INFO *file;

View File

@ -45,7 +45,7 @@
#define LWS_TF (count) #define LWS_TF (count)
#define LWS_BINARY (count>0) #define LWS_BINARY (count>0)
#define LWS_SQUARE (count*count) #define LWS_SQUARE (count*count)
#define LWS_LOG (count?(log(count)+1):0) #define LWS_LOG (count?(log( (double) count)+1):0)
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
#define PRENORM_NONE (p->weight) #define PRENORM_NONE (p->weight)
#define PRENORM_MAX (p->weight/docstat.max) #define PRENORM_MAX (p->weight/docstat.max)

View File

@ -458,7 +458,7 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
/* Check that there isn't a row with auto_increment = 0 in the table */ /* Check that there isn't a row with auto_increment = 0 in the table */
mi_extra(info,HA_EXTRA_KEYREAD); mi_extra(info,HA_EXTRA_KEYREAD);
bzero(info->lastkey,keyinfo->seg->length); bzero(info->lastkey,keyinfo->seg->length);
if (!mi_rkey(info, info->rec_buff, key, info->lastkey, if (!mi_rkey(info, info->rec_buff, key, (const byte*) info->lastkey,
keyinfo->seg->length, HA_READ_KEY_EXACT)) keyinfo->seg->length, HA_READ_KEY_EXACT))
{ {
/* Don't count this as a real warning, as myisamchk can't correct it */ /* Don't count this as a real warning, as myisamchk can't correct it */
@ -2075,7 +2075,7 @@ static int sort_key_read(SORT_INFO *sort_info, void *key)
"Found too many records; Can`t continue"); "Found too many records; Can`t continue");
DBUG_RETURN(1); DBUG_RETURN(1);
} }
(void) _mi_make_key(info,sort_info->key,key,sort_info->record, (void) _mi_make_key(info,sort_info->key,(uchar*)key,sort_info->record,
sort_info->filepos); sort_info->filepos);
DBUG_RETURN(sort_write_record(sort_info)); DBUG_RETURN(sort_write_record(sort_info));
} /* sort_key_read */ } /* sort_key_read */

View File

@ -18,8 +18,7 @@
#include "myisam.h" #include "myisam.h"
#include <getopt.h> #include <getopt.h>
#include <m_ctype.h> #include <m_string.h>
#define MAX_REC_LENGTH 1024 #define MAX_REC_LENGTH 1024

View File

@ -59,11 +59,11 @@ static MI_KEYSEG glob_keyseg[MYISAM_KEYS][MAX_PARTS];
/* Test program */ /* Test program */
int main(int argc, char **argv) int main(int argc, char *argv[])
{ {
uint i; uint i;
int j,n1,n2,n3,error,k; int j,n1,n2,n3,error,k;
uint write_count,update,dupp_keys,delete,start,length,blob_pos, uint write_count,update,dupp_keys,opt_delete,start,length,blob_pos,
reclength,ant,found_parts; reclength,ant,found_parts;
my_off_t lastpos; my_off_t lastpos;
ha_rows range_records,records; ha_rows range_records,records;
@ -180,7 +180,7 @@ int main(int argc, char **argv)
recinfo[6].null_pos=0; recinfo[6].null_pos=0;
} }
write_count=update=dupp_keys=delete=0; write_count=update=dupp_keys=opt_delete=0;
blob_buffer=0; blob_buffer=0;
for (i=1000 ; i>0 ; i--) key1[i]=0; for (i=1000 ; i>0 ; i--) key1[i]=0;
@ -280,14 +280,14 @@ int main(int argc, char **argv)
printf("can't find key1: \"%s\"\n",key); printf("can't find key1: \"%s\"\n",key);
goto err; goto err;
} }
if (delete == (uint) remove_count) /* While testing */ if (opt_delete == (uint) remove_count) /* While testing */
goto end; goto end;
if (mi_delete(file,read_record)) if (mi_delete(file,read_record))
{ {
printf("error: %d; can't delete record: \"%s\"\n", my_errno,read_record); printf("error: %d; can't delete record: \"%s\"\n", my_errno,read_record);
goto err; goto err;
} }
delete++; opt_delete++;
key1[atoi(read_record+keyinfo[0].seg[0].start)]--; key1[atoi(read_record+keyinfo[0].seg[0].start)]--;
key3[atoi(read_record+keyinfo[2].seg[0].start)]=0; key3[atoi(read_record+keyinfo[2].seg[0].start)]=0;
} }
@ -418,10 +418,10 @@ int main(int argc, char **argv)
} }
while ((error=mi_rnext(file,read_record3,0)) == 0 && ant < write_count+10) while ((error=mi_rnext(file,read_record3,0)) == 0 && ant < write_count+10)
ant++; ant++;
if (ant != write_count - delete || error != HA_ERR_END_OF_FILE) if (ant != write_count - opt_delete || error != HA_ERR_END_OF_FILE)
{ {
printf("next: I found: %d records of %d (error: %d)\n", printf("next: I found: %d records of %d (error: %d)\n",
ant, write_count - delete, error); ant, write_count - opt_delete, error);
goto end; goto end;
} }
if (mi_rlast(file,read_record2,0) || if (mi_rlast(file,read_record2,0) ||
@ -435,7 +435,7 @@ int main(int argc, char **argv)
ant=1; ant=1;
while (mi_rprev(file,read_record3,0) == 0 && ant < write_count+10) while (mi_rprev(file,read_record3,0) == 0 && ant < write_count+10)
ant++; ant++;
if (ant != write_count - delete) if (ant != write_count - opt_delete)
{ {
printf("prev: I found: %d records of %d\n",ant,write_count); printf("prev: I found: %d records of %d\n",ant,write_count);
goto end; goto end;
@ -495,7 +495,7 @@ int main(int argc, char **argv)
if (mi_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT)) goto err; if (mi_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT)) goto err;
if (mi_rnext(file,read_record3,0)) goto err; if (mi_rnext(file,read_record3,0)) goto err;
if (mi_delete(file,read_record3)) goto err; if (mi_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=1; ant=1;
while (mi_rnext(file,read_record3,0) == 0 && while (mi_rnext(file,read_record3,0) == 0 &&
bcmp(read_record3+start,key,length) == 0) ant++; bcmp(read_record3+start,key,length) == 0) ant++;
@ -513,7 +513,7 @@ int main(int argc, char **argv)
if (mi_rprev(file,read_record3,0)) goto err; if (mi_rprev(file,read_record3,0)) goto err;
if (mi_rprev(file,read_record3,0)) goto err; if (mi_rprev(file,read_record3,0)) goto err;
if (mi_delete(file,read_record3)) goto err; if (mi_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=1; ant=1;
while (mi_rprev(file,read_record3,0) == 0 && while (mi_rprev(file,read_record3,0) == 0 &&
bcmp(read_record3+start,key,length) == 0) ant++; bcmp(read_record3+start,key,length) == 0) ant++;
@ -530,7 +530,7 @@ int main(int argc, char **argv)
DBUG_PRINT("progpos",("first - delete - next -> last")); DBUG_PRINT("progpos",("first - delete - next -> last"));
if (mi_rkey(file,read_record3,0,key,0,HA_READ_KEY_EXACT)) goto err; if (mi_rkey(file,read_record3,0,key,0,HA_READ_KEY_EXACT)) goto err;
if (mi_delete(file,read_record3)) goto err; if (mi_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=1; ant=1;
if (mi_rnext(file,read_record,0)) if (mi_rnext(file,read_record,0))
goto err; /* Skall finnas poster */ goto err; /* Skall finnas poster */
@ -547,7 +547,7 @@ int main(int argc, char **argv)
DBUG_PRINT("progpos",("last - delete - prev -> first")); DBUG_PRINT("progpos",("last - delete - prev -> first"));
if (mi_rprev(file,read_record3,0)) goto err; if (mi_rprev(file,read_record3,0)) goto err;
if (mi_delete(file,read_record3)) goto err; if (mi_delete(file,read_record3)) goto err;
delete++; opt_delete++;
ant=0; ant=0;
while (mi_rprev(file,read_record3,0) == 0 && while (mi_rprev(file,read_record3,0) == 0 &&
bcmp(read_record3+start,key,length) == 0) ant++; bcmp(read_record3+start,key,length) == 0) ant++;
@ -641,7 +641,7 @@ int main(int argc, char **argv)
if (!silent) if (!silent)
printf("- mi_info\n"); printf("- mi_info\n");
mi_status(file,&info,HA_STATUS_VARIABLE | HA_STATUS_CONST); mi_status(file,&info,HA_STATUS_VARIABLE | HA_STATUS_CONST);
if (info.records != write_count-delete || info.deleted > delete + update if (info.records != write_count-opt_delete || info.deleted > opt_delete + update
|| info.keys != keys) || info.keys != keys)
{ {
puts("Wrong info from mi_info"); puts("Wrong info from mi_info");
@ -678,10 +678,10 @@ int main(int argc, char **argv)
while ((error=mi_rrnd(file,record,HA_OFFSET_ERROR)) != HA_ERR_END_OF_FILE && while ((error=mi_rrnd(file,record,HA_OFFSET_ERROR)) != HA_ERR_END_OF_FILE &&
ant < write_count + 10) ant < write_count + 10)
ant+= error ? 0 : 1; ant+= error ? 0 : 1;
if (ant != write_count-delete) if (ant != write_count-opt_delete)
{ {
printf("rrnd with cache: I can only find: %d records of %d\n", printf("rrnd with cache: I can only find: %d records of %d\n",
ant,write_count-delete); ant,write_count-opt_delete);
goto end; goto end;
} }
if (mi_extra(file,HA_EXTRA_NO_CACHE)) if (mi_extra(file,HA_EXTRA_NO_CACHE))
@ -695,10 +695,10 @@ int main(int argc, char **argv)
while ((error=mi_scan(file,record)) != HA_ERR_END_OF_FILE && while ((error=mi_scan(file,record)) != HA_ERR_END_OF_FILE &&
ant < write_count + 10) ant < write_count + 10)
ant+= error ? 0 : 1; ant+= error ? 0 : 1;
if (ant != write_count-delete) if (ant != write_count-opt_delete)
{ {
printf("scan with cache: I can only find: %d records of %d\n", printf("scan with cache: I can only find: %d records of %d\n",
ant,write_count-delete); ant,write_count-opt_delete);
goto end; goto end;
} }
@ -724,7 +724,7 @@ int main(int argc, char **argv)
lastpos=info.recpos; lastpos=info.recpos;
if (error == 0) if (error == 0)
{ {
if (delete == (uint) remove_count) /* While testing */ if (opt_delete == (uint) remove_count) /* While testing */
goto end; goto end;
if (mi_rsame(file,read_record,-1)) if (mi_rsame(file,read_record,-1))
{ {
@ -751,19 +751,19 @@ int main(int argc, char **argv)
if (mi_delete(file,read_record)) if (mi_delete(file,read_record))
{ {
printf("can't delete record: %6.6s, delete_count: %d\n", printf("can't delete record: %6.6s, delete_count: %d\n",
read_record, delete); read_record, opt_delete);
goto err; goto err;
} }
delete++; opt_delete++;
} }
else else
found_parts++; found_parts++;
} }
if (my_errno != HA_ERR_END_OF_FILE && my_errno != HA_ERR_RECORD_DELETED) if (my_errno != HA_ERR_END_OF_FILE && my_errno != HA_ERR_RECORD_DELETED)
printf("error: %d from mi_rrnd\n",my_errno); printf("error: %d from mi_rrnd\n",my_errno);
if (write_count != delete) if (write_count != opt_delete)
{ {
printf("Deleted only %d of %d records (%d parts)\n",delete,write_count, printf("Deleted only %d of %d records (%d parts)\n",opt_delete,write_count,
found_parts); found_parts);
goto err; goto err;
} }
@ -774,7 +774,7 @@ end:
if (!silent) if (!silent)
{ {
printf("\nFollowing test have been made:\n"); printf("\nFollowing test have been made:\n");
printf("Write records: %d\nUpdate records: %d\nSame-key-read: %d\nDelete records: %d\n", write_count,update,dupp_keys,delete); printf("Write records: %d\nUpdate records: %d\nSame-key-read: %d\nDelete records: %d\n", write_count,update,dupp_keys,opt_delete);
if (rec_pointer_size) if (rec_pointer_size)
printf("Record pointer size: %d\n",rec_pointer_size); printf("Record pointer size: %d\n",rec_pointer_size);
if (key_cacheing) if (key_cacheing)

View File

@ -1,5 +1,10 @@
#!/bin/sh
#
# Execute some simple basic test on MyISAM libary to check if things
# works at all.
silent="-s" silent="-s"
suffix=$MACH if test -f mi_test1$MACH ; then suffix=$MACH else suffix=""; fi
mi_test1$suffix $silent mi_test1$suffix $silent
myisamchk$suffix -se test1 myisamchk$suffix -se test1
mi_test1$suffix $silent -N -S mi_test1$suffix $silent -N -S

View File

@ -21,7 +21,7 @@
#endif #endif
#include "myisamdef.h" #include "myisamdef.h"
#include "my_tree.h" #include <my_tree.h>
#include <stdarg.h> #include <stdarg.h>
#ifdef HAVE_GETRUSAGE #ifdef HAVE_GETRUSAGE
#include <sys/resource.h> #include <sys/resource.h>
@ -251,12 +251,12 @@ static void get_options(register int *argc, register char ***argv)
/* Fall through */ /* Fall through */
case 'I': case 'I':
case '?': case '?':
printf("%s Ver 1.3 for %s at %s\n",my_progname,SYSTEM_TYPE, printf("%s Ver 1.4 for %s at %s\n",my_progname,SYSTEM_TYPE,
MACHINE_TYPE); MACHINE_TYPE);
puts("By Monty, for your professional use\n"); puts("By Monty, for your professional use\n");
if (version) if (version)
break; break;
puts("Write info about whats in a myisam log file."); puts("Write info about whats in a MyISAM log file.");
printf("If no file name is given %s is used\n",log_filename); printf("If no file name is given %s is used\n",log_filename);
puts(""); puts("");
printf(usage,my_progname); printf(usage,my_progname);
@ -266,7 +266,7 @@ static void get_options(register int *argc, register char ***argv)
puts(" -o \"offset\" -p # \"remove # components from path\""); puts(" -o \"offset\" -p # \"remove # components from path\"");
puts(" -r \"recover\" -R \"file recordposition\""); puts(" -r \"recover\" -R \"file recordposition\"");
puts(" -u \"update\" -v \"verbose\" -w \"write file\""); puts(" -u \"update\" -v \"verbose\" -w \"write file\"");
puts(" -D \"myisam compileled with DBUG\" -P \"processes\""); puts(" -D \"myisam compiled with DBUG\" -P \"processes\"");
puts("\nOne can give a second and a third '-v' for more verbose."); puts("\nOne can give a second and a third '-v' for more verbose.");
puts("Normaly one does a update (-u)."); puts("Normaly one does a update (-u).");
puts("If a recover is done all writes and all possibly updates and deletes is done\nand errors are only counted."); puts("If a recover is done all writes and all possibly updates and deletes is done\nand errors are only counted.");
@ -376,10 +376,8 @@ static int examine_log(my_string file_name, char **table_names)
} }
if (curr_file_info) if (curr_file_info)
{
printf("\nWarning: %s is opened with same process and filenumber\nMaybe you should use the -P option ?\n", printf("\nWarning: %s is opened with same process and filenumber\nMaybe you should use the -P option ?\n",
curr_file_info->show_name); curr_file_info->show_name);
}
if (my_b_read(&cache,(byte*) head,2)) if (my_b_read(&cache,(byte*) head,2))
goto err; goto err;
file_info.name=0; file_info.name=0;

View File

@ -229,12 +229,12 @@ int main(int argc, char **argv)
#endif #endif
} }
enum options {OPT_CHARSETS_DIR=256}; enum options {OPT_CHARSETS_DIR_MP=256};
static struct option long_options[] = static struct option long_options[] =
{ {
{"backup", no_argument, 0, 'b'}, {"backup", no_argument, 0, 'b'},
{"character-sets-dir",required_argument,0, OPT_CHARSETS_DIR}, {"character-sets-dir",required_argument,0, OPT_CHARSETS_DIR_MP},
{"debug", optional_argument, 0, '#'}, {"debug", optional_argument, 0, '#'},
{"force", no_argument, 0, 'f'}, {"force", no_argument, 0, 'f'},
{"join", required_argument, 0, 'j'}, {"join", required_argument, 0, 'j'},
@ -334,7 +334,7 @@ static void get_options(int *argc,char ***argv)
case '#': case '#':
DBUG_PUSH(optarg ? optarg : "d:t:o"); DBUG_PUSH(optarg ? optarg : "d:t:o");
break; break;
case OPT_CHARSETS_DIR: case OPT_CHARSETS_DIR_MP:
charsets_dir = optarg; charsets_dir = optarg;
break; break;
case 'V': print_version(); exit(0); case 'V': print_version(); exit(0);
@ -1167,7 +1167,7 @@ static int make_huff_tree(HUFF_TREE *huff_tree, HUFF_COUNTS *huff_counts)
{ {
uint i,found,bits_packed,first,last; uint i,found,bits_packed,first,last;
my_off_t bytes_packed; my_off_t bytes_packed;
HUFF_ELEMENT *a,*b,*new; HUFF_ELEMENT *a,*b,*new_huff_el;
first=last=0; first=last=0;
if (huff_counts->tree_buff) if (huff_counts->tree_buff)
@ -1247,23 +1247,23 @@ static int make_huff_tree(HUFF_TREE *huff_tree, HUFF_COUNTS *huff_counts)
{ {
if (huff_counts->counts[i]) if (huff_counts->counts[i])
{ {
new=huff_tree->element_buffer+(found++); new_huff_el=huff_tree->element_buffer+(found++);
new->count=huff_counts->counts[i]; new_huff_el->count=huff_counts->counts[i];
new->a.leaf.null=0; new_huff_el->a.leaf.null=0;
new->a.leaf.element_nr=i; new_huff_el->a.leaf.element_nr=i;
queue.root[found]=(byte*) new; queue.root[found]=(byte*) new_huff_el;
} }
} }
while (found < 2) while (found < 2)
{ /* Our huff_trees request at least 2 elements */ { /* Our huff_trees request at least 2 elements */
new=huff_tree->element_buffer+(found++); new_huff_el=huff_tree->element_buffer+(found++);
new->count=0; new_huff_el->count=0;
new->a.leaf.null=0; new_huff_el->a.leaf.null=0;
if (last) if (last)
new->a.leaf.element_nr=huff_tree->min_chr=last-1; new_huff_el->a.leaf.element_nr=huff_tree->min_chr=last-1;
else else
new->a.leaf.element_nr=huff_tree->max_chr=last+1; new_huff_el->a.leaf.element_nr=huff_tree->max_chr=last+1;
queue.root[found]=(byte*) new; queue.root[found]=(byte*) new_huff_el;
} }
} }
queue.elements=found; queue.elements=found;
@ -1275,13 +1275,13 @@ static int make_huff_tree(HUFF_TREE *huff_tree, HUFF_COUNTS *huff_counts)
{ {
a=(HUFF_ELEMENT*) queue_remove(&queue,0); a=(HUFF_ELEMENT*) queue_remove(&queue,0);
b=(HUFF_ELEMENT*) queue.root[1]; b=(HUFF_ELEMENT*) queue.root[1];
new=huff_tree->element_buffer+found+i; new_huff_el=huff_tree->element_buffer+found+i;
new->count=a->count+b->count; new_huff_el->count=a->count+b->count;
bits_packed+=(uint) (new->count & 7); bits_packed+=(uint) (new_huff_el->count & 7);
bytes_packed+=new->count/8; bytes_packed+=new_huff_el->count/8;
new->a.nod.left=a; /* lesser in left */ new_huff_el->a.nod.left=a; /* lesser in left */
new->a.nod.right=b; new_huff_el->a.nod.right=b;
queue.root[1]=(byte*) new; queue.root[1]=(byte*) new_huff_el;
queue_replaced(&queue); queue_replaced(&queue);
} }
huff_tree->root=(HUFF_ELEMENT*) queue.root[1]; huff_tree->root=(HUFF_ELEMENT*) queue.root[1];
@ -1303,14 +1303,14 @@ static int compare_tree(register const uchar *s, register const uchar *t)
static int save_counts_in_queue(byte *key, element_count count, static int save_counts_in_queue(byte *key, element_count count,
HUFF_TREE *tree) HUFF_TREE *tree)
{ {
HUFF_ELEMENT *new; HUFF_ELEMENT *new_huff_el;
new=tree->element_buffer+(tree->elements++); new_huff_el=tree->element_buffer+(tree->elements++);
new->count=count; new_huff_el->count=count;
new->a.leaf.null=0; new_huff_el->a.leaf.null=0;
new->a.leaf.element_nr= (uint) (key- tree->counts->tree_buff) / new_huff_el->a.leaf.element_nr= (uint) (key- tree->counts->tree_buff) /
tree->counts->field_length; tree->counts->field_length;
queue.root[tree->elements]=(byte*) new; queue.root[tree->elements]=(byte*) new_huff_el;
return 0; return 0;
} }
@ -1352,14 +1352,14 @@ static my_off_t calc_packed_length(HUFF_COUNTS *huff_counts,
_downheap(&queue,i); _downheap(&queue,i);
for (i=0 ; i < found-1 ; i++) for (i=0 ; i < found-1 ; i++)
{ {
HUFF_ELEMENT *a,*b,*new; HUFF_ELEMENT *a,*b,*new_huff_el;
a=(HUFF_ELEMENT*) queue_remove(&queue,0); a=(HUFF_ELEMENT*) queue_remove(&queue,0);
b=(HUFF_ELEMENT*) queue.root[1]; b=(HUFF_ELEMENT*) queue.root[1];
new=element_buffer+i; new_huff_el=element_buffer+i;
new->count=a->count+b->count; new_huff_el->count=a->count+b->count;
bits_packed+=(uint) (new->count & 7); bits_packed+=(uint) (new_huff_el->count & 7);
bytes_packed+=new->count/8; bytes_packed+=new_huff_el->count/8;
queue.root[1]=(byte*) new; queue.root[1]=(byte*) new_huff_el;
queue_replaced(&queue); queue_replaced(&queue);
} }
DBUG_RETURN(bytes_packed+(bits_packed+7)/8); DBUG_RETURN(bytes_packed+(bits_packed+7)/8);

View File

@ -28,6 +28,9 @@
#include <queues.h> #include <queues.h>
/* static variabels */ /* static variabels */
#undef MIN_SORT_MEMORY
#undef MYF_RW
#undef DISK_BUFFER_SIZE
#define MERGEBUFF 15 #define MERGEBUFF 15
#define MERGEBUFF2 31 #define MERGEBUFF2 31
@ -36,10 +39,10 @@
#define DISK_BUFFER_SIZE (IO_SIZE*16) #define DISK_BUFFER_SIZE (IO_SIZE*16)
typedef struct st_buffpek { typedef struct st_buffpek {
my_off_t file_pos; /* position to buffer */ my_off_t file_pos; /* Where we are in the sort file */
ha_rows count; /* keys in buffer */ ha_rows count; /* Number of rows in table */
uchar *base,*key; /* Pekare inom sort_key - indexdel */ uchar *base,*key; /* Key pointers */
uint mem_count; /* keys left in memory */ uint mem_count; /* numbers of keys in memory */
uint max_keys; /* Max keys in buffert */ uint max_keys; /* Max keys in buffert */
} BUFFPEK; } BUFFPEK;
@ -361,7 +364,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
sort_length)); sort_length));
if (error == -1) if (error == -1)
goto err; /* purecov: inspected */ goto err; /* purecov: inspected */
queue_insert(&queue,(void*) buffpek); queue_insert(&queue,(char*) buffpek);
} }
while (queue.elements > 1) while (queue.elements > 1)

View File

@ -18,9 +18,9 @@
#include "mymrgdef.h" #include "mymrgdef.h"
int myrg_delete(info,record) int myrg_delete(
MYRG_INFO *info; MYRG_INFO *info,
const byte *record; const byte *record)
{ {
if (!info->current_table) if (!info->current_table)
{ {

View File

@ -20,9 +20,9 @@
#include "mymrgdef.h" #include "mymrgdef.h"
int myrg_lock_database(info,lock_type) int myrg_lock_database(
MYRG_INFO *info; MYRG_INFO *info,
int lock_type; int lock_type)
{ {
int error,new_error; int error,new_error;
MYRG_TABLE *file; MYRG_TABLE *file;

View File

@ -30,10 +30,10 @@
*/ */
MYRG_INFO *myrg_open(name,mode,handle_locking) MYRG_INFO *myrg_open(
const char *name; const char *name,
int mode; int mode,
int handle_locking; int handle_locking)
{ {
int save_errno,i,errpos; int save_errno,i,errpos;
uint files,dir_length,length; uint files,dir_length,length;

View File

@ -24,8 +24,7 @@
done for all single user files to get changes in database */ done for all single user files to get changes in database */
int myrg_panic(flag) int myrg_panic(enum ha_panic_function flag)
enum ha_panic_function flag;
{ {
int error=0; int error=0;
LIST *list_element,*next_open; LIST *list_element,*next_open;

View File

@ -4,7 +4,7 @@ connection con1;
set SQL_LOG_BIN=0; set SQL_LOG_BIN=0;
drop table if exists t1; drop table if exists t1;
create table t1(n int); create table t1(n int);
--replace_result "errno = 2" "errno = X" "errno = 22" "errno = X" --replace_result "errno = 2" "errno = X" "errno = 22" "errno = X" "errno = 23" "errno = X"
backup table t1 to '../bogus'; backup table t1 to '../bogus';
backup table t1 to '../tmp'; backup table t1 to '../tmp';
drop table t1; drop table t1;

View File

@ -9,7 +9,7 @@ optimize table t1;
check table t1,t2; check table t1,t2;
repair table t1,t2; repair table t1,t2;
check table t2,t1; check table t2,t1;
lock tables t1 read; lock tables t1 write;
check table t2,t1; check table t2,t1;
show columns from t1; show columns from t1;
show full columns from t1; show full columns from t1;

View File

@ -393,16 +393,16 @@ CHARSET_INFO *get_charset(uint cs_number, myf flags)
my_bool set_default_charset(uint cs, myf flags) my_bool set_default_charset(uint cs, myf flags)
{ {
CHARSET_INFO *new; CHARSET_INFO *new_charset;
DBUG_ENTER("set_default_charset"); DBUG_ENTER("set_default_charset");
DBUG_PRINT("enter",("character set: %d",(int) cs)); DBUG_PRINT("enter",("character set: %d",(int) cs));
new = get_charset(cs, flags); new_charset = get_charset(cs, flags);
if (!new) if (!new_charset)
{ {
DBUG_PRINT("error",("Couldn't set default character set")); DBUG_PRINT("error",("Couldn't set default character set"));
DBUG_RETURN(TRUE); /* error */ DBUG_RETURN(TRUE); /* error */
} }
default_charset_info = new; default_charset_info = new_charset;
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
@ -424,17 +424,17 @@ CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags)
my_bool set_default_charset_by_name(const char *cs_name, myf flags) my_bool set_default_charset_by_name(const char *cs_name, myf flags)
{ {
CHARSET_INFO *new; CHARSET_INFO *new_charset;
DBUG_ENTER("set_default_charset_by_name"); DBUG_ENTER("set_default_charset_by_name");
DBUG_PRINT("enter",("character set: %s", cs_name)); DBUG_PRINT("enter",("character set: %s", cs_name));
new = get_charset_by_name(cs_name, flags); new_charset = get_charset_by_name(cs_name, flags);
if (!new) if (!new_charset)
{ {
DBUG_PRINT("error",("Couldn't set default character set")); DBUG_PRINT("error",("Couldn't set default character set"));
DBUG_RETURN(TRUE); /* error */ DBUG_RETURN(TRUE); /* error */
} }
default_charset_info = new; default_charset_info = new_charset;
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }

View File

@ -146,7 +146,7 @@ void load_defaults(const char *conf_file, const char **groups,
&group)) &group))
goto err; goto err;
#endif #endif
#ifdef __EMX__ #if defined(__EMX__) || defined(OS2)
if (getenv("ETC") && if (getenv("ETC") &&
search_default_file(&args, &alloc, getenv("ETC"), conf_file, search_default_file(&args, &alloc, getenv("ETC"), conf_file,
default_ext, &group)) default_ext, &group))
@ -363,7 +363,7 @@ void print_defaults(const char *conf_file, const char **groups)
GetWindowsDirectory(name,sizeof(name)); GetWindowsDirectory(name,sizeof(name));
printf("%s\\%s%s ",name,conf_file,have_ext ? "" : windows_ext); printf("%s\\%s%s ",name,conf_file,have_ext ? "" : windows_ext);
#endif #endif
#ifdef __EMX__ #if defined(__EMX__) || defined(OS2)
if (getenv("ETC")) if (getenv("ETC"))
printf("%s\\%s%s ", getenv("ETC"), conf_file, default_ext); printf("%s\\%s%s ", getenv("ETC"), conf_file, default_ext);
#endif #endif

View File

@ -38,7 +38,7 @@ Cambridge, MA 02139, USA. */
#include <config.h> #include <config.h>
#endif #endif
#if (!defined (__STDC__) || !__STDC__) && !defined(MSDOS) #if (!defined (__STDC__) || !__STDC__) && !defined(MSDOS) && !defined(OS2)
/* This is a separate conditional since some stdc systems /* This is a separate conditional since some stdc systems
reject `defined (const)'. */ reject `defined (const)'. */
#ifndef const #ifndef const
@ -176,7 +176,9 @@ static char *posixly_correct;
/* Avoid depending on library functions or files /* Avoid depending on library functions or files
whose names are inconsistent. */ whose names are inconsistent. */
#ifndef OS2
char *getenv (const char *); char *getenv (const char *);
#endif
static char * static char *
my_index (const char *str, int chr) my_index (const char *str, int chr)

View File

@ -27,7 +27,7 @@ Cambridge, MA 02139, USA. */
#include <global.h> #include <global.h>
#include "getopt.h" #include "getopt.h"
#if (!defined (__STDC__) || !__STDC__) && !defined(MSDOS) #if (!defined (__STDC__) || !__STDC__) && !defined(MSDOS) && !defined(OS2)
/* This is a separate conditional since some stdc systems /* This is a separate conditional since some stdc systems
reject `defined (const)'. */ reject `defined (const)'. */
#ifndef const #ifndef const

View File

@ -72,11 +72,11 @@ void list_free(LIST *root, pbool free_data)
LIST *list_cons(void *data, LIST *list) LIST *list_cons(void *data, LIST *list)
{ {
LIST *new=(LIST*) my_malloc(sizeof(LIST),MYF(MY_FAE)); LIST *new_charset=(LIST*) my_malloc(sizeof(LIST),MYF(MY_FAE));
if (!new) if (!new_charset)
return 0; return 0;
new->data=data; new_charset->data=data;
return list_add(list,new); return list_add(list,new_charset);
} }

View File

@ -24,7 +24,7 @@ uint dirname_length(const char *name)
{ {
register my_string pos,gpos; register my_string pos,gpos;
#ifdef FN_DEVCHAR #ifdef FN_DEVCHAR
if ((pos=strrchr(name,FN_DEVCHAR)) == 0) if ((pos=(char*)strrchr(name,FN_DEVCHAR)) == 0)
#endif #endif
pos=(char*) name-1; pos=(char*) name-1;

View File

@ -65,7 +65,7 @@ my_string fn_format(my_string to, const char *name, const char *dsk,
pack_dirname(dev,dev); /* Put in ./.. and ~/.. */ pack_dirname(dev,dev); /* Put in ./.. and ~/.. */
if (flag & 4) if (flag & 4)
(void) unpack_dirname(dev,dev); /* Replace ~/.. with dir */ (void) unpack_dirname(dev,dev); /* Replace ~/.. with dir */
if ((pos=strchr(name,FN_EXTCHAR)) != NullS) if ((pos=(char*)strchr(name,FN_EXTCHAR)) != NullS)
{ {
if ((flag & 2) == 0) /* Skall vi byta extension ? */ if ((flag & 2) == 0) /* Skall vi byta extension ? */
{ {

View File

@ -74,7 +74,7 @@ my_string my_path(my_string to, const char *progname,
/* test if file without filename is found in path */ /* test if file without filename is found in path */
/* Returns to if found and to has dirpart if found, else NullS */ /* Returns to if found and to has dirpart if found, else NullS */
#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) #if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2)
#define F_OK 0 #define F_OK 0
#define PATH_SEP ';' #define PATH_SEP ';'
#define PROGRAM_EXTENSION ".exe" #define PROGRAM_EXTENSION ".exe"

View File

@ -52,7 +52,7 @@
#define MAX_THRESH 8 #define MAX_THRESH 8
/* Stack node declarations used to store unfulfilled partition obligations. */ /* Stack node declarations used to store unfulfilled partition obligations. */
typedef struct typedef struct _qsort_stack_node
{ {
char *lo; char *lo;
char *hi; char *hi;
@ -109,7 +109,7 @@ qsort_t qsort(void *base_ptr, size_t total_elems, size_t size, qsort_cmp cmp)
if (total_elems > MAX_THRESH) if (total_elems > MAX_THRESH)
{ {
char *lo = base_ptr; char *lo = (char*) base_ptr;
char *hi = &lo[size * (total_elems - 1)]; char *hi = &lo[size * (total_elems - 1)];
stack_node stack[STACK_SIZE]; /* Largest size needed for 32-bit int!!! */ stack_node stack[STACK_SIZE]; /* Largest size needed for 32-bit int!!! */
stack_node *top = stack + 1; stack_node *top = stack + 1;

View File

@ -25,7 +25,7 @@
#endif #endif
#ifdef HAVE_TEMPNAM #ifdef HAVE_TEMPNAM
#ifndef MSDOS #if !defined( MSDOS) && !defined(OS2)
extern char **environ; extern char **environ;
#endif #endif
#endif #endif
@ -122,12 +122,19 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
to[1]= 0; to[1]= 0;
dir=to; dir=to;
} }
old_env=environ; #ifdef OS2
// changing environ variable doesn't work with VACPP
char buffer[256];
sprintf( buffer, "TMP=%s", dir);
putenv( buffer);
#else
old_env= (char**) environ;
if (dir) if (dir)
{ /* Don't use TMPDIR if dir is given */ { /* Don't use TMPDIR if dir is given */
environ=temp_env; environ=(const char**) temp_env;
temp_env[0]=0; temp_env[0]=0;
} }
#endif
if ((res=tempnam((char*) dir, (char*) prefix))) if ((res=tempnam((char*) dir, (char*) prefix)))
{ {
strmake(to,res,FN_REFLEN-1); strmake(to,res,FN_REFLEN-1);
@ -142,7 +149,9 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
{ {
DBUG_PRINT("error",("Got error: %d from tempnam",errno)); DBUG_PRINT("error",("Got error: %d from tempnam",errno));
} }
environ=old_env; #ifndef OS2
environ=(const char**) old_env;
#endif
} }
#else #else
{ {

View File

@ -18,14 +18,14 @@
#define USES_TYPES #define USES_TYPES
#include "global.h" #include "global.h"
#if !defined(_MSC_VER) && !defined(__BORLANDC__) #if !defined(_MSC_VER) && !defined(__BORLANDC__) && !defined(OS2)
#include "mysys_priv.h" #include "mysys_priv.h"
#include <sys/times.h> #include <sys/times.h>
#endif #endif
long my_clock(void) long my_clock(void)
{ {
#if !defined(MSDOS) && !defined(__WIN__) #if !defined(MSDOS) && !defined(__WIN__) && !defined(OS2)
struct tms tmsbuf; struct tms tmsbuf;
VOID(times(&tmsbuf)); VOID(times(&tmsbuf));
return (tmsbuf.tms_utime + tmsbuf.tms_stime); return (tmsbuf.tms_utime + tmsbuf.tms_stime);

View File

@ -81,7 +81,7 @@ int my_copy(const char *from, const char *to, myf MyFlags)
if (MyFlags & MY_HOLD_ORIGINAL_MODES && new_file_stat) if (MyFlags & MY_HOLD_ORIGINAL_MODES && new_file_stat)
DBUG_RETURN(0); /* File copyed but not stat */ DBUG_RETURN(0); /* File copyed but not stat */
VOID(chmod(to, stat_buff.st_mode & 07777)); /* Copy modes */ VOID(chmod(to, stat_buff.st_mode & 07777)); /* Copy modes */
#if !defined(MSDOS) && !defined(__WIN__) && !defined(__EMX__) #if !defined(MSDOS) && !defined(__WIN__) && !defined(__EMX__) && !defined(OS2)
VOID(chown(to, stat_buff.st_uid,stat_buff.st_gid)); /* Copy ownership */ VOID(chown(to, stat_buff.st_uid,stat_buff.st_gid)); /* Copy ownership */
#endif #endif
#if !defined(VMS) && !defined(__ZTC__) #if !defined(VMS) && !defined(__ZTC__)

View File

@ -20,7 +20,7 @@
#include <my_dir.h> #include <my_dir.h>
#include "mysys_err.h" #include "mysys_err.h"
#include <errno.h> #include <errno.h>
#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) #if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2)
#include <share.h> #include <share.h>
#endif #endif
@ -48,7 +48,7 @@ File my_create(const char *FileName, int CreateFlags, int access_flags,
#elif defined(VMS) #elif defined(VMS)
fd = open((my_string) FileName, access_flags | O_CREAT, 0, fd = open((my_string) FileName, access_flags | O_CREAT, 0,
"ctx=stm","ctx=bin"); "ctx=stm","ctx=bin");
#elif defined(MSDOS) || defined(__WIN__) || defined(__EMX__) #elif defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2)
if (access_flags & O_SHARE) if (access_flags & O_SHARE)
fd = sopen((my_string) FileName, access_flags | O_CREAT | O_BINARY, fd = sopen((my_string) FileName, access_flags | O_CREAT | O_BINARY,
SH_DENYNO, MY_S_IREAD | MY_S_IWRITE); SH_DENYNO, MY_S_IREAD | MY_S_IWRITE);

View File

@ -28,6 +28,9 @@
#include <dos.h> #include <dos.h>
#include <direct.h> #include <direct.h>
#endif #endif
#if defined(OS2)
#include <direct.h>
#endif
#ifdef __EMX__ #ifdef __EMX__
// chdir2 support also drive change // chdir2 support also drive change
@ -93,16 +96,16 @@ int my_setwd(const char *dir, myf MyFlags)
int res; int res;
size_s length; size_s length;
my_string start,pos; my_string start,pos;
#if defined(VMS) || defined(MSDOS) #if defined(VMS) || defined(MSDOS) || defined(OS2)
char buff[FN_REFLEN]; char buff[FN_REFLEN];
#endif #endif
DBUG_ENTER("my_setwd"); DBUG_ENTER("my_setwd");
DBUG_PRINT("my",("dir: '%s' MyFlags %d", dir, MyFlags)); DBUG_PRINT("my",("dir: '%s' MyFlags %d", dir, MyFlags));
start=(my_string) dir; start=(my_string) dir;
#if defined(MSDOS) /* MSDOS chdir can't change drive */ #if defined(MSDOS) || defined(OS2) /* OS2/MSDOS chdir can't change drive */
#if !defined(_DDL) && !defined(WIN32) #if !defined(_DDL) && !defined(WIN32)
if ((pos=strchr(dir,FN_DEVCHAR)) != 0) if ((pos=(char*) strchr(dir,FN_DEVCHAR)) != 0)
{ {
uint drive,drives; uint drive,drives;
@ -110,8 +113,13 @@ int my_setwd(const char *dir, myf MyFlags)
drive=(uint) (toupper(dir[0])-'A'+1); drives= (uint) -1; drive=(uint) (toupper(dir[0])-'A'+1); drives= (uint) -1;
if ((pos-(byte*) dir) == 2 && drive > 0 && drive < 32) if ((pos-(byte*) dir) == 2 && drive > 0 && drive < 32)
{ {
#ifdef OS2
_chdrive(drive);
drives = _getdrive();
#else
_dos_setdrive(drive,&drives); _dos_setdrive(drive,&drives);
_dos_getdrive(&drives); _dos_getdrive(&drives);
#endif
} }
if (drive != drives) if (drive != drives)
{ {

View File

@ -74,7 +74,7 @@ void my_init(void)
pthread_init(); /* Must be called before DBUG_ENTER */ pthread_init(); /* Must be called before DBUG_ENTER */
#endif #endif
my_thread_global_init(); my_thread_global_init();
#ifndef __WIN__ #if !defined( __WIN__) && !defined(OS2)
sigfillset(&my_signals); /* signals blocked by mf_brkhant */ sigfillset(&my_signals); /* signals blocked by mf_brkhant */
#endif #endif
#endif /* THREAD */ #endif /* THREAD */

View File

@ -27,7 +27,9 @@
# include <dirent.h> # include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name) # define NAMLEN(dirent) strlen((dirent)->d_name)
#else #else
#ifndef OS2
# define dirent direct # define dirent direct
#endif
# define NAMLEN(dirent) (dirent)->d_namlen # define NAMLEN(dirent) (dirent)->d_namlen
# if defined(HAVE_SYS_NDIR_H) # if defined(HAVE_SYS_NDIR_H)
# include <sys/ndir.h> # include <sys/ndir.h>
@ -50,6 +52,11 @@
#include <iodef.h> #include <iodef.h>
#include <descrip.h> #include <descrip.h>
#endif #endif
#ifdef OS2
#include "my_os2dirsrch.h"
#endif
#if defined(THREAD) && defined(HAVE_READDIR_R) #if defined(THREAD) && defined(HAVE_READDIR_R)
#define READDIR(A,B,C) ((errno=readdir_r(A,B,&C)) != 0 || !C) #define READDIR(A,B,C) ((errno=readdir_r(A,B,&C)) != 0 || !C)
#else #else
@ -337,9 +344,7 @@ my_string directory_file_name (my_string dst, const char *src)
***************************************************************************** *****************************************************************************
*/ */
MY_DIR *my_dir(path, MyFlags) MY_DIR *my_dir(const char *path, myf MyFlags)
const char *path;
myf MyFlags;
{ {
struct fileinfo *fnames; struct fileinfo *fnames;
char *buffer, *obuffer, *tempptr; char *buffer, *obuffer, *tempptr;
@ -475,9 +480,7 @@ error:
** At MSDOS you always get stat of files, but time is in packed MSDOS-format ** At MSDOS you always get stat of files, but time is in packed MSDOS-format
******************************************************************************/ ******************************************************************************/
MY_DIR *my_dir(path, MyFlags) MY_DIR *my_dir(const char* path, myf MyFlags)
const char *path;
myf MyFlags;
{ {
struct fileinfo *fnames; struct fileinfo *fnames;
char *buffer, *obuffer, *tempptr; char *buffer, *obuffer, *tempptr;

View File

@ -38,12 +38,6 @@
int my_lock(File fd, int locktype, my_off_t start, my_off_t length, int my_lock(File fd, int locktype, my_off_t start, my_off_t length,
myf MyFlags) myf MyFlags)
{ {
#ifdef __EMX__
FILELOCK LockArea = {0,0}, UnlockArea = {0,0};
APIRET rc = 0;
fpos_t oldpos;
int lockflags = 0;
#endif
#ifdef HAVE_FCNTL #ifdef HAVE_FCNTL
int value; int value;
ALARM_VARIABLES; ALARM_VARIABLES;
@ -56,54 +50,12 @@ int my_lock(File fd, int locktype, my_off_t start, my_off_t length,
#else #else
if (my_disable_locking) if (my_disable_locking)
DBUG_RETURN(0); DBUG_RETURN(0);
#if defined(__EMX__)
if (locktype == F_UNLCK) { #if defined(__EMX__) || defined(OS2)
UnlockArea.lOffset = start;
if (length) if (!_lock64( fd, locktype, start, length, MyFlags))
UnlockArea.lRange = length;
else
UnlockArea.lRange = 0x7FFFFFFFL;
} else
if (locktype == F_RDLCK || locktype == F_WRLCK) {
if (locktype == F_RDLCK) lockflags |= 1;
LockArea.lOffset = start;
if (length)
LockArea.lRange = length;
else
LockArea.lRange = 0x7FFFFFFFL;
} else {
my_errno = EINVAL;
DBUG_RETURN(-1);
}
if (!LockArea.lRange && !UnlockArea.lRange)
DBUG_RETURN(0); DBUG_RETURN(0);
if (MyFlags & MY_DONT_WAIT) {
if (!(rc = DosSetFileLocks(fd,&UnlockArea,&LockArea,0,lockflags)))
DBUG_RETURN(0); /* Lock was OK */
if (rc == 175 && locktype == F_RDLCK) {
lockflags &= ~1;
rc = DosSetFileLocks(fd,&UnlockArea,&LockArea,0,lockflags);
}
if (rc == 33) { /* Lock Violation */
DBUG_PRINT("info",("Was locked, trying with timeout"));
rc = DosSetFileLocks(fd,&UnlockArea,&LockArea,MY_HOW_OFTEN_TO_ALARM * 1000,lockflags);
}
if (!rc) DBUG_RETURN(0);
if (rc == 33) errno = EAGAIN;
else {
errno = EINVAL;
printf("Error: DosSetFileLocks() == %d\n",rc);
}
} else {
while (rc = DosSetFileLocks(fd,&UnlockArea,&LockArea,
MY_HOW_OFTEN_TO_ALARM * 1000,lockflags) && (rc == 33 || rc == 175)) {
printf(".");
if (rc == 175) lockflags &= ~1;
}
if (!rc) DBUG_RETURN(0);
errno = EINVAL;
printf("Error: DosSetFileLocks() == %d\n",rc);
}
#elif defined(HAVE_LOCKING) #elif defined(HAVE_LOCKING)
/* Windows */ /* Windows */
{ {

View File

@ -33,7 +33,7 @@ gptr my_malloc(unsigned int Size, myf MyFlags)
if (!Size) if (!Size)
Size=1; /* Safety */ Size=1; /* Safety */
if ((point = malloc(Size)) == NULL) if ((point = (char*)malloc(Size)) == NULL)
{ {
my_errno=errno; my_errno=errno;
if (MyFlags & MY_FAE) if (MyFlags & MY_FAE)

View File

@ -28,8 +28,8 @@ int my_mkdir(const char *dir, int Flags, myf MyFlags)
DBUG_ENTER("my_dir"); DBUG_ENTER("my_dir");
DBUG_PRINT("enter",("dir: %s",dir)); DBUG_PRINT("enter",("dir: %s",dir));
#ifdef __WIN__ #if defined(__WIN__) || defined(OS2)
if (mkdir(dir)) if (mkdir((char*) dir))
#else #else
if (mkdir((char*) dir, Flags & my_umask_dir)) if (mkdir((char*) dir, Flags & my_umask_dir))
#endif #endif

View File

@ -20,7 +20,7 @@
#include "mysys_err.h" #include "mysys_err.h"
#include <my_dir.h> #include <my_dir.h>
#include <errno.h> #include <errno.h>
#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) #if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2)
#include <share.h> #include <share.h>
#endif #endif
@ -35,7 +35,7 @@ File my_open(const char *FileName, int Flags, myf MyFlags)
DBUG_ENTER("my_open"); DBUG_ENTER("my_open");
DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d",
FileName, Flags, MyFlags)); FileName, Flags, MyFlags));
#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) #if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2)
if (Flags & O_SHARE) if (Flags & O_SHARE)
fd = sopen((my_string) FileName, (Flags & ~O_SHARE) | O_BINARY, SH_DENYNO, fd = sopen((my_string) FileName, (Flags & ~O_SHARE) | O_BINARY, SH_DENYNO,
MY_S_IREAD | MY_S_IWRITE); MY_S_IREAD | MY_S_IWRITE);

188
mysys/my_os2cond.c Normal file
View File

@ -0,0 +1,188 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/*****************************************************************************
** The following is a simple implementation of posix conditions
*****************************************************************************/
#undef SAFE_MUTEX /* Avoid safe_mutex redefinitions */
#include "mysys_priv.h"
#if defined(THREAD) && defined(OS2)
#include <m_string.h>
//#undef getpid
#include <process.h>
#include <sys/timeb.h>
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
{
APIRET rc = 0;
HEV event;
cond->waiting=0;
/* Warp3 FP29 or Warp4 FP4 or better required */
rc = DosCreateEventSem( NULL, &cond->semaphore, 0x0800, 0);
if (rc)
return ENOMEM;
return 0;
}
int pthread_cond_destroy(pthread_cond_t *cond)
{
APIRET rc;
do {
rc = DosCloseEventSem(cond->semaphore);
if (rc == 301) DosPostEventSem(cond->semaphore);
} while (rc == 301);
if (rc)
return EINVAL;
return 0;
}
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
{
APIRET rc;
int rval;
rval = 0;
cond->waiting++;
if (mutex) pthread_mutex_unlock(mutex);
rc = DosWaitEventSem(cond->semaphore,SEM_INDEFINITE_WAIT);
if (rc != 0)
rval = EINVAL;
if (mutex) pthread_mutex_lock(mutex);
cond->waiting--;
return rval;
}
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
struct timespec *abstime)
{
struct timeb curtime;
int result;
long timeout;
APIRET rc;
int rval;
_ftime(&curtime);
timeout= ((long) (abstime->ts_sec - curtime.time)*1000L +
(long)((abstime->ts_nsec/1000) - curtime.millitm)/1000L);
if (timeout < 0) /* Some safety */
timeout = 0L;
rval = 0;
cond->waiting++;
if (mutex) pthread_mutex_unlock(mutex);
rc = DosWaitEventSem(cond->semaphore, timeout);
if (rc != 0)
rval = ETIME;
if (mutex) pthread_mutex_lock(mutex);
cond->waiting--;
return rval;
}
int pthread_cond_signal(pthread_cond_t *cond)
{
APIRET rc;
/* Bring the next thread off the condition queue: */
rc = DosPostEventSem(cond->semaphore);
return 0;
}
int pthread_cond_broadcast(pthread_cond_t *cond)
{
int i;
APIRET rc;
/*
* Enter a loop to bring all threads off the
* condition queue:
*/
i = cond->waiting;
while (i--) rc = DosPostEventSem(cond->semaphore);
return 0 ;
}
int pthread_attr_init(pthread_attr_t *connect_att)
{
connect_att->dwStackSize = 0;
connect_att->dwCreatingFlag = 0;
connect_att->priority = 0;
return 0;
}
int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack)
{
connect_att->dwStackSize=stack;
return 0;
}
int pthread_attr_setprio(pthread_attr_t *connect_att,int priority)
{
connect_att->priority=priority;
return 0;
}
int pthread_attr_destroy(pthread_attr_t *connect_att)
{
bzero((gptr) connect_att,sizeof(*connect_att));
return 0;
}
/****************************************************************************
** Fix localtime_r() to be a bit safer
****************************************************************************/
struct tm *localtime_r(const time_t *timep,struct tm *tmp)
{
if (*timep == (time_t) -1) /* This will crash win32 */
{
bzero(tmp,sizeof(*tmp));
}
else
{
struct tm *res=localtime(timep);
if (!res) /* Wrong date */
{
bzero(tmp,sizeof(*tmp)); /* Keep things safe */
return 0;
}
*tmp= *res;
}
return tmp;
}
#endif /* __WIN__ */

182
mysys/my_os2dirsrch.c Normal file
View File

@ -0,0 +1,182 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/* Win32 directory search emulation */
#if defined(OS2)
//#define _DEBUG
long _findfirst( char* path, struct _finddata_t* dos_file)
{
HDIR hdir = HDIR_CREATE;
APIRET rc;
FILEFINDBUF3 buf3;
ULONG entries = 1;
#ifdef _DEBUG
printf( "_findfirst path %s\n", path);
#endif
memset( &buf3, 0, sizeof( buf3));
rc = DosFindFirst(
path, /* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&hdir, /* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */
&buf3, /* Result buffer. */
sizeof( buf3), /* The length, in bytes, of pfindbuf. */
&entries, /* Pointer to the number of entries: */
FIL_STANDARD); /* The level of file information required. */
#ifdef _DEBUG
printf( "_findfirst rc=%d hdir=%d entries=%d->%s\n", rc, hdir, entries, buf3.achName);
#endif
if (rc /* && entries == 0 */)
return -1;
if (dos_file) {
memset( dos_file, 0, sizeof( struct _finddata_t));
strcpy( dos_file->name, buf3.achName);
dos_file->size = buf3.cbFile;
dos_file->attrib = buf3.attrFile;
}
return (ULONG) hdir;
}
long _findnext( long hdir, struct _finddata_t* dos_file)
{
APIRET rc;
FILEFINDBUF3 buf3;
ULONG entries = 1;
memset( &buf3, 0, sizeof( buf3));
rc = DosFindNext(
hdir,
&buf3, /* Result buffer. */
sizeof( buf3), /* The length, in bytes, of pfindbuf. */
&entries); /* Pointer to the number of entries: */
#ifdef _DEBUG
printf( "_findnext rc=%d hdir=%d entries=%d->%s\n", rc, hdir, entries, buf3.achName);
#endif
if (rc /* && entries == 0 */)
return -1;
if (dos_file) {
memset( dos_file, 0, sizeof( struct _finddata_t));
strcpy( dos_file->name, buf3.achName);
dos_file->size = buf3.cbFile;
dos_file->attrib = buf3.attrFile;
}
return 0;
}
void _findclose( long hdir)
{
APIRET rc;
rc = DosFindClose( hdir);
#ifdef _DEBUG
printf( "_findclose rc=%d hdir=%d\n", rc, hdir);
#endif
}
DIR* opendir( char* path)
{
DIR* dir = (DIR*) calloc( 1, sizeof( DIR));
char buffer[260];
APIRET rc;
ULONG entries = 1;
strcpy( buffer, path);
strcat( buffer, "*.*");
#ifdef _DEBUG
printf( "_findfirst path %s\n", buffer);
#endif
dir->hdir = HDIR_CREATE;
memset( &dir->buf3, 0, sizeof( dir->buf3));
rc = DosFindFirst(
buffer, /* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&dir->hdir, /* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */
&dir->buf3, /* Result buffer. */
sizeof( dir->buf3), /* The length, in bytes, of pfindbuf. */
&entries, /* Pointer to the number of entries: */
FIL_STANDARD); /* The level of file information required. */
#ifdef _DEBUG
printf( "opendir rc=%d hdir=%d entries=%d->%s\n", rc, dir->hdir, entries, dir->buf3.achName);
#endif
if (rc /* && entries == 0 */)
return NULL;
return dir;
}
struct dirent* readdir( DIR* dir)
{
APIRET rc;
//FILEFINDBUF3 buf3;
ULONG entries = 1;
if (!dir->buf3.achName[0]) // file not found on previous query
return NULL;
// copy last file name
strcpy( dir->ent.d_name, dir->buf3.achName);
// query next file
memset( &dir->buf3, 0, sizeof( dir->buf3));
rc = DosFindNext(
dir->hdir,
&dir->buf3, /* Result buffer. */
sizeof( dir->buf3), /* The length, in bytes, of pfindbuf. */
&entries); /* Pointer to the number of entries: */
#ifdef _DEBUG
printf( "_findnext rc=%d hdir=%d entries=%d->%s\n", rc, dir->hdir, entries, dir->buf3.achName);
#endif
if (rc /* && entries == 0 */)
strcpy( dir->buf3.achName, ""); // reset name for next query
return &dir->ent;
}
int closedir (DIR *dir)
{
APIRET rc;
rc = DosFindClose( dir->hdir);
#ifdef _DEBUG
printf( "_findclose rc=%d hdir=%d\n", rc, dir->hdir);
#endif
free(dir);
return 0;
}
#endif // OS2

77
mysys/my_os2dirsrch.h Normal file
View File

@ -0,0 +1,77 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/* Win32 directory search emulation */
#ifndef __MY_OS2DIRSRCH2_H__
#define __MY_OS2DIRSRCH2_H__
#ifdef __cplusplus_00
extern "C" {
#endif
struct _finddata_t
{
unsigned attrib;
//unsigned long time_create; /* -1 for FAT file systems */
//unsigned long time_access; /* -1 for FAT file systems */
//unsigned long time_write;
unsigned long size;
char name[260];
//uint16 wr_date;
//uint16 wr_time;
};
struct dirent
{
//unsigned attrib;
//unsigned long time_create; /* -1 for FAT file systems */
//unsigned long time_access; /* -1 for FAT file systems */
//unsigned long time_write;
//unsigned long size;
char d_name[260];
//uint16 wr_date;
//uint16 wr_time;
};
struct DIR
{
HDIR hdir;
FILEFINDBUF3 buf3;
struct dirent ent;
};
DIR *opendir ( char *);
struct dirent *readdir (DIR *);
int closedir (DIR *);
//#define _A_NORMAL FILE_NORMAL
//#define _A_SUBDIR FILE_DIRECTORY
//#define _A_RDONLY FILE_READONLY
//long _findfirst( char*, struct _finddata_t*);
//long _findnext( long, struct _finddata_t*);
//void _findclose( long);
#ifdef __cplusplus_00
}
#endif
#endif // __MY_OS2DIRSRCH2_H__

74
mysys/my_os2dlfcn.c Normal file
View File

@ -0,0 +1,74 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/*
* dlfcn::Unix dynamic loading for OS/2
*
* Compatibility layer for dynamic loading.
* Only minimal implementation
*
*/
#define RTLD_LAZY 0
#define RTLD_NOW 0
void* dlopen( char* path, int flag);
char* dlerror( void);
void* dlsym( void* hmod, char* fn);
void dlclose( void* hmod);
char fail[ 256];
void* dlopen( char* path, int flag)
{
APIRET rc;
HMODULE hmod;
rc = DosLoadModule( fail, sizeof( fail), path, &hmod);
if (rc)
return NULL;
return (void*) hmod;
}
char* dlerror( void)
{
return fail;
}
void* dlsym( void* hmod, char* fn)
{
APIRET rc;
PFN addr;
rc = DosQueryProcAddr( (HMODULE) hmod, 0l, fn, &addr);
if (rc)
return NULL;
return (void*) addr;
}
void dlclose( void* hmod)
{
APIRET rc;
rc = DosFreeModule( (HMODULE) hmod);
}

39
mysys/my_os2dlfcn.h0 Normal file
View File

@ -0,0 +1,39 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/*
* dlfcn::Unix dynamic loading for OS/2
*
* Compatibility layer for dynamic loading.
* Only minimal implementation
*
*/
#ifndef __DLFCN_H__
#define __DLFCN_H__
#define RTLD_LAZY 0
#define RTLD_NOW 0
void* dlopen( char* path, int flag);
char* dlerror( void);
void* dlsym( void* hmod, char* fn);
void dlclose( void* hmod);
#endif

341
mysys/my_os2file64.c Normal file
View File

@ -0,0 +1,341 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
void _OS2errno( APIRET rc);
longlong _lseek64( int fd, longlong offset, int seektype);
int _lock64( int fd, int locktype, my_off_t start,
my_off_t length, myf MyFlags);
int _sopen64( const char *name, int oflag, int shflag, int mask);
//
// this class is used to define a global c++ variable, that
// is initialized before main() gets called.
//
class File64bit
{
public:
File64bit(); /* default constructor */
} initFile64bit;
static APIRET (* APIENTRY _DosOpenL)(PCSZ pszFileName,
PHFILE phf,
PULONG pulAction,
LONGLONG cbFile,
ULONG ulAttribute,
ULONG fsOpenFlags,
ULONG fsOpenMode,
PEAOP2 peaop2);
static APIRET (* APIENTRY _DosSetFilePtrL)(HFILE hFile,
LONGLONG ib,
ULONG method,
PLONGLONG ibActual);
static APIRET (* APIENTRY _DosSetFileLocksL)(HFILE hFile,
PFILELOCKL pflUnlock,
PFILELOCKL pflLock,
ULONG timeout,
ULONG flags);
#define EIO EINVAL
#define ESPIPE EBADSEEK
static unsigned char const errno_tab[] =
{
0 , EINVAL, ENOENT, ENOENT, EMFILE, /* 0..4 */
EACCES, EBADF, EIO, ENOMEM, EIO, /* 5..9 */
EINVAL, ENOEXEC,EINVAL, EINVAL, EINVAL, /* 10..14 */
ENOENT, EBUSY, EXDEV, ENOENT, EROFS, /* 15..19 */
EIO, EIO, EIO, EIO, EIO, /* 20..24 */
EIO, EIO, EIO, ENOSPC, EIO, /* 25..29 */
EIO, EIO, EACCES, EACCES, EIO, /* 30..34 */
EIO, EIO, EIO, EIO, ENOSPC, /* 35..39 */
EIO, EIO, EIO, EIO, EIO, /* 40..44 */
EIO, EIO, EIO, EIO, EIO, /* 45..49 */
EIO, EIO, EIO, EIO, EBUSY, /* 50..54 */
EIO, EIO, EIO, EIO, EIO, /* 55..59 */
EIO, ENOSPC, ENOSPC, EIO, EIO, /* 60..64 */
EACCES, EIO, EIO, EIO, EIO, /* 65..69 */
EIO, EIO, EIO, EROFS, EIO, /* 70..74 */
EIO, EIO, EIO, EIO, EIO, /* 75..79 */
EEXIST, EIO, ENOENT, EIO, EIO, /* 80..84 */
EIO, EIO, EINVAL, EIO, EAGAIN, /* 85..89 */
EIO, EIO, EIO, EIO, EIO, /* 90..94 */
EINTR, EIO, EIO, EIO, EACCES, /* 95..99 */
ENOMEM, EINVAL, EINVAL, ENOMEM, EINVAL, /* 100..104 */
EINVAL, ENOMEM, EIO, EACCES, EPIPE, /* 105..109 */
ENOENT, E2BIG, ENOSPC, ENOMEM, EBADF, /* 110..114 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 115..119 */
EINVAL, EINVAL, EINVAL, ENOENT, EINVAL, /* 120..124 */
ENOENT, ENOENT, ENOENT, ECHILD, ECHILD, /* 125..129 */
EACCES, EINVAL, ESPIPE, EINVAL, EINVAL, /* 130..134 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 135..139 */
EINVAL, EINVAL, EBUSY, EINVAL, EINVAL, /* 140..144 */
EINVAL, EINVAL, EINVAL, EBUSY, EINVAL, /* 145..149 */
EINVAL, EINVAL, ENOMEM, EINVAL, EINVAL, /* 150..154 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 155..159 */
EINVAL, EINVAL, EINVAL, EINVAL, EAGAIN, /* 160..164 */
EINVAL, EINVAL, EACCES, EINVAL, EINVAL, /* 165..169 */
EBUSY, EINVAL, EINVAL, EINVAL, EINVAL, /* 170..174 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 175..179 */
EINVAL, EINVAL, EINVAL, EINVAL, ECHILD, /* 180..184 */
EINVAL, EINVAL, ENOENT, EINVAL, EINVAL, /* 185..189 */
ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC, /* 190..194 */
ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC, /* 195..199 */
ENOEXEC,ENOEXEC,ENOEXEC,ENOENT, EINVAL, /* 200..204 */
EINVAL, ENAMETOOLONG, EINVAL, EINVAL, EINVAL, /* 205..209 */
EINVAL, EINVAL, EACCES, ENOEXEC,ENOEXEC, /* 210..214 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 215..219 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 220..224 */
EINVAL, EINVAL, EINVAL, ECHILD, EINVAL, /* 225..229 */
EINVAL, EBUSY, EAGAIN, ENOTCONN, EINVAL, /* 230..234 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 235..239 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 240..244 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 245..249 */
EACCES, EACCES, EINVAL, ENOENT, EINVAL, /* 250..254 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 255..259 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 260..264 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 265..269 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 270..274 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 275..279 */
EINVAL, EINVAL, EINVAL, EINVAL, EEXIST, /* 280..284 */
EEXIST, EINVAL, EINVAL, EINVAL, EINVAL, /* 285..289 */
ENOMEM, EMFILE, EINVAL, EINVAL, EINVAL, /* 290..294 */
EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 295..299 */
EINVAL, EBUSY, EINVAL, ESRCH, EINVAL, /* 300..304 */
ESRCH, EINVAL, EINVAL, EINVAL, ESRCH, /* 305..309 */
EINVAL, ENOMEM, EINVAL, EINVAL, EINVAL, /* 310..314 */
EINVAL, E2BIG, ENOENT, EIO, EIO, /* 315..319 */
EINVAL, EINVAL, EINVAL, EINVAL, EAGAIN, /* 320..324 */
EINVAL, EINVAL, EINVAL, EIO, ENOENT, /* 325..329 */
EACCES, EACCES, EACCES, ENOENT, ENOMEM /* 330..334 */
};
/*
* Initialize 64bit file access: dynamic load of WSeB API
*/
File64bit :: File64bit()
{
HMODULE hDoscalls;
if (DosQueryModuleHandle("DOSCALLS", &hDoscalls) != NO_ERROR)
return;
if (DosQueryProcAddr(hDoscalls, 981, NULL, (PFN *)&_DosOpenL) != NO_ERROR)
return;
if (DosQueryProcAddr(hDoscalls, 988, NULL, (PFN *)&_DosSetFilePtrL) != NO_ERROR) {
_DosOpenL = NULL;
return;
}
if (DosQueryProcAddr(hDoscalls, 986, NULL, (PFN *)&_DosSetFileLocksL) != NO_ERROR) {
_DosOpenL = NULL;
_DosSetFilePtrL = NULL;
return;
}
// notify success
#ifdef MYSQL_SERVER
printf( "WSeB 64bit file API loaded.\n");
#endif
}
void _OS2errno( APIRET rc)
{
if (rc >= sizeof (errno_tab))
errno = EINVAL;
else
errno = errno_tab[rc];
}
longlong _lseek64( int fd, longlong offset, int seektype)
{
APIRET rc;
longlong actual;
if (_DosSetFilePtrL)
rc = _DosSetFilePtrL( fd, offset, seektype, &actual);
else {
ULONG ulActual;
rc = DosSetFilePtr( fd, (long) offset, seektype, &ulActual);
actual = ulActual;
}
if (!rc)
return( actual);/* NO_ERROR */
// set errno
_OS2errno( rc);
// seek failed
return(-1);
}
inline _SetFileLocksL(HFILE hFile,
PFILELOCKL pflUnlock,
PFILELOCKL pflLock,
ULONG timeout,
ULONG flags)
{
if (_DosSetFileLocksL)
return _DosSetFileLocksL( hFile, pflUnlock, pflLock, timeout, flags);
FILELOCK flUnlock = { pflUnlock->lOffset, pflUnlock->lRange };
FILELOCK flLock = { pflLock->lOffset, pflLock->lRange };
return DosSetFileLocks( hFile, &flUnlock, &flLock, timeout, flags);
}
int _lock64( int fd, int locktype, my_off_t start,
my_off_t length, myf MyFlags)
{
FILELOCKL LockArea = {0,0}, UnlockArea = {0,0};
ULONG readonly = 0;
APIRET rc = -1;
switch( locktype) {
case F_UNLCK:
UnlockArea.lOffset = start;
UnlockArea.lRange = length ? length : LONGLONG_MAX;
break;
case F_RDLCK:
case F_WRLCK:
LockArea.lOffset = start;
LockArea.lRange = length ? length : LONGLONG_MAX;
readonly = (locktype == F_RDLCK ? 1 : 0);
break;
default:
errno = EINVAL;
rc = -1;
break;
}
if (MyFlags & MY_DONT_WAIT) {
rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly);
//printf( "fd %d, locktype %d, rc %d (dont_wait)\n", fd, locktype, rc);
if (rc == 33) { /* Lock Violation */
DBUG_PRINT("info",("Was locked, trying with timeout"));
rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 1 * 1000, readonly);
//printf( "fd %d, locktype %d, rc %d (dont_wait with timeout)\n", fd, locktype, rc);
}
} else {
while( rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly) && (rc == 33)) {
printf(".");
DosSleep(1 * 1000);
}
//printf( "fd %d, locktype %d, rc %d (wait2)\n", fd, locktype, rc);
}
if (!rc)
return( 0);/* NO_ERROR */
// set errno
_OS2errno( rc);
// lock failed
return(-1);
}
int _sopen64( const char *name, int oflag, int shflag, int mask)
{
int fail_errno;
APIRET rc = 0;
HFILE hf = 0;
ULONG ulAction = 0;
LONGLONG cbFile = 0;
ULONG ulAttribute = FILE_NORMAL;
ULONG fsOpenFlags = 0;
ULONG fsOpenMode = 0;
/* Extract the access mode and sharing mode bits. */
fsOpenMode = (shflag & 0xFF) | (oflag & 0x03);
/* Translate ERROR_OPEN_FAILED to ENOENT unless O_EXCL is set (see
below). */
fail_errno = ENOENT;
/* Compute `open_flag' depending on `flags'. Note that _SO_CREAT is
set for O_CREAT. */
if (oflag & O_CREAT)
{
if (oflag & O_EXCL)
{
fsOpenFlags = OPEN_ACTION_FAIL_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW;
fail_errno = EEXIST;
}
else if (oflag & O_TRUNC)
fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW;
else
fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW;
if (mask & S_IWRITE)
ulAttribute = FILE_NORMAL;
else
ulAttribute = FILE_READONLY;
}
else if (oflag & O_TRUNC)
fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW;
else
fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW;
/* Try to open the file and handle errors. */
if (_DosOpenL)
rc = _DosOpenL( name, &hf, &ulAction, cbFile,
ulAttribute, fsOpenFlags, fsOpenMode, NULL);
else
rc = DosOpen( name, &hf, &ulAction, (LONG) cbFile,
ulAttribute, fsOpenFlags, fsOpenMode, NULL);
if (rc == ERROR_OPEN_FAILED)
{
errno = fail_errno;
return -1;
}
if (rc != 0)
{
// set errno
_OS2errno( rc);
return -1;
}
if (oflag & O_APPEND)
_lseek64( hf, 0L, SEEK_END);
return hf;
}
inline int open( const char *name, int oflag)
{
return _sopen64( name, oflag, OPEN_SHARE_DENYNONE, S_IREAD | S_IWRITE);
}
inline int open( const char *name, int oflag, int mask)
{
return _sopen64( name, oflag, OPEN_SHARE_DENYNONE, mask);
}
inline int sopen( const char *name, int oflag, int shflag, int mask)
{
return _sopen64( name, oflag, shflag, mask);
}

98
mysys/my_os2mutex.c Normal file
View File

@ -0,0 +1,98 @@
/*
* Copyright (c) 1995 John Birrell <jb@cimlogic.com.au>.
* All rights reserved.
*
* Modified and extended by Antony T Curtis <antony.curtis@olcs.net>
* for use with OS/2.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by John Birrell.
* 4. Neither the name of the author nor the names of any co-contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#include <stdlib.h>
#include <errno.h>
#ifdef _THREAD_SAFE
//#include <pthread.h>
//#include "pthread_private.h"
int
pthread_mutex_init(pthread_mutex_t * mutex,
const pthread_mutexattr_t * mutex_attr)
{
APIRET rc = 0;
rc = DosCreateMutexSem(NULL,mutex,0,0);
/* Return the completion status: */
return (0);
}
int
pthread_mutex_destroy(pthread_mutex_t * mutex)
{
APIRET rc = 0;
do {
rc = DosCloseMutexSem(*mutex);
if (rc == 301) DosReleaseMutexSem(*mutex);
} while (rc == 301);
*mutex = 0;
/* Return the completion status: */
return (0);
}
int
pthread_mutex_lock(pthread_mutex_t * mutex)
{
int ret = 0;
int status = 0;
APIRET rc = 0;
rc = DosRequestMutexSem(*mutex,SEM_INDEFINITE_WAIT);
if (rc)
return(EINVAL);
/* Return the completion status: */
return (0);
}
int
pthread_mutex_unlock(pthread_mutex_t * mutex)
{
int ret = 0;
APIRET rc = 0;
int status;
rc = DosReleaseMutexSem(*mutex);
/* Return the completion status: */
return (0);
}
#endif

126
mysys/my_os2thread.c Normal file
View File

@ -0,0 +1,126 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/*****************************************************************************
** Simulation of posix threads calls for OS/2
*****************************************************************************/
#include "mysys_priv.h"
#if defined(THREAD) && defined(OS2)
#include <m_string.h>
#include <process.h>
static pthread_mutex_t THR_LOCK_thread;
struct pthread_map
{
HANDLE pthreadself;
pthread_handler func;
void * param;
};
void win_pthread_init(void)
{
pthread_mutex_init(&THR_LOCK_thread,NULL);
}
/*
** We have tried to use '_beginthreadex' instead of '_beginthread' here
** but in this case the program leaks about 512 characters for each
** created thread !
** As we want to save the created thread handler for other threads to
** use and to be returned by pthread_self() (instead of the Win32 pseudo
** handler), we have to go trough pthread_start() to catch the returned handler
** in the new thread.
*/
static pthread_handler_decl(pthread_start,param)
{
pthread_handler func=((struct pthread_map *) param)->func;
void *func_param=((struct pthread_map *) param)->param;
my_thread_init(); /* Will always succeed in windows */
pthread_mutex_lock(&THR_LOCK_thread); /* Wait for beginthread to return */
win_pthread_self=((struct pthread_map *) param)->pthreadself;
pthread_mutex_unlock(&THR_LOCK_thread);
free((char*) param); /* Free param from create */
pthread_exit((void*) (*func)(func_param));
return 0; /* Safety */
}
int pthread_create(pthread_t *thread_id, pthread_attr_t *attr,
pthread_handler func, void *param)
{
HANDLE hThread;
struct pthread_map *map;
DBUG_ENTER("pthread_create");
if (!(map=(struct pthread_map *)malloc(sizeof(*map))))
DBUG_RETURN(-1);
map->func=func;
map->param=param;
pthread_mutex_lock(&THR_LOCK_thread);
#ifdef __BORLANDC__
hThread=(HANDLE)_beginthread((void(_USERENTRY *)(void *)) pthread_start,
attr->dwStackSize ? attr->dwStackSize :
65535, (void*) map);
#elif defined( OS2)
hThread=(HANDLE)_beginthread((void( _Optlink *)(void *)) pthread_start, NULL,
attr->dwStackSize ? attr->dwStackSize :
65535, (void*) map);
#else
hThread=(HANDLE)_beginthread((void( __cdecl *)(void *)) pthread_start,
attr->dwStackSize ? attr->dwStackSize :
65535, (void*) map);
#endif
DBUG_PRINT("info", ("hThread=%lu",(long) hThread));
*thread_id=map->pthreadself=hThread;
pthread_mutex_unlock(&THR_LOCK_thread);
if (hThread == (HANDLE) -1)
{
int error=errno;
DBUG_PRINT("error",
("Can't create thread to handle request (error %d)",error));
DBUG_RETURN(error ? error : -1);
}
#ifdef OS2
my_pthread_setprio(hThread, attr->priority);
#else
VOID(SetThreadPriority(hThread, attr->priority)) ;
#endif
DBUG_RETURN(0);
}
void pthread_exit(void *a)
{
_endthread();
}
/* This is neaded to get the macro pthread_setspecific to work */
int win_pthread_setspecific(void *a,void *b,uint length)
{
memcpy(a,b,length);
return 0;
}
#endif

144
mysys/my_os2tls.c Normal file
View File

@ -0,0 +1,144 @@
/* Copyright (C) Yuri Dario & 2000 MySQL AB
All the above parties has a full, independent copyright to
the following code, including the right to use the code in
any manner without any demands from the other parties.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
DWORD TlsAlloc( void);
BOOL TlsFree( DWORD);
PVOID TlsGetValue( DWORD);
BOOL TlsSetValue( DWORD, PVOID);
#define TLS_MINIMUM_AVAILABLE 64
PULONG tls_storage; /* TLS local storage */
DWORD tls_bits[2]; /* TLS in-use bits */
pthread_mutex_t tls_mutex; /* TLS mutex for in-use bits */
DWORD TlsAlloc( void)
{
DWORD index = -1;
DWORD mask, tibidx;
int i;
if (tls_storage == NULL) {
APIRET rc;
// allocate memory for TLS storage
rc = DosAllocThreadLocalMemory( 1, &tls_storage);
if (rc) {
fprintf( stderr, "DosAllocThreadLocalMemory error: return code = %u\n", rc);
}
// create a mutex
if (pthread_mutex_init( &tls_mutex, NULL))
fprintf( stderr, "Failed to init TLS mutex\n");
}
pthread_mutex_lock( &tls_mutex);
tibidx = 0;
if (tls_bits[0] == 0xFFFFFFFF) {
if (tls_bits[1] == 0xFFFFFFFF) {
fprintf( stderr, "tid#%d, no more TLS bits available\n", _threadid);
pthread_mutex_unlock( &tls_mutex);
return -1;
}
tibidx = 1;
}
for( i=0; i<32; i++) {
mask = (1 << i);
if ((tls_bits[ tibidx] & mask) == 0) {
tls_bits[ tibidx] |= mask;
index = (tibidx*32) + i;
break;
}
}
tls_storage[index] = 0;
pthread_mutex_unlock( &tls_mutex);
//fprintf( stderr, "tid#%d, TlsAlloc index %d\n", _threadid, index);
return index;
}
BOOL TlsFree( DWORD index)
{
int tlsidx;
DWORD mask;
if (index >= TLS_MINIMUM_AVAILABLE)
return NULL;
pthread_mutex_lock( &tls_mutex);
tlsidx = 0;
if (index > 32) {
tlsidx++;
}
mask = (1 << index);
if (tls_bits[ tlsidx] & mask) {
tls_bits[tlsidx] &= ~mask;
tls_storage[index] = 0;
pthread_mutex_unlock( &tls_mutex);
return TRUE;
}
pthread_mutex_unlock( &tls_mutex);
return FALSE;
}
PVOID TlsGetValue( DWORD index)
{
if (index >= TLS_MINIMUM_AVAILABLE)
return NULL;
// verify if memory has been allocated for this thread
if (*tls_storage == NULL) {
// allocate memory for indexes
*tls_storage = (ULONG)calloc( TLS_MINIMUM_AVAILABLE, sizeof(int));
//fprintf( stderr, "tid#%d, tls_storage %x\n", _threadid, *tls_storage);
}
ULONG* tls_array = (ULONG*) *tls_storage;
return (PVOID) tls_array[ index];
}
BOOL TlsSetValue( DWORD index, PVOID val)
{
// verify if memory has been allocated for this thread
if (*tls_storage == NULL) {
// allocate memory for indexes
*tls_storage = (ULONG)calloc( TLS_MINIMUM_AVAILABLE, sizeof(int));
//fprintf( stderr, "tid#%d, tls_storage %x\n", _threadid, *tls_storage);
}
if (index >= TLS_MINIMUM_AVAILABLE)
return FALSE;
ULONG* tls_array = (ULONG*) *tls_storage;
//fprintf( stderr, "tid#%d, TlsSetValue array %08x index %d -> %08x (old)\n", _threadid, tls_array, index, tls_array[ index]);
tls_array[ index] = (ULONG) val;
//fprintf( stderr, "tid#%d, TlsSetValue array %08x index %d -> %08x\n", _threadid, tls_array, index, val);
return TRUE;
}

View File

@ -145,7 +145,7 @@ struct tm *localtime_r(const time_t *clock, struct tm *res)
** Author: Gary Wisniewski <garyw@spidereye.com.au>, much modified by Monty ** Author: Gary Wisniewski <garyw@spidereye.com.au>, much modified by Monty
****************************************************************************/ ****************************************************************************/
#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(sigwait) && !defined(__WIN__) && !defined(HAVE_rts_threads) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) #if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(sigwait) && !defined(__WIN__) && !defined(HAVE_rts_threads) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(OS2)
#if !defined(DONT_USE_SIGSUSPEND) #if !defined(DONT_USE_SIGSUSPEND)

View File

@ -49,7 +49,7 @@ gptr my_realloc(gptr oldpoint, uint Size, myf MyFlags)
free(oldpoint); free(oldpoint);
} }
#else #else
if ((point = realloc(oldpoint,Size)) == NULL) if ((point = (char*)realloc(oldpoint,Size)) == NULL)
{ {
if (MyFlags & MY_FREE_ON_ERROR) if (MyFlags & MY_FREE_ON_ERROR)
my_free(oldpoint,MyFLAGS); my_free(oldpoint,MyFLAGS);

View File

@ -91,7 +91,7 @@ int my_copystat(const char *from, const char *to, int MyFlags)
return 1; return 1;
VOID(chmod(to, statbuf.st_mode & 07777)); /* Copy modes */ VOID(chmod(to, statbuf.st_mode & 07777)); /* Copy modes */
#if !defined(MSDOS) && !defined(__WIN__) && !defined(__EMX__) #if !defined(MSDOS) && !defined(__WIN__) && !defined(__EMX__) && !defined(OS2)
if (statbuf.st_nlink > 1 && MyFlags & MY_LINK_WARNING) if (statbuf.st_nlink > 1 && MyFlags & MY_LINK_WARNING)
{ {
if (MyFlags & MY_LINK_WARNING) if (MyFlags & MY_LINK_WARNING)

View File

@ -20,7 +20,7 @@
a shared library a shared library
*/ */
#ifndef stdin #if !defined(stdin) || defined(OS2)
#include "mysys_priv.h" #include "mysys_priv.h"
#include "my_static.h" #include "my_static.h"
#include "my_alarm.h" #include "my_alarm.h"

View File

@ -26,7 +26,7 @@
#endif #endif
#ifdef HAVE_TEMPNAM #ifdef HAVE_TEMPNAM
#ifndef MSDOS #if !defined( MSDOS) && !defined(OS2)
extern char **environ; extern char **environ;
#endif #endif
#endif #endif
@ -91,14 +91,23 @@ my_string my_tempnam(const char *dir, const char *pfx,
temp[1]= 0; temp[1]= 0;
dir=temp; dir=temp;
} }
old_env=environ; #ifdef OS2
// changing environ variable doesn't work with VACPP
char buffer[256];
sprintf( buffer, "TMP=%s", dir);
putenv( buffer);
#else
old_env=(char**)environ;
if (dir) if (dir)
{ /* Don't use TMPDIR if dir is given */ { /* Don't use TMPDIR if dir is given */
environ=temp_env; environ=(const char**)temp_env;
temp_env[0]=0; temp_env[0]=0;
} }
#endif
res=tempnam((char*) dir,(my_string) pfx); /* Use stand. dir with prefix */ res=tempnam((char*) dir,(my_string) pfx); /* Use stand. dir with prefix */
environ=old_env; #ifndef OS2
environ=(const char**)old_env;
#endif
if (!res) if (!res)
DBUG_PRINT("error",("Got error: %d from tempnam",errno)); DBUG_PRINT("error",("Got error: %d from tempnam",errno));
return res; return res;

View File

@ -72,7 +72,7 @@ my_bool my_thread_global_init(void)
pthread_mutex_init(&THR_LOCK_heap,MY_MUTEX_INIT_FAST); pthread_mutex_init(&THR_LOCK_heap,MY_MUTEX_INIT_FAST);
pthread_mutex_init(&THR_LOCK_net,MY_MUTEX_INIT_FAST); pthread_mutex_init(&THR_LOCK_net,MY_MUTEX_INIT_FAST);
pthread_mutex_init(&THR_LOCK_charset,MY_MUTEX_INIT_FAST); pthread_mutex_init(&THR_LOCK_charset,MY_MUTEX_INIT_FAST);
#ifdef __WIN__ #if defined( __WIN__) || defined(OS2)
win_pthread_init(); win_pthread_init();
#endif #endif
#ifndef HAVE_LOCALTIME_R #ifndef HAVE_LOCALTIME_R
@ -160,11 +160,11 @@ void my_thread_end(void)
pthread_cond_destroy(&tmp->suspend); pthread_cond_destroy(&tmp->suspend);
#endif #endif
pthread_mutex_destroy(&tmp->mutex); pthread_mutex_destroy(&tmp->mutex);
#if !defined(__WIN__) || defined(USE_TLS) #if (!defined(__WIN__) && !defined(OS2)) || defined(USE_TLS)
free(tmp); free(tmp);
#endif #endif
} }
#if !defined(__WIN__) || defined(USE_TLS) #if (!defined(__WIN__) && !defined(OS2)) || defined(USE_TLS)
pthread_setspecific(THR_KEY_mysys,0); pthread_setspecific(THR_KEY_mysys,0);
#endif #endif
} }

View File

@ -19,6 +19,46 @@
#include "mysys_err.h" #include "mysys_err.h"
#include <errno.h> #include <errno.h>
#ifdef OS2
int _write64( int fd, const void *buffer, unsigned int count)
{
APIRET rc;
ULONG actual;
rc = DosWrite( fd, (PVOID) buffer, count, &actual);
switch (rc) {
case 0: /* NO_ERROR */
errno = 0;
return( actual);
break;
case ERROR_INVALID_FUNCTION:
errno = EPERM;
break;
case ERROR_ACCESS_DENIED:
errno = EACCESS;
break;
case ERROR_INVALID_HANDLE:
errno = EBADF;
break;
case ERROR_DISK_FULL:
errno = ENOSPC;
break;
default:
errno = EINVAL;
break;
}
// write failed
return(-1);
}
// redirect call
#define write _write64
#endif // OS2
/* Write a chunk of bytes to a file */ /* Write a chunk of bytes to a file */
uint my_write(int Filedes, const byte *Buffer, uint Count, myf MyFlags) uint my_write(int Filedes, const byte *Buffer, uint Count, myf MyFlags)

View File

@ -22,7 +22,7 @@
#include <stdio.h> #include <stdio.h>
extern void _print_csinfo(); extern void _print_csinfo(CHARSET_INFO *cs);
int main(int argc, char **argv) { int main(int argc, char **argv) {
const char *the_set = MYSQL_CHARSET; const char *the_set = MYSQL_CHARSET;

View File

@ -37,7 +37,7 @@
static my_bool alarm_aborted=1; static my_bool alarm_aborted=1;
my_bool thr_alarm_inited=0; my_bool thr_alarm_inited=0;
#if !defined(__WIN__) && !defined(__EMX__) #if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2)
static pthread_mutex_t LOCK_alarm; static pthread_mutex_t LOCK_alarm;
static sigset_t full_signal_set; static sigset_t full_signal_set;
@ -460,7 +460,7 @@ static void *alarm_handler(void *arg __attribute__((unused)))
** thr_alarm for OS/2 ** thr_alarm for OS/2
*****************************************************************************/ *****************************************************************************/
#elif defined(__EMX__) #elif defined(__EMX__) || defined(OS2)
#define INCL_BASE #define INCL_BASE
#define INCL_NOPMAPI #define INCL_NOPMAPI
@ -775,8 +775,10 @@ static sig_handler print_signal_warning(int sig)
#ifdef DONT_REMEMBER_SIGNAL #ifdef DONT_REMEMBER_SIGNAL
sigset(sig,print_signal_warning); /* int. thread system calls */ sigset(sig,print_signal_warning); /* int. thread system calls */
#endif #endif
#ifndef OS2
if (sig == SIGALRM) if (sig == SIGALRM)
alarm(2); /* reschedule alarm */ alarm(2); /* reschedule alarm */
#endif
} }
#endif /* USE_ONE_SIGNAL_HAND */ #endif /* USE_ONE_SIGNAL_HAND */
@ -793,6 +795,7 @@ static void *signal_hand(void *arg __attribute__((unused)))
VOID(pthread_cond_signal(&COND_thread_count)); /* Tell main we are ready */ VOID(pthread_cond_signal(&COND_thread_count)); /* Tell main we are ready */
pthread_mutex_unlock(&LOCK_thread_count); pthread_mutex_unlock(&LOCK_thread_count);
#ifndef OS2
sigemptyset(&set); /* Catch all signals */ sigemptyset(&set); /* Catch all signals */
sigaddset(&set,SIGINT); sigaddset(&set,SIGINT);
sigaddset(&set,SIGQUIT); sigaddset(&set,SIGQUIT);
@ -809,6 +812,7 @@ static void *signal_hand(void *arg __attribute__((unused)))
#else #else
puts("Starting signal handling thread"); puts("Starting signal handling thread");
#endif #endif
#endif /* OS2 */
printf("server alarm: %d thread alarm: %d\n", printf("server alarm: %d thread alarm: %d\n",
THR_SERVER_ALARM,THR_CLIENT_ALARM); THR_SERVER_ALARM,THR_CLIENT_ALARM);
DBUG_PRINT("info",("Starting signal and alarm handling thread")); DBUG_PRINT("info",("Starting signal and alarm handling thread"));
@ -831,7 +835,9 @@ static void *signal_hand(void *arg __attribute__((unused)))
case SIGINT: case SIGINT:
case SIGQUIT: case SIGQUIT:
case SIGTERM: case SIGTERM:
#ifndef OS2
case SIGHUP: case SIGHUP:
#endif
printf("Aborting nicely\n"); printf("Aborting nicely\n");
end_thr_alarm(); end_thr_alarm();
break; break;
@ -841,11 +847,13 @@ static void *signal_hand(void *arg __attribute__((unused)))
exit(1); exit(1);
return 0; /* Keep some compilers happy */ return 0; /* Keep some compilers happy */
#endif #endif
#ifndef OS2
#ifdef USE_ONE_SIGNAL_HAND #ifdef USE_ONE_SIGNAL_HAND
case THR_SERVER_ALARM: case THR_SERVER_ALARM:
process_alarm(sig); process_alarm(sig);
break; break;
#endif #endif
#endif /* OS2 */
} }
} }
} }
@ -866,6 +874,7 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
pthread_cond_init(&COND_thread_count,NULL); pthread_cond_init(&COND_thread_count,NULL);
/* Start a alarm handling thread */ /* Start a alarm handling thread */
#ifndef OS2
sigemptyset(&set); sigemptyset(&set);
sigaddset(&set,SIGINT); sigaddset(&set,SIGINT);
sigaddset(&set,SIGQUIT); sigaddset(&set,SIGQUIT);
@ -883,6 +892,7 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
sigaddset(&set,THR_CLIENT_ALARM); sigaddset(&set,THR_CLIENT_ALARM);
VOID(pthread_sigmask(SIG_UNBLOCK, &set, (sigset_t*) 0)); VOID(pthread_sigmask(SIG_UNBLOCK, &set, (sigset_t*) 0));
#endif #endif
#endif /* OS2 */
pthread_attr_init(&thr_attr); pthread_attr_init(&thr_attr);
pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS); pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS);

View File

@ -133,7 +133,7 @@ static void delete_tree_element(TREE *tree, TREE_ELEMENT *element)
if (tree->free) if (tree->free)
(*tree->free)(ELEMENT_KEY(tree,element)); (*tree->free)(ELEMENT_KEY(tree,element));
if (tree->with_delete) if (tree->with_delete)
my_free((void*) element,MYF(0)); my_free((char*) element,MYF(0));
} }
} }

23
os2/ChangeLog.os2 Normal file
View File

@ -0,0 +1,23 @@
2001/06/12
- fixed support for > 2GB file size, needs also DosOpenL
- mixed 64bit/32bit file size support, dinamic loading of
64bit API.
2001/06/03
- added support for > 2GB file size
2001/06/02
- fixed file locking code
2001/05/29
- 3.23.38 build
2001/05/20
- rint fix
- isam O_RDONLY table handled fix
2001/05/19
- new TLS code, fixed parser crashes and many other problems.
- fixed pthread_cond_timedwait, now handle manager expires

13
os2/MySQL-All.icc Normal file
View File

@ -0,0 +1,13 @@
// create directories
for dir in "..\\bin", "..\\lib", "..\\obj", "..\\obj\\zlib", "..\\obj\\readline" {
run "if not exist "dir" mkdir "dir
}
// build sequence
run "vacbld MySQL-Lib.icc -showprogress=10 -showwarning"
run "vacbld MySQL-Client.icc -showprogress=10 -showwarning"
run "vacbld MySQL-Sql.icc -showprogress=10 -showwarning"
// need only for utilities and test applications
run "vacbld MySQL-Util.icc -showprogress=10 -showwarning"

87
os2/MySQL-Client.icc Normal file
View File

@ -0,0 +1,87 @@
// disable code inlining when building static libs
InlineCode = "no"
// include common options
include "MySQL-Opt.icc"
include "MySQL-Source.icc"
option ProjectOptions = MySQLOptions
//, link(defaultlibsname, "readline.lib")
{
option file(genobject, "..\\OBJ\\ZLIB\\")
{
target "..\\bin\\mysql.dll"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch
}
// target source files
source zlib
if debug_build {
source type('cpp') dbug
}
source type('cpp') my_sys
source type('cpp') my_sys_cli
source type('cpp') strings
source type('cpp') mysqlclientlib
}
}
option file(genobject, "..\\OBJ\\READLINE\\")
{
target "..\\bin\\mysql.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
//source readline
source type('cpp') "..\\client\\mysql.cc"
}
}
target "..\\bin\\mysqladmin.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
source type('cpp') "..\\client\\mysqladmin.c"
}
target "..\\bin\\mysqldump.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch
}
// target source files
source type('cpp') "..\\client\\mysqldump.c"
}
target "..\\bin\\mysqlshow.exe"
{
// target source files
source type('cpp') "..\\client\\mysqlshow.c"
}
target "..\\bin\\mysqlimport.exe"
{
// target source files
source type('cpp') "..\\client\\mysqlimport.c"
}
target "..\\bin\\mysqltest.exe"
{
source type('cpp') "..\\client\\mysqltest.c"
}
}

2335
os2/MySQL-Client.irs Normal file

File diff suppressed because it is too large Load Diff

72
os2/MySQL-Lib.icc Normal file
View File

@ -0,0 +1,72 @@
// disable code inlining when building static libs
InlineCode = "no"
// include common options
include "MySQL-Opt.icc"
include "MySQL-Source.icc"
option ProjectOptions = MySQLOptions
{
option file(genobject, "..\\OBJ\\ZLIB\\")
{
target "..\\lib\\common.lib"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
source zlib
if debug_build {
source type('cpp') dbug
}
source type('cpp') heap
//source type('cpp') merge
source type('cpp') my_sys
source type('cpp') my_sys_cli
source type('cpp') my_sys_sql
source type('cpp') strings
}
}
/*
option file(genobject, "..\\OBJ\\READLINE\\")
{
target "..\\lib\\readline.lib"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
source readline
}
}
*/
target "..\\lib\\myisam.lib"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
source type('cpp') myisam
}
target "..\\lib\\isam.lib"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
source type('cpp') isam
}
}

53
os2/MySQL-Opt.icc Normal file
View File

@ -0,0 +1,53 @@
// set to 1 to enable debug code
debug_build = 0
// common options
option BaseOptions = link(defaultlibsname, "tcpip32.lib")
,link(libsearchpath, "..\\lib\\")
,link(libsearchpath, "..\\bin\\")
,link(pmtype, vio)
,link(linkwithmultithreadlib, "yes")
,link(linkwithsharedlib, "no")
,gen(initauto, "yes")
,define("__MT__", )
,define("HAVE_BSD_SIGNALS", )
,define("INCL_DOS", )
,define("INCL_DOSERRORS", )
,define("INCL_LONGLONG", )
,define("OS2", )
,define("USE_TLS", )
,lang(signedchars, yes)
,incl(searchpath, "..")
,incl(searchpath, "..\\include")
,incl(searchpath, "..\\my_sys")
,incl(searchpath, "..\\regex")
,incl(searchpath, "..\\sql")
,incl(searchpath, "\\rd\\mysql\\zlib-1.1.3")
,incl(searchpath, "\\rd\\mysql\\ufc")
,incl(searchpath, "..\\os2")
option ReleaseOptions = link(debug, "no")
, define("DBUG_OFF", )
, gen(arch, "pentium")
, opt(tune, "pentium2")
, opt(level, "0")
, opt(stackchaining, no)
, opt(size, yes)
, opt(autoinline, InlineCode)
, opt(inline, InlineCode)
, opt(schedule, no)
option DebugOptions = link(debug, "yes")
, gen(debug, "yes")
, define("DBUG_ON", )
if debug_build {
option MySQLOptions = BaseOptions, DebugOptions
} else {
option MySQLOptions = BaseOptions, ReleaseOptions
}

27
os2/MySQL-ReadLine.icc Normal file
View File

@ -0,0 +1,27 @@
// disable code inlining when building static libs
InlineCode = "no"
// include common options
include "MySQL-Opt.icc"
include "MySQL-Source.icc"
option ProjectOptions = MySQLOptions
{
option file(genobject, "..\\OBJ\\READLINE\\")
{
target "..\\lib\\readline.lib"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
source readline
}
}
}

298
os2/MySQL-Source.icc Normal file
View File

@ -0,0 +1,298 @@
group client_pch =
'os2.h',
'assert.h', 'direct.h', 'errno.h', 'nerrno.h',
'limits.h', 'io.h', 'math.h',
'stdio.h', 'stdlib.h', 'stddef.h',
'sys/stat.h', 'sys/types.h', 'sys/time.h',
'types.h', 'string.h', 'stdarg.h',
'my_base.h', 'config-os2.h', 'my_dir.h',
'global.h', 'thr_alarm.h', 'm_string.h',
'mysql.h', 'zconf.h', 'zlib.h', 'mysys_err.h',
//'my_os2dirsrch.h',
'm_ctype.h',
'mysqld_error.h',
'my_list.h', 'my_sys.h', 'my_net.h',
'myisam.h', 'myisampack.h', '.\myisam\myisamdef.h'
group mysqlclientlib =
"..\\client\\readline.cc",
"..\\client\\sql_string.cc",
"..\\client\\completion_hash.cc",
//"..\\libmysql\\dll.c",
"..\\libmysql\\libmysql.c",
"..\\libmysql\\errmsg.c",
"..\\libmysql\\get_password.c",
"..\\libmysql\\net.c",
"..\\libmysql\\password.c",
"..\\libmysql\\violite.c"
group zlib =
"\\rd\\mysql\\zlib-1.1.3\\compress.c", "\\rd\\mysql\\zlib-1.1.3\\crc32.c",
"\\rd\\mysql\\zlib-1.1.3\\deflate.c", "\\rd\\mysql\\zlib-1.1.3\\gzio.c", "\\rd\\mysql\\zlib-1.1.3\\infblock.c",
"\\rd\\mysql\\zlib-1.1.3\\infcodes.c", "\\rd\\mysql\\zlib-1.1.3\\inffast.c",
"\\rd\\mysql\\zlib-1.1.3\\inflate.c", "\\rd\\mysql\\zlib-1.1.3\\inftrees.c",
"\\rd\\mysql\\zlib-1.1.3\\infutil.c", "\\rd\\mysql\\zlib-1.1.3\\trees.c", "\\rd\\mysql\\zlib-1.1.3\\uncompr.c",
"\\rd\\mysql\\zlib-1.1.3\\zutil.c", "\\rd\\mysql\\zlib-1.1.3\\adler32.c"
group ufc =
"\\rd\\mysql\\ufc\\crypt.c",
"\\rd\\mysql\\ufc\\crypt_util.c",
"\\rd\\mysql\\ufc\\crypt-entry.c"
group sql =
"..\\sql\\convert.cc",
"..\\sql\\derror.cc",
"..\\sql\\field.cc",
"..\\sql\\field_conv.cc",
"..\\sql\\filesort.cc",
"..\\sql\\ha_heap.cc",
"..\\sql\\ha_isam.cc",
"..\\sql\\ha_isammrg.cc",
"..\\sql\\ha_myisam.cc",
"..\\sql\\ha_myisammrg.cc",
"..\\sql\\handler.cc",
"..\\sql\\hash_filo.cc",
"..\\sql\\hostname.cc",
"..\\sql\\init.cc",
"..\\sql\\item.cc",
"..\\sql\\item_buff.cc",
"..\\sql\\item_cmpfunc.cc",
"..\\sql\\item_create.cc",
"..\\sql\\item_func.cc",
"..\\sql\\item_strfunc.cc",
"..\\sql\\item_sum.cc",
"..\\sql\\item_timefunc.cc",
"..\\sql\\item_uniq.cc",
"..\\sql\\key.cc",
"..\\sql\\lock.cc",
"..\\sql\\log.cc",
"..\\sql\\log_event.cc",
"..\\sql\\md5.c",
"..\\sql\\mf_iocache.cc",
"..\\sql\\mini_client.cc",
"..\\sql\\mini_client_errors.c",
"..\\sql\\mysqld.cc",
"..\\sql\\net_pkg.cc",
"..\\sql\\net_serv.cc",
"..\\sql\\opt_ft.cc",
"..\\sql\\opt_range.cc",
"..\\sql\\OPT_SUM.cc",
"..\\sql\\password.c",
"..\\sql\\procedure.cc",
"..\\sql\\records.cc",
"..\\sql\\slave.cc",
"..\\sql\\sql_acl.cc",
"..\\sql\\sql_analyse.cc",
"..\\sql\\sql_base.cc",
"..\\sql\\sql_cache.cc",
"..\\sql\\sql_class.cc",
"..\\sql\\sql_crypt.cc",
"..\\sql\\sql_db.cc",
"..\\sql\\sql_delete.cc",
"..\\sql\\sql_insert.cc",
"..\\sql\\sql_lex.cc",
"..\\sql\\sql_list.cc",
"..\\sql\\sql_load.cc",
"..\\sql\\sql_manager.cc",
"..\\sql\\sql_map.cc",
"..\\sql\\sql_parse.cc",
"..\\sql\\sql_rename.cc",
"..\\sql\\sql_repl.cc",
"..\\sql\\sql_select.cc",
"..\\sql\\sql_show.cc",
"..\\sql\\sql_string.cc",
"..\\sql\\sql_table.cc",
"..\\sql\\sql_test.cc",
"..\\sql\\sql_update.cc",
"..\\sql\\sql_udf.cc",
"..\\sql\\sql_yacc.cc",
"..\\sql\\table.cc",
"..\\sql\\thr_malloc.cc",
"..\\sql\\time.cc",
"..\\sql\\unireg.cc",
"..\\sql\\violite.c"
group isam =
"..\\isam\\changed.c", "..\\isam\\close.c",
"..\\isam\\create.c", "..\\isam\\delete.c", "..\\isam\\extra.c",
"..\\isam\\info.c", "..\\isam\\log.c", "..\\isam\\open.c",
"..\\isam\\panic.c", "..\\isam\\range.c",
"..\\isam\\rfirst.c", "..\\isam\\rkey.c", "..\\isam\\rlast.c",
"..\\isam\\rnext.c", "..\\isam\\rprev.c", "..\\isam\\rrnd.c",
"..\\isam\\rsame.c", "..\\isam\\rsamepos.c",
"..\\isam\\static.c", "..\\isam\\update.c",
"..\\isam\\write.c", "..\\isam\\_cache.c",
"..\\isam\\_dbug.c", "..\\isam\\_dynrec.c",
"..\\isam\\_key.c", "..\\isam\\_locking.c",
"..\\isam\\_packrec.c", "..\\isam\\_page.c",
"..\\isam\\_search.c", "..\\isam\\_statrec.c"
group strings =
"..\\strings\\bchange.c",
"..\\strings\\bmove.c",
"..\\strings\\bmove_upp.c",
"..\\strings\\ctype-big5.c",
"..\\strings\\ctype-czech.c",
"..\\strings\\ctype-euc_kr.c",
"..\\strings\\ctype-gb2312.c",
"..\\strings\\ctype-gbk.c",
"..\\strings\\ctype-sjis.c",
"..\\strings\\ctype-tis620.c",
"..\\strings\\ctype-ujis.c",
"..\\strings\\ctype_extra_sources.c",
"..\\strings\\ctype_autoconf.c",
"..\\strings\\ctype.c",
"..\\strings\\int2str.c",
"..\\strings\\is_prefix.c",
"..\\strings\\llstr.c",
"..\\strings\\longlong2str.c",
"..\\strings\\str2int.c",
"..\\strings\\strappend.c",
"..\\strings\\strcend.c",
"..\\strings\\strcont.c",
"..\\strings\\strend.c",
"..\\strings\\strfill.c",
"..\\strings\\strinstr.c",
"..\\strings\\strmake.c",
"..\\strings\\strmov.c",
"..\\strings\\strnlen.c",
"..\\strings\\strnmov.c",
"..\\strings\\strtoull.c",
"..\\strings\\strxmov.c",
"..\\strings\\strxnmov.c"
group heap = "..\\heap\\hp_block.c", "..\\heap\\hp_clear.c",
"..\\heap\\hp_close.c", "..\\heap\\hp_create.c", "..\\heap\\hp_delete.c",
"..\\heap\\hp_extra.c", "..\\heap\\hp_hash.c",
"..\\heap\\hp_info.c", "..\\heap\\hp_open.c",
"..\\heap\\hp_panic.c", "..\\heap\\hp_rename.c",
"..\\heap\\hp_rfirst.c", "..\\heap\\hp_rkey.c",
"..\\heap\\hp_rlast.c", "..\\heap\\hp_rnext.c",
"..\\heap\\hp_rprev.c", "..\\heap\\hp_rrnd.c",
"..\\heap\\hp_rsame.c", "..\\heap\\hp_scan.c",
"..\\heap\\hp_static.c", "..\\heap\\hp_update.c",
"..\\heap\\hp_write.c", "..\\heap\\_check.c", "..\\heap\\_rectest.c"
group merge = "..\\merge\\close.c", "..\\merge\\create.c", "..\\merge\\delete.c",
"..\\merge\\extra.c", "..\\merge\\info.c", "..\\merge\\open.c",
"..\\merge\\panic.c", "..\\merge\\rrnd.c", "..\\merge\\rsame.c",
"..\\merge\\static.c", "..\\merge\\update.c",
"..\\merge\\_locking.c"
group myisammrg = "..\\myisammrg\\myrg_close.c",
"..\\myisammrg\\myrg_create.c", "..\\myisammrg\\myrg_delete.c",
"..\\myisammrg\\myrg_extra.c", "..\\myisammrg\\myrg_info.c",
"..\\myisammrg\\myrg_locking.c",
"..\\myisammrg\\myrg_open.c", "..\\myisammrg\\myrg_panic.c",
"..\\myisammrg\\myrg_queue.c",
"..\\myisammrg\\myrg_rfirst.c", "..\\myisammrg\\myrg_rkey.c",
"..\\myisammrg\\myrg_rlast.c", "..\\myisammrg\\myrg_rnext.c",
"..\\myisammrg\\myrg_rprev.c", "..\\myisammrg\\myrg_rrnd.c",
"..\\myisammrg\\myrg_rsame.c",
"..\\myisammrg\\myrg_static.c",
"..\\myisammrg\\myrg_update.c"
group my_sys = "..\\mysys\\array.c", "..\\mysys\\charset.c",
"..\\mysys\\checksum.c", "..\\mysys\\default.c", "..\\mysys\\errors.c",
"..\\mysys\\getopt.c", "..\\mysys\\getopt1.c",
"..\\mysys\\getvar.c", "..\\mysys\\hash.c", "..\\mysys\\list.c",
"..\\mysys\\mf_brkhant.c", "..\\mysys\\mf_cache.c",
"..\\mysys\\mf_casecnv.c", "..\\mysys\\mf_dirname.c",
"..\\mysys\\mf_fn_ext.c", "..\\mysys\\mf_format.c",
"..\\mysys\\mf_getdate.c",
"..\\mysys\\mf_iocache2.c", "..\\mysys\\mf_keycache.c",
"..\\mysys\\mf_loadpath.c", "..\\mysys\\mf_pack.c",
"..\\mysys\\mf_pack2.c", "..\\mysys\\mf_path.c",
"..\\mysys\\mf_qsort2.c",
//"..\\mysys\\mf_qsort.c",
"..\\mysys\\mf_radix.c", "..\\mysys\\mf_same.c",
"..\\mysys\\mf_sort.c", "..\\mysys\\mf_soundex.c",
"..\\mysys\\mf_stripp.c", "..\\mysys\\mf_tempfile.c",
"..\\mysys\\mf_unixpath.c", "..\\mysys\\mf_wcomp.c",
"..\\mysys\\mf_wfile.c", "..\\mysys\\mulalloc.c",
"..\\mysys\\my_alarm.c", "..\\mysys\\my_alloc.c",
"..\\mysys\\my_append.c", "..\\mysys\\my_bitmap.c",
"..\\mysys\\my_chsize.c", "..\\mysys\\my_clock.c",
"..\\mysys\\my_compress.c", "..\\mysys\\my_copy.c",
"..\\mysys\\my_create.c", "..\\mysys\\my_delete.c",
"..\\mysys\\my_div.c", "..\\mysys\\my_error.c",
"..\\mysys\\my_fopen.c", "..\\mysys\\my_fstream.c",
"..\\mysys\\my_getwd.c", "..\\mysys\\my_init.c",
"..\\mysys\\my_lib.c", "..\\mysys\\my_lock.c",
"..\\mysys\\my_lockmem.c", "..\\mysys\\my_lread.c",
"..\\mysys\\my_lwrite.c", "..\\mysys\\my_malloc.c",
"..\\mysys\\my_messnc.c", "..\\mysys\\my_mkdir.c",
"..\\mysys\\my_net.c", "..\\mysys\\my_once.c",
"..\\mysys\\my_open.c",
"..\\mysys\\my_os2cond.c",
"..\\mysys\\my_os2dlfcn.c",
"..\\mysys\\my_os2dirsrch.c",
"..\\mysys\\my_os2mutex.c", "..\\mysys\\my_os2thread.c",
"..\\mysys\\my_os2tls.c",
"..\\mysys\\my_os2file64.c",
"..\\mysys\\my_pread.c", "..\\mysys\\my_pthread.c",
"..\\mysys\\my_quick.c", "..\\mysys\\my_read.c",
"..\\mysys\\my_realloc.c", "..\\mysys\\my_redel.c",
"..\\mysys\\my_rename.c", "..\\mysys\\my_seek.c",
"..\\mysys\\my_static.c", "..\\mysys\\my_tempnam.c",
"..\\mysys\\my_thr_init.c", "..\\mysys\\my_vsnprintf.c",
"..\\mysys\\my_write.c", "..\\mysys\\ptr_cmp.c",
"..\\mysys\\queues.c", "..\\mysys\\raid.cc",
"..\\mysys\\safemalloc.c", "..\\mysys\\string.c",
"..\\mysys\\thr_alarm.c",
"..\\mysys\\thr_mutex.c", "..\\mysys\\thr_rwlock.c",
"..\\mysys\\tree.c", "..\\mysys\\typelib.c"
group my_sys_cli = "..\\mysys\\mf_iocache.c"
group my_sys_sql = "..\\mysys\\thr_lock.c"
group myisam = "..\\myisam\\ft_parser.c",
"..\\myisam\\ft_search.c", "..\\myisam\\ft_static.c",
"..\\myisam\\ft_stopwords.c", "..\\myisam\\ft_update.c",
"..\\myisam\\mi_cache.c", "..\\myisam\\mi_changed.c",
"..\\myisam\\mi_check.c", "..\\myisam\\mi_checksum.c",
"..\\myisam\\mi_close.c", "..\\myisam\\mi_create.c",
"..\\myisam\\mi_dbug.c", "..\\myisam\\mi_delete.c",
"..\\myisam\\mi_delete_all.c", "..\\myisam\\mi_delete_table.c",
"..\\myisam\\mi_dynrec.c", "..\\myisam\\mi_extra.c",
"..\\myisam\\mi_info.c", "..\\myisam\\mi_key.c",
"..\\myisam\\mi_locking.c", "..\\myisam\\mi_log.c",
"..\\myisam\\mi_open.c", "..\\myisam\\mi_packrec.c",
"..\\myisam\\mi_page.c", "..\\myisam\\mi_panic.c",
"..\\myisam\\mi_range.c", "..\\myisam\\mi_rename.c",
"..\\myisam\\mi_rfirst.c", "..\\myisam\\mi_rkey.c",
"..\\myisam\\mi_rlast.c", "..\\myisam\\mi_rnext.c",
"..\\myisam\\mi_rnext_same.c", "..\\myisam\\mi_rprev.c",
"..\\myisam\\mi_rrnd.c", "..\\myisam\\mi_rsame.c",
"..\\myisam\\mi_rsamepos.c", "..\\myisam\\mi_scan.c",
"..\\myisam\\mi_search.c", "..\\myisam\\mi_static.c",
"..\\myisam\\mi_statrec.c", "..\\myisam\\mi_unique.c",
"..\\myisam\\mi_update.c", "..\\myisam\\mi_write.c",
"..\\myisam\\sort.c"
group dbug = "..\\dbug\\dbug.c", "..\\dbug\\factorial.c", "..\\dbug\\sanity.c"
group readline = "..\\readline\\bind.c", "..\\readline\\callback.c",
"..\\readline\\complete.c", "..\\readline\\display.c",
//"..\\readline\\emacs_keymap.c",
"..\\readline\\funmap.c", "..\\readline\\histexpand.c",
"..\\readline\\histfile.c", "..\\readline\\history.c",
"..\\readline\\histsearch.c", "..\\readline\\input.c",
"..\\readline\\isearch.c", "..\\readline\\keymaps.c",
"..\\readline\\kill.c", "..\\readline\\macro.c",
"..\\readline\\nls.c", "..\\readline\\parens.c",
"..\\readline\\readline.c", "..\\readline\\rltty.c",
"..\\readline\\search.c", "..\\readline\\shell.c",
"..\\readline\\signals.c", "..\\readline\\terminal.c",
"..\\readline\\tilde.c", "..\\readline\\undo.c",
"..\\readline\\util.c",
//"..\\readline\\vi_keymap.c",
"..\\readline\\vi_mode.c", "..\\readline\\xmalloc.c"
group regex = "..\\regex\\regcomp.c", "..\\regex\\regerror.c",
"..\\regex\\regexec.c", "..\\regex\\regfree.c", "..\\regex\\reginit.c"

117
os2/MySQL-Sql.icc Normal file
View File

@ -0,0 +1,117 @@
// disable code inlining when building static libs
InlineCode = "no"
// include common options
include "MySQL-Opt.icc"
include "MySQL-Source.icc"
option ProjectOptions = MySQLOptions
, define( "MYSQL_SERVER", "")
{
option file(genobject, "..\\OBJ\\ZLIB\\")
{
target "..\\bin\\mysqld.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
//source type('cpp') gpch
source type('cpp') 'os2.h'
source type('cpp')
//'ctype.h',
'string.h', 'assert.h', 'share.h', 'stdarg.h', 'stdio.h',
'stdlib.h', 'stddef.h', 'math.h', 'io.h', 'limits.h',
'process.h', 'errno.h', 'nerrno.h', 'sys/types.h',
'sys/time.h', 'sys/stat.h', 'sys/param.h', 'sys/ioccom.h',
'sys/filio.h', 'sys/sockio.h', 'sys/ioctlos2.h','sys/ioctl.h', 'types.h'
source type('cpp')
'global.h', 'my_base.h', 'config-os2.h',
'my_dir.h', 'my_sys.h', 'mysql.h',
'my_bitmap.h', 'violite.h', 'mysql_priv.h',
'm_string.h', 'm_ctype.h'
source type('cpp') 'myisam.h'
source type('cpp') 'myisampack.h'
source type('cpp') '.\myisam\myisamdef.h'
source type('cpp') 'sql_string.h'
source type('cpp') 'item.h'
source type('cpp') 'unireg.h'
source type('cpp') 'field.h'
source type('cpp') 'sql_lex.h'
source type('cpp') 'sql_list.h'
source type('cpp') 'md5.h'
source type('cpp') 'sql_acl.h'
source type('cpp') 'slave.h'
source type('cpp') 'ha_myisam.h'
source type('cpp') 'procedure.h'
source type('cpp') 'sql_select.h'
source type('cpp') 'errmsg.h'
source type('cpp') 't_ctype.h'
source type('cpp') 'direct.h'
source type('cpp') 'mysys_err.h'
source type('cpp') 'zconf.h'
source type('cpp') 'zlib.h'
source type('cpp') 'my_tree.h'
source type('cpp') '..\mysys\my_static.h'
source type('cpp') 'netdb.h'
source type('cpp') 'thr_alarm.h'
source type('cpp') 'heap.h'
source type('cpp') '..\myisam\fulltext.h'
source type('cpp') '..\myisam\ftdefs.h'
source type('cpp') 'myisammrg.h'
}
source type('cpp') 'sys/un.h'
source type('cpp') 'ha_heap.h'
source type('cpp') 'ha_myisammrg.h'
source type('cpp') 'opt_ft.h'
source type('cpp') 'hash_filo.h'
source type('cpp') 'mini_client.h'
source type('cpp') 'sql_repl.h'
source type('cpp') 'netinet/in_systm.h'
source type('cpp') 'netinet/tcp.h'
source type('cpp') 'sql_analyse.h'
source type('cpp') 'item_create.h'
source type('cpp') '..\mysys\mysys_priv.h'
source type('cpp') 'sys/utime.h'
source type('cpp') 'sys/select.h'
// target source files
source "rint.obj"
source zlib, ufc, regex
if debug_build {
source type('cpp') dbug
}
source type('cpp') heap
source type('cpp') isam
source type('cpp') merge
source type('cpp') myisam
source type('cpp') myisammrg
source type('cpp') my_sys
source type('cpp') my_sys_sql
source type('cpp') strings
source type('cpp') sql
}
}
/*
option define( "MYSQL_SERVER", "")
{
target "..\\bin\\mysqlbinlog.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
//source type('cpp') client_pch //, 'sql_string.h'
}
// target source files
source type('cpp')
"..\\sql\\mysqlbinlog.cc",
"..\\sql\\mini_client.cc",
"..\\sql\\net_serv.cc"
}
}
*/
}

134
os2/MySQL-Util.icc Normal file
View File

@ -0,0 +1,134 @@
// disable code inlining when building static libs
InlineCode = "no"
// include common options
include "MySQL-Opt.icc"
include "MySQL-Source.icc"
option ProjectOptions = MySQLOptions
, link(defaultlibsname, "common.lib")
, link(defaultlibsname, "myisam.lib")
, link(defaultlibsname, "isam.lib")
, link(defaultlibsname, "mysql.lib")
{
target "..\\bin\\myisamchk.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch
}
source type('cpp') "..\\myisam\\myisamchk.c"
}
target "..\\bin\\myisamlog.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch
}
// target source files
source type('cpp') "..\\myisam\\myisamlog.c"
}
target "..\\bin\\myisampack.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch
}
// target source files
source type('cpp') "..\\myisam\\myisampack.c"
}
target "..\\bin\\test\\is_test1.exe"
{
// target source files
source type('cpp') "..\\isam\\test1.c"
}
target "..\\bin\\test\\is_test2.exe"
{
// target source files
source type('cpp') "..\\isam\\test2.c"
}
target "..\\bin\\test\\mi_test1.exe"
{
// target source files
source type('cpp') "..\\myisam\\mi_test1.c"
}
target "..\\bin\\test\\mi_test2.exe"
{
// target source files
source type('cpp') "..\\myisam\\mi_test2.c"
}
target "..\\bin\\test\\ft_eval.exe"
{
// target source files
source type('cpp') "..\\myisam\\ft_eval.c"
}
target "..\\bin\\test\\ft_test1.exe"
{
// target source files
source type('cpp') "..\\myisam\\ft_test1.c"
}
//target "..\\bin\\test\\testhash.exe"
{
// target source files
//source type('cpp') "..\\mysys\\testhash.c"
}
target "..\\bin\\test\\test_charset.exe"
{
// target source files
source type('cpp') "..\\mysys\\test_charset.c"
}
target "..\\bin\\test\\hp_test1.exe"
{
// target source files
source type('cpp') "..\\heap\\hp_test1.c"
}
target "..\\bin\\test\\hp_test2.exe"
{
// target source files
source type('cpp') "..\\heap\\hp_test2.c"
}
option define( "MAIN", "")
{
target "..\\bin\\test\\thr_lock.exe"
{
// target source files
source type('cpp') "..\\mysys\\thr_lock.c"
}
}
target "..\\bin\\test\\insert_test.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch
}
source type('cpp') "..\\client\\insert_test.c"
}
target "..\\bin\\test\\select_test.exe"
{
source type('cpp') "..\\client\\select_test.c"
}
target "..\\bin\\test\\thread_test.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') client_pch
}
source type('cpp') "..\\client\\thread_test.c"
}
}

3067
os2/MySQL-Util.irs Normal file

File diff suppressed because it is too large Load Diff

68
os2/MySQL-binlog.icc Normal file
View File

@ -0,0 +1,68 @@
// disable code inlining when building static libs
InlineCode = "no"
// include common options
include "MySQL-Opt.icc"
include "MySQL-Source.icc"
option ProjectOptions = MySQLOptions
, define( "MYSQL_SERVER", "")
, link(defaultlibsname, "common.lib")
, link(defaultlibsname, "myisam.lib")
, link(defaultlibsname, "isam.lib")
, link(defaultlibsname, "mysql.lib")
{
option define( "MYSQL_SERVER", "")
{
target "..\\bin\\mysqlbinlog.exe"
{
// optimized precompiled headers
option macros('global', 'yes')
{
source type('cpp') 'os2.h'
source type('cpp') 'errno.h', 'nerrno.h'
source type('cpp') 'config-os2.h', 'mysql_com.h'
/*
source type('cpp')
'global.h', 'my_base.h', 'config-os2.h',
'my_dir.h', 'my_sys.h', 'mysql.h',
'my_bitmap.h', 'violite.h',
'mysql_priv.h',
'm_string.h'
*/
}
// target source files
source type('cpp')
"..\\sql\\mysqlbinlog.cc"
option macros('global', 'yes')
{
source type('cpp') 'sys/stat.h'
}
source type('cpp') "..\\sql\\mini_client.cc"
option macros('global', 'yes')
{
source type('cpp') 'os2.h'
source type('cpp') 'math.h'
source type('cpp') 'stdio.h'
source type('cpp') 'stdlib.h'
source type('cpp') 'stddef.h'
source type('cpp') 'limits.h'
source type('cpp') 'sys/types.h'
source type('cpp') 'sys/time.h'
source type('cpp') 'types.h'
source type('cpp') 'stdarg.h'
source type('cpp') 'string.h'
}
source type('cpp') "..\\sql\\net_serv.cc",
"..\\sql\\mini_client_errors.c"
option macros('global', 'yes')
{
source type('cpp') 'assert.h'
}
source type('cpp') "..\\sql\\violite.c",
"..\\sql\\password.c"
//"..\\sql\\thr_malloc.cc"
}
}
}

Some files were not shown because too many files have changed in this diff Show More