Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
4b3e443b
Commit
4b3e443b
authored
Dec 19, 2003
by
monty@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/my/mysql-4.1
parents
fcbee7eb
df73dc78
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
254 additions
and
20 deletions
+254
-20
innobase/include/univ.i
innobase/include/univ.i
+9
-6
innobase/include/ut0ut.h
innobase/include/ut0ut.h
+38
-5
innobase/ut/ut0ut.c
innobase/ut/ut0ut.c
+207
-9
No files found.
innobase/include/univ.i
View file @
4b3e443b
...
@@ -65,14 +65,17 @@ Microsoft Visual C++ */
...
@@ -65,14 +65,17 @@ Microsoft Visual C++ */
#
define
HAVE_PWRITE
#
define
HAVE_PWRITE
#
endif
#
endif
/* Apparently in some old SCO Unixes the return type of sprintf is not
#
endif
/* #if (defined(WIN32) || ... */
an integer as it should be according to the modern Posix standard. Because
of that we define sprintf inside InnoDB code as our own function ut_sprintf */
/* On the 64-bit Windows we replace printf with ut_printf, etc. so that
#
undef
sprintf
we can use the %lu format string to print a 64-bit ulint */
#
define
sprintf
ut_sprintf
#
if
defined
(
__WIN__
)
&
&
(defined(WIN64)
||
defined(_WIN64))
#
define
printf
ut_printf
#
define
sprintf
ut_sprintf
#
define
fprintf
ut_fprintf
#
endif
#
endif
/* DEBUG VERSION CONTROL
/* DEBUG VERSION CONTROL
===================== */
===================== */
...
...
innobase/include/ut0ut.h
View file @
4b3e443b
...
@@ -19,14 +19,47 @@ typedef time_t ib_time_t;
...
@@ -19,14 +19,47 @@ typedef time_t ib_time_t;
/************************************************************
/************************************************************
Uses vsprintf to emulate sprintf so that the function always returns
On the 64-bit Windows we substitute the format string
the printed length. Apparently in some old SCO Unixes sprintf did not
%l -> %I64
return the printed length but a pointer to the end of the printed string. */
because we define ulint as unsigned __int64 and lint as __int64 on Windows,
and both the Microsoft and Intel C compilers require the format string
%I64 in that case instead of %l. */
ulint
int
ut_printf
(
/*======*/
/* out: the number of characters written, or
negative in case of an error */
const
char
*
format
,
/* in: format of prints */
...);
/* in: arguments to be printed */
/************************************************************
On the 64-bit Windows we substitute the format string
%l -> %I64
because we define ulint as unsigned __int64 and lint as __int64 on Windows,
and both the Microsoft and Intel C compilers require the format string
%I64 in that case instead of %l. */
int
ut_sprintf
(
ut_sprintf
(
/*=======*/
/*=======*/
char
*
buf
,
/* in/out: buffer where to print */
/* out: the number of characters written, or
negative in case of an error */
char
*
buf
,
/* in: buffer where to print */
const
char
*
format
,
/* in: format of prints */
...);
/* in: arguments to be printed */
/************************************************************
On the 64-bit Windows we substitute the format string
%l -> %I64
because we define ulint as unsigned __int64 and lint as __int64 on Windows,
and both the Microsoft and Intel C compilers require the format string
%I64 in that case instead of %l. */
int
ut_fprintf
(
/*=======*/
/* out: the number of characters written, or
negative in case of an error */
FILE
*
stream
,
/* in: stream where to print */
const
char
*
format
,
/* in: format of prints */
const
char
*
format
,
/* in: format of prints */
...);
/* in: arguments to be printed */
...);
/* in: arguments to be printed */
/************************************************************
/************************************************************
...
...
innobase/ut/ut0ut.c
View file @
4b3e443b
...
@@ -20,26 +20,224 @@ Created 5/11/1994 Heikki Tuuri
...
@@ -20,26 +20,224 @@ Created 5/11/1994 Heikki Tuuri
ibool
ut_always_false
=
FALSE
;
ibool
ut_always_false
=
FALSE
;
/************************************************************
/************************************************************
Uses vsprintf to emulate sprintf so that the function always returns
On the 64-bit Windows we substitute the format string
the printed length. Apparently in some old SCO Unixes sprintf did not
%l -> %I64
return the printed length but a pointer to the end of the printed string. */
because we define ulint as unsigned __int64 and lint as __int64 on Windows,
and both the Microsoft and Intel C compilers require the format string
%I64 in that case instead of %l. */
int
ut_printf
(
/*======*/
/* out: the number of characters written, or
negative in case of an error */
const
char
*
format
,
/* in: format of prints */
...)
/* in: arguments to be printed */
{
va_list
args
;
ulint
len
;
char
*
format_end
;
char
*
newformat
;
char
*
ptr
;
char
*
newptr
;
int
ret
;
char
format_buf_in_stack
[
500
];
len
=
strlen
(
format
);
if
(
len
>
250
)
{
newformat
=
malloc
(
2
*
len
);
}
else
{
newformat
=
format_buf_in_stack
;
}
ulint
format_end
=
(
char
*
)
format
+
len
;
ptr
=
(
char
*
)
format
;
newptr
=
newformat
;
#if defined(__WIN__) && (defined(WIN64) || defined(_WIN64))
/* Replace %l with %I64 if it is not preceded with '\' */
while
(
ptr
<
format_end
)
{
if
(
*
ptr
==
'%'
&&
*
(
ptr
+
1
)
==
'l'
&&
(
ptr
==
format
||
*
(
ptr
-
1
)
!=
'\\'
))
{
memcpy
(
newptr
,
"%I64"
,
4
);
ptr
+=
2
;
newptr
+=
4
;
}
else
{
*
newptr
=
*
ptr
;
ptr
++
;
newptr
++
;
}
}
*
newptr
=
'\0'
;
ut_a
(
newptr
<
newformat
+
2
*
len
);
#else
strcpy
(
newformat
,
format
);
#endif
va_start
(
args
,
format
);
ret
=
vprintf
((
const
char
*
)
newformat
,
args
);
va_end
(
args
);
if
(
newformat
!=
format_buf_in_stack
)
{
free
(
newformat
);
}
return
(
ret
);
}
/************************************************************
On the 64-bit Windows we substitute the format string
%l -> %I64
because we define ulint as unsigned __int64 and lint as __int64 on Windows,
and both the Microsoft and Intel C compilers require the format string
%I64 in that case instead of %l. */
int
ut_sprintf
(
ut_sprintf
(
/*=======*/
/*=======*/
char
*
buf
,
/* in/out: buffer where to print */
/* out: the number of characters written, or
negative in case of an error */
char
*
buf
,
/* in: buffer where to print */
const
char
*
format
,
/* in: format of prints */
const
char
*
format
,
/* in: format of prints */
...)
/* in: arguments to be printed */
...)
/* in: arguments to be printed */
{
{
va_list
args
;
va_list
args
;
ulint
len
;
char
*
format_end
;
char
*
newformat
;
char
*
ptr
;
char
*
newptr
;
int
ret
;
char
format_buf_in_stack
[
500
];
len
=
strlen
(
format
);
if
(
len
>
250
)
{
newformat
=
malloc
(
2
*
len
);
}
else
{
newformat
=
format_buf_in_stack
;
}
format_end
=
(
char
*
)
format
+
len
;
ptr
=
(
char
*
)
format
;
newptr
=
newformat
;
#if defined(__WIN__) && (defined(WIN64) || defined(_WIN64))
/* Replace %l with %I64 if it is not preceded with '\' */
while
(
ptr
<
format_end
)
{
if
(
*
ptr
==
'%'
&&
*
(
ptr
+
1
)
==
'l'
&&
(
ptr
==
format
||
*
(
ptr
-
1
)
!=
'\\'
))
{
memcpy
(
newptr
,
"%I64"
,
4
);
ptr
+=
2
;
newptr
+=
4
;
}
else
{
*
newptr
=
*
ptr
;
ptr
++
;
newptr
++
;
}
}
*
newptr
=
'\0'
;
ut_a
(
newptr
<
newformat
+
2
*
len
);
#else
strcpy
(
newformat
,
format
);
#endif
va_start
(
args
,
format
);
ret
=
vsprintf
(
buf
,
(
const
char
*
)
newformat
,
args
);
va_end
(
args
);
if
(
newformat
!=
format_buf_in_stack
)
{
free
(
newformat
);
}
return
(
ret
);
}
/************************************************************
On the 64-bit Windows we substitute the format string
%l -> %I64
because we define ulint as unsigned __int64 and lint as __int64 on Windows,
and both the Microsoft and Intel C compilers require the format string
%I64 in that case instead of %l. */
int
ut_fprintf
(
/*=======*/
/* out: the number of characters written, or
negative in case of an error */
FILE
*
stream
,
/* in: stream where to print */
const
char
*
format
,
/* in: format of prints */
...)
/* in: arguments to be printed */
{
va_list
args
;
ulint
len
;
char
*
format_end
;
char
*
newformat
;
char
*
ptr
;
char
*
newptr
;
int
ret
;
char
format_buf_in_stack
[
500
];
len
=
strlen
(
format
);
if
(
len
>
250
)
{
newformat
=
malloc
(
2
*
len
);
}
else
{
newformat
=
format_buf_in_stack
;
}
format_end
=
(
char
*
)
format
+
len
;
ptr
=
(
char
*
)
format
;
newptr
=
newformat
;
#if defined(__WIN__) && (defined(WIN64) || defined(_WIN64))
/* Replace %l with %I64 if it is not preceded with '\' */
while
(
ptr
<
format_end
)
{
if
(
*
ptr
==
'%'
&&
*
(
ptr
+
1
)
==
'l'
&&
(
ptr
==
format
||
*
(
ptr
-
1
)
!=
'\\'
))
{
memcpy
(
newptr
,
"%I64"
,
4
);
ptr
+=
2
;
newptr
+=
4
;
}
else
{
*
newptr
=
*
ptr
;
ptr
++
;
newptr
++
;
}
}
*
newptr
=
'\0'
;
ut_a
(
newptr
<
newformat
+
2
*
len
);
#else
strcpy
(
newformat
,
format
);
#endif
va_start
(
args
,
format
);
va_start
(
args
,
format
);
vsprintf
(
buf
,
format
,
args
);
ret
=
vfprintf
(
stream
,
(
const
char
*
)
new
format
,
args
);
va_end
(
args
);
va_end
(
args
);
return
((
ulint
)
strlen
(
buf
));
if
(
newformat
!=
format_buf_in_stack
)
{
free
(
newformat
);
}
return
(
ret
);
}
}
/************************************************************
/************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment