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
792aa09e
Commit
792aa09e
authored
Sep 23, 2003
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Code cleanup of new patches
mysys/mf_dirname.c: Added comments
parent
58ec8f35
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
93 additions
and
82 deletions
+93
-82
client/mysqlbinlog.cc
client/mysqlbinlog.cc
+58
-67
mysys/default.c
mysys/default.c
+12
-2
mysys/mf_dirname.c
mysys/mf_dirname.c
+23
-13
No files found.
client/mysqlbinlog.cc
View file @
792aa09e
...
...
@@ -20,8 +20,6 @@
#include <time.h>
#include <assert.h>
#include "log_event.h"
#include "include/my_sys.h"
#include "unistd.h"
#define BIN_LOG_HEADER_SIZE 4
#define PROBE_HEADER_LEN (EVENT_LEN_OFFSET+4)
...
...
@@ -75,49 +73,7 @@ class Load_log_processor
int
target_dir_name_len
;
DYNAMIC_ARRAY
file_names
;
const
char
*
create_file
(
Create_file_log_event
*
ce
)
{
const
char
*
bname
=
ce
->
fname
+
ce
->
fname_len
-
1
;
while
(
bname
>
ce
->
fname
&&
bname
[
-
1
]
!=
FN_LIBCHAR
)
bname
--
;
uint
blen
=
ce
->
fname_len
-
(
bname
-
ce
->
fname
);
uint
full_len
=
target_dir_name_len
+
blen
+
9
+
9
+
1
;
char
*
tmp
;
if
(
!
(
tmp
=
my_malloc
(
full_len
,
MYF
(
MY_WME
)))
||
set_dynamic
(
&
file_names
,(
gptr
)
&
ce
,
ce
->
file_id
))
{
die
(
"Could not construct local filename %s%s"
,
target_dir_name
,
bname
);
return
0
;
}
char
*
ptr
=
tmp
;
memcpy
(
ptr
,
target_dir_name
,
target_dir_name_len
);
ptr
+=
target_dir_name_len
;
memcpy
(
ptr
,
bname
,
blen
);
ptr
+=
blen
;
sprintf
(
ptr
,
"-%08x"
,
ce
->
file_id
);
ptr
+=
9
;
uint
version
=
0
;
for
(;;)
{
sprintf
(
ptr
,
"-%08x"
,
version
);
if
(
access
(
tmp
,
F_OK
))
break
;
version
++
;
if
(
version
>
UINT_MAX
)
{
die
(
"Could not construct local filename %s%s"
,
target_dir_name
,
bname
);
return
0
;
}
}
ce
->
set_fname_outside_temp_buf
(
tmp
,
full_len
);
return
tmp
;
}
const
char
*
create_file
(
Create_file_log_event
*
ce
);
void
append_to_file
(
const
char
*
fname
,
int
flags
,
gptr
data
,
uint
size
)
{
...
...
@@ -129,7 +85,6 @@ class Load_log_processor
}
public:
Load_log_processor
()
{
init_dynamic_array
(
&
file_names
,
sizeof
(
Create_file_log_event
*
),
...
...
@@ -142,26 +97,10 @@ public:
delete_dynamic
(
&
file_names
);
}
void
init_by_dir_name
(
const
char
*
atarget_dir_name
)
{
char
*
end
=
strmov
(
target_dir_name
,
atarget_dir_name
);
if
(
end
[
-
1
]
!=
FN_LIBCHAR
)
*
end
++=
FN_LIBCHAR
;
target_dir_name_len
=
end
-
target_dir_name
;
}
void
init_by_file_name
(
const
char
*
file_name
)
void
init_by_dir_name
(
const
char
*
dir
)
{
int
len
=
strlen
(
file_name
);
const
char
*
end
=
file_name
+
len
-
1
;
while
(
end
>
file_name
&&
*
end
!=
FN_LIBCHAR
)
end
--
;
if
(
*
end
!=
FN_LIBCHAR
)
target_dir_name_len
=
0
;
else
{
target_dir_name_len
=
end
-
file_name
+
1
;
memmove
(
target_dir_name
,
file_name
,
target_dir_name_len
);
}
target_dir_name_len
=
(
convert_dirname
(
target_dir_name
,
dir
,
NullS
)
-
target_dir_name
);
}
void
init_by_cur_dir
()
{
...
...
@@ -196,7 +135,8 @@ public:
void
process
(
Create_file_log_event
*
ce
)
{
const
char
*
fname
=
create_file
(
ce
);
append_to_file
(
fname
,
O_CREAT
|
O_EXCL
|
O_BINARY
|
O_WRONLY
,
ce
->
block
,
ce
->
block_len
);
append_to_file
(
fname
,
O_CREAT
|
O_EXCL
|
O_BINARY
|
O_WRONLY
,
ce
->
block
,
ce
->
block_len
);
}
void
process
(
Append_block_log_event
*
ae
)
{
...
...
@@ -204,8 +144,10 @@ public:
*
((
Create_file_log_event
**
)
file_names
.
buffer
+
ae
->
file_id
)
:
0
;
if
(
ce
)
append_to_file
(
ce
->
fname
,
O_APPEND
|
O_BINARY
|
O_WRONLY
,
ae
->
block
,
ae
->
block_len
);
append_to_file
(
ce
->
fname
,
O_APPEND
|
O_BINARY
|
O_WRONLY
,
ae
->
block
,
ae
->
block_len
);
else
{
/*
There is no Create_file event (a bad binlog or a big
--position). Assuming it's a big --position, we just do nothing and
...
...
@@ -213,9 +155,58 @@ public:
*/
fprintf
(
stderr
,
"Warning: ignoring Append_block as there is no \
Create_file event for file_id: %u
\n
"
,
ae
->
file_id
);
}
}
};
const
char
*
Load_log_processor
::
create_file
(
Create_file_log_event
*
ce
)
{
const
char
*
bname
=
ce
->
fname
+
dirname_length
(
ce
->
fname
);
uint
blen
=
ce
->
fname_len
-
(
bname
-
ce
->
fname
);
uint
full_len
=
target_dir_name_len
+
blen
+
9
+
9
+
1
;
uint
version
=
0
;
char
*
tmp
,
*
ptr
;
if
(
!
(
tmp
=
my_malloc
(
full_len
,
MYF
(
MY_WME
)))
||
set_dynamic
(
&
file_names
,(
gptr
)
&
ce
,
ce
->
file_id
))
{
die
(
"Could not construct local filename %s%s"
,
target_dir_name
,
bname
);
return
0
;
}
memcpy
(
tmp
,
target_dir_name
,
target_dir_name_len
);
ptr
=
tmp
+
target_dir_name_len
;
memcpy
(
ptr
,
bname
,
blen
);
ptr
+=
blen
;
ptr
+=
my_sprintf
(
ptr
,(
ptr
,
"-%x"
,
ce
->
file_id
));
/*
Note that this code has a possible race condition if there was was
many simultaneous clients running which tried to create files at the same
time. Fortunately this should never be the case.
A better way to do this would be to use 'create_tmp_file() and avoid this
race condition altogether on the expense of getting more cryptic file
names.
*/
for
(;;)
{
sprintf
(
ptr
,
"-%x"
,
version
);
if
(
access
(
tmp
,
F_OK
))
break
;
/* If we have to try more than 1000 times, something is seriously wrong */
if
(
version
++
>
1000
)
{
die
(
"Could not construct local filename %s%s"
,
target_dir_name
,
bname
);
return
0
;
}
}
ce
->
set_fname_outside_temp_buf
(
tmp
,
full_len
);
return
tmp
;
}
Load_log_processor
load_processor
;
static
struct
my_option
my_long_options
[]
=
...
...
mysys/default.c
View file @
792aa09e
...
...
@@ -375,9 +375,20 @@ static int search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
char
*
value_end
;
for
(
value
++
;
isspace
(
*
value
);
value
++
)
;
value_end
=
strend
(
value
);
/*
We don't have to test for value_end >= value as we know there is
an '=' before
*/
for
(
;
isspace
(
value_end
[
-
1
])
;
value_end
--
)
;
if
(
value_end
<
value
)
/* Empty string */
value_end
=
value
;
/* remove quotes around argument */
if
((
*
value
==
'\"'
||
*
value
==
'\''
)
&&
*
value
==
value_end
[
-
1
])
{
value
++
;
value_end
--
;
}
if
(
!
(
tmp
=
alloc_root
(
alloc
,(
uint
)
(
end
-
ptr
)
+
3
+
(
uint
)
(
value_end
-
value
)
+
1
)))
goto
err
;
...
...
@@ -385,10 +396,9 @@ static int search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
goto
err
;
ptr
=
strnmov
(
strmov
(
tmp
,
"--"
),
ptr
,(
uint
)
(
end
-
ptr
));
*
ptr
++=
'='
;
for
(
;
value
!=
value_end
;
value
++
)
{
if
(
*
value
==
'\"'
||
*
value
==
'\''
)
continue
;
if
(
*
value
==
'\\'
&&
value
!=
value_end
-
1
)
{
switch
(
*++
value
)
{
...
...
mysys/mf_dirname.c
View file @
792aa09e
...
...
@@ -54,19 +54,29 @@ uint dirname_part(my_string to, const char *name)
}
/* dirname */
/*
Convert directory name to use under this system
If MSDOS converts '/' to '\'
If VMS converts '<' to '[' and '>' to ']'
Adds a FN_LIBCHAR to end if the result string if there isn't one
and the last isn't dev_char.
Copies data from 'from' until ASCII(0) for until from == from_end
If you want to use the whole 'from' string, just send NullS as the
last argument.
If the result string is larger than FN_REFLEN -1, then it's cut.
Returns pointer to end \0
*/
/*
Convert directory name to use under this system
SYNPOSIS
convert_dirname()
to Store result here
from Original filename
from_end Pointer at end of filename (normally end \0)
IMPLEMENTATION
If MSDOS converts '/' to '\'
If VMS converts '<' to '[' and '>' to ']'
Adds a FN_LIBCHAR to end if the result string if there isn't one
and the last isn't dev_char.
Copies data from 'from' until ASCII(0) for until from == from_end
If you want to use the whole 'from' string, just send NullS as the
last argument.
If the result string is larger than FN_REFLEN -1, then it's cut.
RETURN
Returns pointer to end \0 in to
*/
#ifndef FN_DEVCHAR
#define FN_DEVCHAR '\0'
/* For easier code */
...
...
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