mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00
Upgrade ext/mysql/libmysql to version 3.23.39. No major changes -
portability fixes. Also add configure test for HAVE_INT_8_16_32 which should solve compilation problems on AIX.
This commit is contained in:
parent
304ac03be4
commit
e8cbbc0637
32 changed files with 269 additions and 159 deletions
2
NEWS
2
NEWS
|
@ -1,6 +1,8 @@
|
|||
PHP 4.0 NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? 200?, Version 4.0.7-dev
|
||||
- Updated ext/mysql/libmysql to version 3.23.39; Portability fixes, minor
|
||||
bug fixes. (tim@mysql.com)
|
||||
- Added the CONNECTION_ABORTED, CONNECTION_TIMEOUT and CONNECTION_NORMAL
|
||||
constants. (Zak)
|
||||
- Added get_defined_constants() function to return an associative array of
|
||||
|
|
|
@ -295,6 +295,30 @@ then
|
|||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN(MYSQL_CHECK_INT_8_16_32,
|
||||
[AC_MSG_CHECKING([for int8])
|
||||
AC_TRY_RUN([
|
||||
#ifdef HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STDDEF_H
|
||||
#include <stddef.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
int8 i;
|
||||
return 0;
|
||||
}
|
||||
], AC_DEFINE(HAVE_INT_8_16_32, , [ ]) AC_MSG_RESULT([yes]), AC_MSG_RESULT([no])
|
||||
)
|
||||
])
|
||||
|
||||
AC_DEFUN(MYSQL_HEADER_CHECKS,[
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(sgtty.h sys/ioctl.h \
|
||||
|
@ -322,6 +346,7 @@ AC_TYPE_UID_T
|
|||
MYSQL_CHECK_ULONG
|
||||
MYSQL_CHECK_UCHAR
|
||||
MYSQL_CHECK_UINT
|
||||
MYSQL_CHECK_INT_8_16_32
|
||||
|
||||
MYSQL_TYPE_ACCEPT
|
||||
MYSQL_TYPE_QSORT
|
||||
|
|
|
@ -341,7 +341,7 @@ pthread_mutex_t THR_LOCK_dbug;
|
|||
|
||||
static void init_dbug_state(void)
|
||||
{
|
||||
pthread_mutex_init(&THR_LOCK_dbug,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_dbug,MY_MUTEX_INIT_FAST);
|
||||
}
|
||||
|
||||
static CODE_STATE *code_state(void)
|
||||
|
|
|
@ -208,7 +208,7 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
|
|||
const char *dir, const char *config_file,
|
||||
const char *ext, TYPELIB *group)
|
||||
{
|
||||
char name[FN_REFLEN+10],buff[257],*ptr,*end,*value,*tmp;
|
||||
char name[FN_REFLEN+10],buff[FN_REFLEN+1],*ptr,*end,*value,*tmp;
|
||||
FILE *fp;
|
||||
uint line=0;
|
||||
my_bool read_values=0,found_group=0;
|
||||
|
|
|
@ -22,7 +22,7 @@ const char *client_errors[]=
|
|||
"MySQL client got out of memory",
|
||||
"Wrong host info",
|
||||
"Localhost via UNIX socket",
|
||||
"%s via TCP/IP",
|
||||
"%-.64s via TCP/IP",
|
||||
"Error in server handshake",
|
||||
"Lost connection to MySQL server during query",
|
||||
"Commands out of sync; You can't run this command now",
|
||||
|
@ -48,11 +48,11 @@ const char *client_errors[]=
|
|||
"MySQL client run out of memory",
|
||||
"Wrong host info",
|
||||
"Localhost via UNIX socket",
|
||||
"%s via TCP/IP",
|
||||
"%-.64s via TCP/IP",
|
||||
"Error in server handshake",
|
||||
"Lost connection to MySQL server during query",
|
||||
"Commands out of sync; You can't run this command now",
|
||||
"%s via named pipe",
|
||||
"%-.64s via named pipe",
|
||||
"Can't wait for named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
||||
"Can't open named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
||||
"Can't set state of named pipe to host: %-.64s pipe: %-.32s (%lu)",
|
||||
|
@ -64,5 +64,5 @@ const char *client_errors[]=
|
|||
|
||||
void init_client_errs(void)
|
||||
{
|
||||
errmsg[CLIENT_ERRMAP] = &client_errors[0];
|
||||
my_errmsg[CLIENT_ERRMAP] = &client_errors[0];
|
||||
}
|
||||
|
|
|
@ -32,18 +32,21 @@ const char * NEAR globerrs[GLOBERRS]=
|
|||
"Can't create directory '%s' (Errcode: %d)",
|
||||
"Character set '%s' is not a compiled character set and is not specified in the '%s' file",
|
||||
"Out of resources when opening file '%s' (Errcode: %d)",
|
||||
"Can't read value for symlink '%s' (Error %d)",
|
||||
"Can't create symlink '%s' pointing at '%s' (Error %d)",
|
||||
"Error on realpath() on '%s' (Error %d)",
|
||||
};
|
||||
|
||||
void init_glob_errs(void)
|
||||
{
|
||||
errmsg[GLOB] = & globerrs[0];
|
||||
my_errmsg[GLOB] = & globerrs[0];
|
||||
} /* init_glob_errs */
|
||||
|
||||
#else
|
||||
|
||||
void init_glob_errs()
|
||||
{
|
||||
errmsg[GLOB] = & globerrs[0];
|
||||
my_errmsg[GLOB] = & globerrs[0];
|
||||
|
||||
EE(EE_FILENOTFOUND) = "File '%s' not found (Errcode: %d)";
|
||||
EE(EE_CANTCREATEFILE) = "Can't create/write to file '%s' (Errcode: %d)";
|
||||
|
@ -67,6 +70,9 @@ void init_glob_errs()
|
|||
EE(EE_DISK_FULL) = "Disk is full writing '%s'. Waiting for someone to free space...";
|
||||
EE(EE_CANT_MKDIR) ="Can't create directory '%s' (Errcode: %d)";
|
||||
EE(EE_UNKNOWN_CHARSET)= "Character set is not a compiled character set and is not specified in the %s file";
|
||||
EE(EE_OUT_OF_FILERESOURCES)="Out of resources when opening file '%s' (Errcode: %d)",
|
||||
EE(EE_OUT_OF_FILERESOURCES)="Out of resources when opening file '%s' (Errcode: %d)";
|
||||
EE(EE_CANT_READLINK)="Can't read value for symlink '%s' (Error %d)";
|
||||
EE(EE_CANT_SYMLINK)="Can't create symlink '%s' pointing at '%s' (Error %d)";
|
||||
EE(EE_REALPATH)="Error on realpath() on '%s' (Error %d)";
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -14,6 +14,19 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
#include <os2.h>
|
||||
#endif /* __EMX__ */
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
/* We use a Unix API, so pretend it's not Windows */
|
||||
#undef WIN
|
||||
#undef WIN32
|
||||
#undef _WIN
|
||||
#undef _WIN32
|
||||
#undef _WIN64
|
||||
#undef __WIN__
|
||||
#undef __WIN32__
|
||||
#define HAVE_ERRNO_AS_DEFINE
|
||||
#endif /* __CYGWIN__ */
|
||||
|
||||
|
||||
#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)
|
||||
#include <config-win.h>
|
||||
#else
|
||||
|
@ -305,7 +318,8 @@ typedef int File; /* File descriptor */
|
|||
typedef int my_socket; /* File descriptor for sockets */
|
||||
#define INVALID_SOCKET -1
|
||||
#endif
|
||||
typedef RETSIGTYPE sig_handler; /* Function to handle signals */
|
||||
/* Type for fuctions that handles signals */
|
||||
#define sig_handler RETSIGTYPE
|
||||
typedef void (*sig_return)();/* Returns type from signal */
|
||||
#if defined(__GNUC__) && !defined(_lint)
|
||||
typedef char pchar; /* Mixed prototypes can take char */
|
||||
|
@ -797,6 +811,28 @@ typedef union {
|
|||
#else
|
||||
#define float4get(V,M) memcpy_fixed((byte*) &V,(byte*) (M),sizeof(float))
|
||||
#define float4store(V,M) memcpy_fixed((byte*) V,(byte*) (&M),sizeof(float))
|
||||
|
||||
#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
|
||||
#define doublestore(T,V) { *(T)= ((byte *) &V)[4];\
|
||||
*((T)+1)=(char) ((byte *) &V)[5];\
|
||||
*((T)+2)=(char) ((byte *) &V)[6];\
|
||||
*((T)+3)=(char) ((byte *) &V)[7];\
|
||||
*((T)+4)=(char) ((byte *) &V)[0];\
|
||||
*((T)+5)=(char) ((byte *) &V)[1];\
|
||||
*((T)+6)=(char) ((byte *) &V)[2];\
|
||||
*((T)+7)=(char) ((byte *) &V)[3]; }
|
||||
#define doubleget(V,M) { double def_temp;\
|
||||
((byte*) &def_temp)[0]=(M)[4];\
|
||||
((byte*) &def_temp)[1]=(M)[5];\
|
||||
((byte*) &def_temp)[2]=(M)[6];\
|
||||
((byte*) &def_temp)[3]=(M)[7];\
|
||||
((byte*) &def_temp)[4]=(M)[0];\
|
||||
((byte*) &def_temp)[5]=(M)[1];\
|
||||
((byte*) &def_temp)[6]=(M)[2];\
|
||||
((byte*) &def_temp)[7]=(M)[3];\
|
||||
(V) = def_temp; }
|
||||
#endif /* __FLOAT_WORD_ORDER */
|
||||
|
||||
#define float8get(V,M) doubleget((V),(M))
|
||||
#define float8store(V,M) doublestore((V),(M))
|
||||
#endif /* WORDS_BIGENDIAN */
|
||||
|
@ -849,7 +885,7 @@ typedef union {
|
|||
#ifndef doubleget
|
||||
#define doubleget(V,M) memcpy_fixed((byte*) &V,(byte*) (M),sizeof(double))
|
||||
#define doublestore(T,V) memcpy_fixed((byte*) (T),(byte*) &V,sizeof(double))
|
||||
#endif
|
||||
#endif /* doubleget */
|
||||
#define longlongget(V,M) memcpy_fixed((byte*) &V,(byte*) (M),sizeof(ulonglong))
|
||||
#define longlongstore(T,V) memcpy_fixed((byte*) (T),(byte*) &V,sizeof(ulonglong))
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
This file is public domain and comes with NO WARRANTY of any kind */
|
||||
|
||||
#define DONT_USE_RAID
|
||||
#include <global.h>
|
||||
#if defined(__WIN__) || defined(_WIN32) || defined(_WIN64)
|
||||
#include <winsock.h>
|
||||
#include <odbcinst.h>
|
||||
#endif
|
||||
#include <global.h>
|
||||
#include <my_sys.h>
|
||||
#include <mysys_err.h>
|
||||
#include <m_string.h>
|
||||
|
@ -473,7 +473,7 @@ static void free_old_query(MYSQL *mysql)
|
|||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
#ifdef HAVE_GETPWUID
|
||||
#if defined(HAVE_GETPWUID) && defined(NO_GETPWUID_DECL)
|
||||
struct passwd *getpwuid(uid_t);
|
||||
char* getlogin(void);
|
||||
#endif
|
||||
|
@ -489,14 +489,6 @@ static void read_user_name(char *name)
|
|||
#ifdef HAVE_GETPWUID
|
||||
struct passwd *skr;
|
||||
const char *str;
|
||||
/*#ifdef __cplusplus
|
||||
extern "C" struct passwd *getpwuid(uid_t);
|
||||
extern "C" { char* getlogin(void); }
|
||||
#else
|
||||
char * getlogin();
|
||||
struct passwd *getpwuid(uid_t);
|
||||
#endif
|
||||
*/
|
||||
if ((str=getlogin()) == NULL)
|
||||
{
|
||||
if ((skr=getpwuid(geteuid())) != NULL)
|
||||
|
@ -1653,6 +1645,7 @@ mysql_close(MYSQL *mysql)
|
|||
{
|
||||
free_old_query(mysql);
|
||||
mysql->status=MYSQL_STATUS_READY; /* Force command */
|
||||
mysql->reconnect=0;
|
||||
simple_command(mysql,COM_QUIT,NullS,0,1);
|
||||
end_server(mysql);
|
||||
}
|
||||
|
@ -1696,84 +1689,27 @@ mysql_query(MYSQL *mysql, const char *query)
|
|||
return mysql_real_query(mysql,query, (uint) strlen(query));
|
||||
}
|
||||
|
||||
int STDCALL
|
||||
mysql_send_query(MYSQL* mysql, const char* query)
|
||||
{
|
||||
return mysql_real_send_query(mysql, query, strlen(query));
|
||||
}
|
||||
|
||||
/* send the query and return so we can do something else */
|
||||
/* needs to be followed by mysql_reap_query() when we want to
|
||||
finish processing it
|
||||
/*
|
||||
Send the query and return so we can do something else.
|
||||
Needs to be followed by mysql_read_query_result() when we want to
|
||||
finish processing it.
|
||||
*/
|
||||
int STDCALL
|
||||
mysql_real_send_query(MYSQL* mysql, const char* query, uint len)
|
||||
{
|
||||
return simple_command(mysql, COM_QUERY, query, len, 1);
|
||||
}
|
||||
|
||||
int STDCALL
|
||||
mysql_reap_query(MYSQL* mysql)
|
||||
mysql_send_query(MYSQL* mysql, const char* query, uint length)
|
||||
{
|
||||
return simple_command(mysql, COM_QUERY, query, length, 1);
|
||||
}
|
||||
|
||||
int STDCALL mysql_read_query_result(MYSQL *mysql)
|
||||
{
|
||||
uchar *pos;
|
||||
ulong field_count;
|
||||
MYSQL_DATA *fields;
|
||||
uint len;
|
||||
DBUG_ENTER("mysql_reap_query");
|
||||
DBUG_PRINT("enter",("handle: %lx",mysql));
|
||||
if((len = net_safe_read(mysql)) == packet_error)
|
||||
DBUG_RETURN(-1);
|
||||
free_old_query(mysql); /* Free old result */
|
||||
get_info:
|
||||
pos=(uchar*) mysql->net.read_pos;
|
||||
if ((field_count= net_field_length(&pos)) == 0)
|
||||
{
|
||||
mysql->affected_rows= net_field_length_ll(&pos);
|
||||
mysql->insert_id= net_field_length_ll(&pos);
|
||||
if (mysql->server_capabilities & CLIENT_TRANSACTIONS)
|
||||
{
|
||||
mysql->server_status=uint2korr(pos); pos+=2;
|
||||
}
|
||||
if (pos < mysql->net.read_pos+len && net_field_length(&pos))
|
||||
mysql->info=(char*) pos;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
if (field_count == NULL_LENGTH) /* LOAD DATA LOCAL INFILE */
|
||||
{
|
||||
int error=send_file_to_server(mysql,(char*) pos);
|
||||
if ((len=net_safe_read(mysql)) == packet_error || error)
|
||||
DBUG_RETURN(-1);
|
||||
goto get_info; /* Get info packet */
|
||||
}
|
||||
if (!(mysql->server_status & SERVER_STATUS_AUTOCOMMIT))
|
||||
mysql->server_status|= SERVER_STATUS_IN_TRANS;
|
||||
uint length;
|
||||
DBUG_ENTER("mysql_read_query_result");
|
||||
|
||||
mysql->extra_info= net_field_length_ll(&pos); /* Maybe number of rec */
|
||||
if (!(fields=read_rows(mysql,(MYSQL_FIELD*) 0,5)))
|
||||
DBUG_RETURN(-1);
|
||||
if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc,
|
||||
(uint) field_count,0,
|
||||
(my_bool) test(mysql->server_capabilities &
|
||||
CLIENT_LONG_FLAG))))
|
||||
DBUG_RETURN(-1);
|
||||
mysql->status=MYSQL_STATUS_GET_RESULT;
|
||||
mysql->field_count=field_count;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
}
|
||||
|
||||
int STDCALL
|
||||
mysql_real_query(MYSQL *mysql, const char *query, uint length)
|
||||
{
|
||||
uchar *pos;
|
||||
ulong field_count;
|
||||
MYSQL_DATA *fields;
|
||||
DBUG_ENTER("mysql_real_query");
|
||||
DBUG_PRINT("enter",("handle: %lx",mysql));
|
||||
DBUG_PRINT("query",("Query = \"%s\"",query));
|
||||
|
||||
if (simple_command(mysql,COM_QUERY,query,length,1) ||
|
||||
(length=net_safe_read(mysql)) == packet_error)
|
||||
if ((length = net_safe_read(mysql)) == packet_error)
|
||||
DBUG_RETURN(-1);
|
||||
free_old_query(mysql); /* Free old result */
|
||||
get_info:
|
||||
|
@ -1813,6 +1749,16 @@ mysql_real_query(MYSQL *mysql, const char *query, uint length)
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
int STDCALL
|
||||
mysql_real_query(MYSQL *mysql, const char *query, uint length)
|
||||
{
|
||||
DBUG_ENTER("mysql_real_query");
|
||||
DBUG_PRINT("enter",("handle: %lx",mysql));
|
||||
DBUG_PRINT("query",("Query = \"%s\"",query));
|
||||
if (simple_command(mysql,COM_QUERY,query,length,1))
|
||||
DBUG_RETURN(-1);
|
||||
DBUG_RETURN(mysql_read_query_result(mysql));
|
||||
}
|
||||
|
||||
static int
|
||||
send_file_to_server(MYSQL *mysql, const char *filename)
|
||||
|
|
|
@ -52,6 +52,7 @@ extern CHARSET_INFO compiled_charsets[];
|
|||
#endif
|
||||
/* Don't include std ctype.h when this is included */
|
||||
#define _CTYPE_H
|
||||
#define _CTYPE_H_
|
||||
#define _CTYPE_INCLUDED
|
||||
#define __CTYPE_INCLUDED
|
||||
#define _CTYPE_USING /* Don't put names in global namespace. */
|
||||
|
|
|
@ -96,7 +96,7 @@ my_string fn_format(my_string to, const char *name, const char *dsk,
|
|||
(void) strmov(pos,ext); /* Don't convert extension */
|
||||
}
|
||||
/* Purify gives a lot of UMR errors when using realpath */
|
||||
#if defined(HAVE_REALPATH) && !defined(HAVE_purify)
|
||||
#if defined(HAVE_REALPATH) && !defined(HAVE_purify) && !defined(HAVE_BROKEN_REALPATH)
|
||||
if (flag & 16)
|
||||
{
|
||||
struct stat stat_buff;
|
||||
|
|
|
@ -222,11 +222,16 @@ void symdirget(char *dir)
|
|||
*pos++=temp; *pos=0; /* Restore old filename */
|
||||
if (fp)
|
||||
{
|
||||
if (fgets(buff, sizeof(buff), fp))
|
||||
if (fgets(buff, sizeof(buff)-1, fp))
|
||||
{
|
||||
for (pos=strend(buff);
|
||||
pos > buff && (iscntrl(pos[-1]) || isspace(pos[-1])) ;
|
||||
pos --);
|
||||
|
||||
/* Ensure that the symlink ends with the directory symbol */
|
||||
if (pos == buff || pos[-1] != FN_LIBCHAR)
|
||||
*pos++=FN_LIBCHAR;
|
||||
|
||||
strmake(dir,buff, (uint) (pos-buff));
|
||||
}
|
||||
my_fclose(fp,MYF(0));
|
||||
|
|
|
@ -10,7 +10,7 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
void init_alloc_root(MEM_ROOT *mem_root, uint block_size, uint pre_alloc_size)
|
||||
{
|
||||
mem_root->free=mem_root->used=0;
|
||||
mem_root->min_malloc=16;
|
||||
mem_root->min_malloc=32;
|
||||
mem_root->block_size=block_size-MALLOC_OVERHEAD-sizeof(USED_MEM)-8;
|
||||
mem_root->error_handler=0;
|
||||
#if !(defined(HAVE_purify) && defined(EXTRA_DEBUG))
|
||||
|
|
|
@ -9,7 +9,7 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
|
||||
/* Define some external variables for error handling */
|
||||
|
||||
const char ** NEAR errmsg[MAXMAPS]={0,0,0,0};
|
||||
const char ** NEAR my_errmsg[MAXMAPS]={0,0,0,0};
|
||||
char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
|
||||
/* Error message to user */
|
||||
|
@ -28,10 +28,10 @@ int my_error(int nr,myf MyFlags, ...)
|
|||
va_start(ap,MyFlags);
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d", nr, MyFlags, errno));
|
||||
|
||||
if (nr / ERRMOD == GLOB && errmsg[GLOB] == 0)
|
||||
if (nr / ERRMOD == GLOB && my_errmsg[GLOB] == 0)
|
||||
init_glob_errs();
|
||||
|
||||
olen=(uint) strlen(tpos=errmsg[nr / ERRMOD][nr % ERRMOD]);
|
||||
olen=(uint) strlen(tpos=my_errmsg[nr / ERRMOD][nr % ERRMOD]);
|
||||
endpos=ebuff;
|
||||
|
||||
while (*tpos)
|
||||
|
@ -51,6 +51,8 @@ int my_error(int nr,myf MyFlags, ...)
|
|||
/* Skipp if max size is used (to be compatible with printf) */
|
||||
while (isdigit(*tpos) || *tpos == '.' || *tpos == '-')
|
||||
tpos++;
|
||||
if (*tpos == 'l') /* Skipp 'l' argument */
|
||||
tpos++;
|
||||
if (*tpos == 's') /* String parameter */
|
||||
{
|
||||
par = va_arg(ap, char *);
|
||||
|
|
|
@ -15,6 +15,10 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
#include <direct.h>
|
||||
#endif
|
||||
|
||||
#ifdef __EMX__
|
||||
// chdir2 support also drive change
|
||||
#define chdir _chdir2
|
||||
#endif
|
||||
|
||||
/* Gets current working directory in buff. Directory is allways ended
|
||||
with FN_LIBCHAR */
|
||||
|
|
|
@ -34,6 +34,7 @@ static my_bool win32_init_tcp_ip();
|
|||
static my_bool my_init_done=0;
|
||||
|
||||
|
||||
|
||||
static ulong atoi_octal(const char *str)
|
||||
{
|
||||
long int tmp;
|
||||
|
@ -62,6 +63,9 @@ void my_init(void)
|
|||
#ifndef __WIN__
|
||||
sigfillset(&my_signals); /* signals blocked by mf_brkhant */
|
||||
#endif
|
||||
#endif /* THREAD */
|
||||
#ifdef UNIXWARE_7
|
||||
(void) isatty(0); /* Go around connect() bug in UW7 */
|
||||
#endif
|
||||
{
|
||||
DBUG_ENTER("my_init");
|
||||
|
@ -113,7 +117,12 @@ void my_end(int infoflag)
|
|||
#ifdef HAVE_GETRUSAGE
|
||||
struct rusage rus;
|
||||
if (!getrusage(RUSAGE_SELF, &rus))
|
||||
fprintf(info_file,"\nUser time %.2f, System time %.2f\nMaximum resident set size %ld, Integral resident set size %ld\nNon physical pagefaults %ld, Physical pagefaults %ld, Swaps %ld\nBlocks in %ld out %ld, Messages in %ld out %ld, Signals %ld\nVouluntary context switches %ld, Invouluntary context switches %ld\n",
|
||||
fprintf(info_file,"\n\
|
||||
User time %.2f, System time %.2f\n\
|
||||
Maximum resident set size %ld, Integral resident set size %ld\n\
|
||||
Non-physical pagefaults %ld, Physical pagefaults %ld, Swaps %ld\n\
|
||||
Blocks in %ld out %ld, Messages in %ld out %ld, Signals %ld\n\
|
||||
Voluntary context switches %ld, Involuntary context switches %ld\n",
|
||||
(rus.ru_utime.tv_sec * SCALE_SEC +
|
||||
rus.ru_utime.tv_usec / SCALE_USEC) / 100.0,
|
||||
(rus.ru_stime.tv_sec * SCALE_SEC +
|
||||
|
|
|
@ -4,6 +4,10 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
/* thread safe version of some common functions */
|
||||
|
||||
/* for thread safe my_inet_ntoa */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#if !defined(MSDOS) && !defined(__WIN__) && !defined(__BEOS__)
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
#include <sys/socket.h>
|
||||
|
@ -17,3 +21,7 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
#endif /* !defined(MSDOS) && !defined(__WIN__) */
|
||||
|
||||
void my_inet_ntoa(struct in_addr in, char *buf);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -93,7 +93,7 @@ File my_register_filename(File fd, const char *FileName, enum file_type
|
|||
my_file_opened++;
|
||||
my_file_info[fd].type = type_of_file;
|
||||
#if defined(THREAD) && !defined(HAVE_PREAD)
|
||||
pthread_mutex_init(&my_file_info[fd].mutex,NULL);
|
||||
pthread_mutex_init(&my_file_info[fd].mutex,MY_MUTEX_INIT_FAST);
|
||||
#endif
|
||||
pthread_mutex_unlock(&THR_LOCK_open);
|
||||
DBUG_PRINT("exit",("fd: %d",fd));
|
||||
|
|
|
@ -302,7 +302,7 @@ int sigwait(sigset_t *setp, int *sigp)
|
|||
pthread_t sigwait_thread_id;
|
||||
inited=1;
|
||||
sigemptyset(&pending_set);
|
||||
pthread_mutex_init(&LOCK_sigwait,NULL);
|
||||
pthread_mutex_init(&LOCK_sigwait,MY_MUTEX_INIT_FAST);
|
||||
pthread_cond_init(&COND_sigwait,NULL);
|
||||
|
||||
pthread_attr_init(&thr_attr);
|
||||
|
|
|
@ -427,6 +427,7 @@ int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
|
|||
#define pthread_mutex_destroy(A) safe_mutex_destroy((A),__FILE__,__LINE__)
|
||||
#define pthread_cond_wait(A,B) safe_cond_wait((A),(B),__FILE__,__LINE__)
|
||||
#define pthread_cond_timedwait(A,B,C) safe_cond_timedwait((A),(B),(C),__FILE__,__LINE__)
|
||||
#define pthread_mutex_trylock(A) pthread_mutex_lock(A)
|
||||
#define pthread_mutex_t safe_mutex_t
|
||||
#endif /* SAFE_MUTEX */
|
||||
|
||||
|
@ -484,11 +485,26 @@ extern int my_rw_unlock( my_rw_lock_t * );
|
|||
#define pthread_attr_setstacksize(A,B) pthread_dummy(0)
|
||||
#endif
|
||||
|
||||
/* Define mutex types */
|
||||
#define MY_MUTEX_INIT_SLOW NULL
|
||||
#define MY_MUTEX_INIT_FAST NULL
|
||||
#define MY_MUTEX_INIT_ERRCHK NULL
|
||||
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
||||
extern pthread_mutexattr_t my_fast_mutexattr;
|
||||
#undef MY_MUTEX_INIT_FAST
|
||||
#define MY_MUTEX_INIT_FAST &my_fast_mutexattr
|
||||
#endif
|
||||
#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
|
||||
extern pthread_mutexattr_t my_errchk_mutexattr;
|
||||
#undef MY_INIT_MUTEX_ERRCHK
|
||||
#define MY_INIT_MUTEX_ERRCHK &my_errchk_mutexattr
|
||||
#endif
|
||||
|
||||
extern my_bool my_thread_global_init(void);
|
||||
extern void my_thread_global_end(void);
|
||||
extern my_bool my_thread_init(void);
|
||||
extern void my_thread_end(void);
|
||||
extern char *my_thread_name(void);
|
||||
extern const char *my_thread_name(void);
|
||||
extern long my_thread_id(void);
|
||||
extern int pthread_no_free(void *);
|
||||
extern int pthread_dummy(int);
|
||||
|
|
|
@ -27,13 +27,6 @@ extern int NEAR my_errno; /* Last error in mysys */
|
|||
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef __EMX__
|
||||
/* record loging flags (F_GETLK, F_SETLK, F_SETLKW) */
|
||||
#define F_RDLCK 1 /* FreeBSD: shared or read lock */
|
||||
#define F_UNLCK 2 /* FreeBSD: unlock */
|
||||
#define F_WRLCK 3 /* FreeBSD: exclusive or write lock */
|
||||
#endif
|
||||
|
||||
#define MYSYS_PROGRAM_USES_CURSES() { error_handler_hook = my_message_curses; mysys_uses_curses=1; }
|
||||
#define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;}
|
||||
#define MY_INIT(name); { my_progname= name; my_init(); }
|
||||
|
@ -55,6 +48,8 @@ extern int NEAR my_errno; /* Last error in mysys */
|
|||
#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */
|
||||
#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */
|
||||
#define MY_COPYTIME 64 /* my_redel() copys time */
|
||||
#define MY_DELETE_OLD 256 /* my_create_with_symlink() */
|
||||
#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */
|
||||
#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */
|
||||
#define MY_REDEL_MAKE_BACKUP 256
|
||||
#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */
|
||||
|
@ -155,7 +150,7 @@ void __CDECL hfree(void *ptr);
|
|||
#else
|
||||
extern int errno; /* declare errno */
|
||||
#endif
|
||||
extern const char ** NEAR errmsg[];
|
||||
extern const char ** NEAR my_errmsg[];
|
||||
extern char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
extern char *home_dir; /* Home directory for user */
|
||||
extern char *my_progname; /* program-name (printed in errors) */
|
||||
|
@ -371,6 +366,12 @@ extern File my_create(const char *FileName,int CreateFlags,
|
|||
int AccsesFlags, myf MyFlags);
|
||||
extern int my_close(File Filedes,myf MyFlags);
|
||||
extern int my_mkdir(const char *dir, int Flags, myf MyFlags);
|
||||
extern int my_readlink(char *to, const char *filename, myf MyFlags);
|
||||
extern int my_realpath(char *to, const char *filename, myf MyFlags);
|
||||
extern File my_create_with_symlink(const char *linkname, const char *filename,
|
||||
int createflags, int access_flags,
|
||||
myf MyFlags);
|
||||
extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
|
||||
extern uint my_read(File Filedes,byte *Buffer,uint Count,myf MyFlags);
|
||||
extern uint my_pread(File Filedes,byte *Buffer,uint Count,my_off_t offset,
|
||||
myf MyFlags);
|
||||
|
@ -411,7 +412,7 @@ extern int my_printf_error _VARARGS((uint my_err, const char *format,
|
|||
__attribute__ ((format (printf, 2, 4))));
|
||||
extern int my_vsnprintf( char *str, size_t n,
|
||||
const char *format, va_list ap );
|
||||
|
||||
extern int my_snprintf(char* to, size_t n, const char* fmt, ...);
|
||||
extern int my_message(uint my_err, const char *str,myf MyFlags);
|
||||
extern int my_message_no_curses(uint my_err, const char *str,myf MyFlags);
|
||||
extern int my_message_curses(uint my_err, const char *str,myf MyFlags);
|
||||
|
@ -421,8 +422,14 @@ extern int my_redel(const char *from, const char *to, int MyFlags);
|
|||
extern int my_copystat(const char *from, const char *to, int MyFlags);
|
||||
extern my_string my_filename(File fd);
|
||||
|
||||
#ifndef THREAD
|
||||
extern void dont_break(void);
|
||||
extern void allow_break(void);
|
||||
#else
|
||||
#define dont_break()
|
||||
#define allow_break()
|
||||
#endif
|
||||
|
||||
extern void my_remember_signal(int signal_number,sig_handler (*func)(int));
|
||||
extern void caseup(my_string str,uint length);
|
||||
extern void casedn(my_string str,uint length);
|
||||
|
|
|
@ -14,13 +14,19 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
pthread_key(struct st_my_thread_var*, THR_KEY_mysys);
|
||||
#else
|
||||
pthread_key(struct st_my_thread_var, THR_KEY_mysys);
|
||||
#endif
|
||||
#endif /* USE_TLS */
|
||||
pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
|
||||
THR_LOCK_lock,THR_LOCK_isam,THR_LOCK_myisam,THR_LOCK_heap,
|
||||
THR_LOCK_net, THR_LOCK_charset;
|
||||
#ifndef HAVE_LOCALTIME_R
|
||||
pthread_mutex_t LOCK_localtime_r;
|
||||
#endif
|
||||
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
||||
pthread_mutexattr_t my_fast_mutexattr;
|
||||
#endif
|
||||
#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
|
||||
pthread_mutexattr_t my_errchk_mutexattr;
|
||||
#endif
|
||||
|
||||
/* FIXME Note. TlsAlloc does not set an auto destructor, so
|
||||
the function my_thread_global_free must be called from
|
||||
|
@ -33,20 +39,30 @@ my_bool my_thread_global_init(void)
|
|||
fprintf(stderr,"Can't initialize threads: error %d\n",errno);
|
||||
exit(1);
|
||||
}
|
||||
pthread_mutex_init(&THR_LOCK_malloc,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_open,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_keycache,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_lock,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_isam,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_myisam,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_heap,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_net,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_charset,NULL);
|
||||
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
||||
pthread_mutexattr_init(&my_fast_mutexattr);
|
||||
pthread_mutexattr_setkind_np(&my_fast_mutexattr,PTHREAD_MUTEX_ADAPTIVE_NP);
|
||||
#endif
|
||||
#ifdef PPTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
|
||||
pthread_mutexattr_init(&my_errchk_mutexattr);
|
||||
pthread_mutexattr_setkind_np(&my_errchk_mutexattr,
|
||||
PTHREAD_MUTEX_ERRORCHECK_NP);
|
||||
#endif
|
||||
|
||||
pthread_mutex_init(&THR_LOCK_malloc,MY_MUTEX_INIT_FAST);
|
||||
pthread_mutex_init(&THR_LOCK_open,MY_MUTEX_INIT_FAST);
|
||||
pthread_mutex_init(&THR_LOCK_keycache,MY_MUTEX_INIT_FAST);
|
||||
pthread_mutex_init(&THR_LOCK_lock,MY_MUTEX_INIT_FAST);
|
||||
pthread_mutex_init(&THR_LOCK_isam,MY_MUTEX_INIT_SLOW);
|
||||
pthread_mutex_init(&THR_LOCK_myisam,MY_MUTEX_INIT_SLOW);
|
||||
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_charset,MY_MUTEX_INIT_FAST);
|
||||
#ifdef __WIN__
|
||||
win_pthread_init();
|
||||
#endif
|
||||
#ifndef HAVE_LOCALTIME_R
|
||||
pthread_mutex_init(&LOCK_localtime_r,NULL);
|
||||
pthread_mutex_init(&LOCK_localtime_r,MY_MUTEX_INIT_SLOW);
|
||||
#endif
|
||||
return my_thread_init();
|
||||
}
|
||||
|
@ -56,6 +72,12 @@ void my_thread_global_end(void)
|
|||
#if defined(USE_TLS)
|
||||
(void) TlsFree(THR_KEY_mysys);
|
||||
#endif
|
||||
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
||||
pthread_mutexattr_destroy(&my_fast_mutexattr);
|
||||
#endif
|
||||
#ifdef PPTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
|
||||
pthread_mutexattr_destroy(&my_errchk_mutexattr);
|
||||
#endif
|
||||
}
|
||||
|
||||
static long thread_id=0;
|
||||
|
@ -100,7 +122,7 @@ my_bool my_thread_init(void)
|
|||
tmp= &THR_KEY_mysys;
|
||||
#endif
|
||||
tmp->id= ++thread_id;
|
||||
pthread_mutex_init(&tmp->mutex,NULL);
|
||||
pthread_mutex_init(&tmp->mutex,MY_MUTEX_INIT_FAST);
|
||||
pthread_cond_init(&tmp->suspend, NULL);
|
||||
#if !defined(__WIN__) || defined(USE_TLS) || ! defined(SAFE_MUTEX)
|
||||
pthread_mutex_unlock(&THR_LOCK_lock);
|
||||
|
@ -166,14 +188,14 @@ long my_thread_id()
|
|||
}
|
||||
|
||||
#ifdef DBUG_OFF
|
||||
char *my_thread_name(void)
|
||||
const char *my_thread_name(void)
|
||||
{
|
||||
return "no_name";
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
char *my_thread_name(void)
|
||||
const char *my_thread_name(void)
|
||||
{
|
||||
char name_buff[100];
|
||||
struct st_my_thread_var *tmp=my_thread_var;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* Copyright Abandoned. Public domain, no warranty, etc. */
|
||||
/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
|
||||
This file is public domain and comes with NO WARRANTY of any kind */
|
||||
|
||||
/*****************************************************************************
|
||||
** Simulation of posix threads calls for WIN95 and NT
|
||||
|
@ -24,7 +25,7 @@ struct pthread_map
|
|||
|
||||
void win_pthread_init(void)
|
||||
{
|
||||
pthread_mutex_init(&THR_LOCK_thread,NULL);
|
||||
pthread_mutex_init(&THR_LOCK_thread,MY_MUTEX_INIT_FAST);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -6,6 +6,14 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
#ifndef _mysql_h
|
||||
#define _mysql_h
|
||||
|
||||
#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */
|
||||
#undef WIN
|
||||
#undef _WIN
|
||||
#undef _WIN32
|
||||
#undef _WIN64
|
||||
#undef __WIN__
|
||||
#endif
|
||||
|
||||
#ifndef MYSQL_SERVER
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -215,12 +223,11 @@ MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
|
|||
void STDCALL mysql_close(MYSQL *sock);
|
||||
int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
|
||||
int STDCALL mysql_query(MYSQL *mysql, const char *q);
|
||||
int STDCALL mysql_send_query(MYSQL *mysql, const char *q);
|
||||
int STDCALL mysql_reap_query(MYSQL *mysql);
|
||||
int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
|
||||
unsigned int length);
|
||||
int STDCALL mysql_read_query_result(MYSQL *mysql);
|
||||
int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
|
||||
unsigned int length);
|
||||
int STDCALL mysql_real_send_query(MYSQL *mysql, const char *q,
|
||||
unsigned int len);
|
||||
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
|
||||
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
|
||||
int STDCALL mysql_shutdown(MYSQL *mysql);
|
||||
|
|
|
@ -76,7 +76,7 @@ enum enum_server_command {COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
|
|||
#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
|
||||
#define CLIENT_SSL 2048 /* Switch to SSL after handshake */
|
||||
#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
|
||||
#define CLIENT_TRANSACTIONS 8196 /* Client knows about transactions */
|
||||
#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
|
||||
|
||||
#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
|
||||
#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
|
||||
|
|
|
@ -7,14 +7,18 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
#include <custom_conf.h>
|
||||
#else
|
||||
#define PROTOCOL_VERSION 10
|
||||
#define MYSQL_SERVER_VERSION "3.23.32"
|
||||
#define MYSQL_SERVER_VERSION "3.23.39"
|
||||
#define MYSQL_SERVER_SUFFIX ""
|
||||
#define FRM_VER 6
|
||||
#define MYSQL_VERSION_ID 32332
|
||||
#define MYSQL_PORT 3306
|
||||
#define MYSQL_VERSION_ID 32339
|
||||
|
||||
/* This is defined at configure time and found in main/php_config.h */
|
||||
/* #define MYSQL_UNIX_ADDR "/tmp/mysql.sock" */
|
||||
#ifndef MYSQL_PORT
|
||||
#define MYSQL_PORT 3306
|
||||
#endif
|
||||
|
||||
#ifndef MYSQL_UNIX_ADDR
|
||||
#define MYSQL_UNIX_ADDR "/tmp/mysql.sock"
|
||||
#endif
|
||||
|
||||
/* mysqld compile time options */
|
||||
#ifndef MYSQL_CHARSET
|
||||
|
|
|
@ -198,4 +198,14 @@
|
|||
#define ER_CRASHED_ON_REPAIR 1195
|
||||
#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196
|
||||
#define ER_TRANS_CACHE_FULL 1197
|
||||
#define ER_ERROR_MESSAGES 198
|
||||
#define ER_SLAVE_MUST_STOP 1198
|
||||
#define ER_SLAVE_NOT_RUNNING 1199
|
||||
#define ER_BAD_SLAVE 1200
|
||||
#define ER_MASTER_INFO 1201
|
||||
#define ER_SLAVE_THREAD 1202
|
||||
#define ER_TOO_MANY_USER_CONNECTIONS 1203
|
||||
#define ER_SET_CONSTANTS_ONLY 1204
|
||||
#define ER_LOCK_WAIT_TIMEOUT 1205
|
||||
#define ER_LOCK_TABLE_FULL 1206
|
||||
#define ER_READ_ONLY_TRANSACTION 1207
|
||||
#define ER_ERROR_MESSAGES 208
|
||||
|
|
|
@ -8,7 +8,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#define GLOB 0 /* Error maps */
|
||||
#define GLOBERRS 24 /* Max number of error messages in map's */
|
||||
#define GLOBERRS 27 /* Max number of error messages in map's */
|
||||
#define EE(X) globerrs[ X ] /* Defines to add error to right map */
|
||||
|
||||
extern const char * NEAR globerrs[]; /* my_error_messages is here */
|
||||
|
@ -37,6 +37,9 @@ extern const char * NEAR globerrs[]; /* my_error_messages is here */
|
|||
#define EE_CANT_MKDIR 21
|
||||
#define EE_UNKNOWN_CHARSET 22
|
||||
#define EE_OUT_OF_FILERESOURCES 23
|
||||
#define EE_CANT_READLINK 24
|
||||
#define EE_CANT_SYMLINK 25
|
||||
#define EE_REALPATH 26
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
#ifdef THREAD
|
||||
extern pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
|
||||
THR_LOCK_lock,THR_LOCK_isam,THR_LOCK_net,THR_LOCK_charset;
|
||||
extern pthread_mutex_t LOCK_bitmap;
|
||||
#else /* THREAD */
|
||||
#define pthread_mutex_lock(A)
|
||||
#define pthread_mutex_unlock(A)
|
||||
|
|
|
@ -20,7 +20,6 @@ This file is public domain and comes with NO WARRANTY of any kind */
|
|||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <violite.h>
|
||||
|
||||
#ifdef MYSQL_SERVER
|
||||
ulong max_allowed_packet=65536;
|
||||
|
|
|
@ -29,19 +29,8 @@ int safe_mutex_init(safe_mutex_t *mp,
|
|||
const pthread_mutexattr_t *attr __attribute__((unused)))
|
||||
{
|
||||
bzero((char*) mp,sizeof(*mp));
|
||||
#ifdef HAVE_LINUXTHREADS /* Some extra safety */
|
||||
{
|
||||
pthread_mutexattr_t tmp;
|
||||
pthread_mutexattr_init(&tmp);
|
||||
pthread_mutexattr_setkind_np(&tmp,PTHREAD_MUTEX_ERRORCHECK_NP);
|
||||
pthread_mutex_init(&mp->global,&tmp);
|
||||
pthread_mutex_init(&mp->mutex, &tmp);
|
||||
pthread_mutexattr_destroy(&tmp);
|
||||
}
|
||||
#else
|
||||
pthread_mutex_init(&mp->global,NULL);
|
||||
pthread_mutex_init(&mp->global,MY_MUTEX_INIT_ERRCHK);
|
||||
pthread_mutex_init(&mp->mutex,attr);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ int find_type(my_string x, TYPELIB *typelib, uint full_name)
|
|||
if (! *i)
|
||||
DBUG_RETURN(pos+1);
|
||||
}
|
||||
if (! *i)
|
||||
if (! *i && (!*j || !(full_name & 1)))
|
||||
{
|
||||
find++;
|
||||
findpos=pos;
|
||||
|
|
|
@ -10,13 +10,13 @@ $| = 1;
|
|||
my $command = shift || usage();
|
||||
$command =~ /^--(?:update|huh|restore)$/ or usage();
|
||||
|
||||
my $from = shift || '/users/tim/my/work';
|
||||
my $from = shift || '/my/mysql';
|
||||
my @source_dirs = qw/dbug strings mysys libmysql include/;
|
||||
my $source_re = qr/\.(?:cc?|h)$/;
|
||||
my %skip = (
|
||||
'ctype_autoconf.c' => 1,
|
||||
'ctype_extra_sources.c' => 1,
|
||||
'my_config.h' => 1,
|
||||
'ctype_autoconf.c' => 1, # PHP uses a pre-made one
|
||||
'ctype_extra_sources.c' => 1, # same here
|
||||
'my_config.h' => 1, # we use php_config.h
|
||||
);
|
||||
|
||||
opendir D, "."
|
||||
|
@ -75,6 +75,13 @@ sub usage
|
|||
usage: $0 --update [mysql-source-dir]
|
||||
$0 --huh
|
||||
$0 --restore
|
||||
|
||||
Typical use is:
|
||||
\$ $0 --update 2>&1 > /tmp/php-update.diff
|
||||
\$ @{[$ENV{EDITOR}||'vi']} /tmp/php-update.diff #does it look okay?
|
||||
\$ Monkey around a bit
|
||||
\$ cvs diff -u | less # does this look okay?
|
||||
\$ rm *.orig
|
||||
EOF
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue