Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
cellframe-sdk
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Code
Merge requests
16
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cellframe
cellframe-sdk
Commits
640eb6f5
Commit
640eb6f5
authored
5 years ago
by
Dmitriy A. Gerasimov
Browse files
Options
Downloads
Patches
Plain Diff
[*] Some renames
[*] Fixed possible buffer overflow [*] Duplicated output to file and to stdout
parent
7dc27173
No related branches found
No related tags found
1 merge request
!24
Support 3689
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/dap_common.c
+35
-29
35 additions, 29 deletions
src/dap_common.c
with
35 additions
and
29 deletions
src/dap_common.c
+
35
−
29
View file @
640eb6f5
...
@@ -72,7 +72,7 @@
...
@@ -72,7 +72,7 @@
#define LOG_TAG "dap_common"
#define LOG_TAG "dap_common"
static
const
char
*
log_level_tag
[
16
]
=
{
static
const
char
*
s_
log_level_tag
[
16
]
=
{
" [DBG] "
,
// L_DEBUG = 0
" [DBG] "
,
// L_DEBUG = 0
" [INF] "
,
// L_INFO = 1,
" [INF] "
,
// L_INFO = 1,
" [ * ] "
,
// L_NOTICE = 2,
" [ * ] "
,
// L_NOTICE = 2,
...
@@ -156,13 +156,13 @@ static volatile int count = 0;
...
@@ -156,13 +156,13 @@ static volatile int count = 0;
static
pthread_t
s_log_thread
=
0
;
static
pthread_t
s_log_thread
=
0
;
static
void
*
s_log_thread_proc
(
void
*
arg
);
static
void
*
s_log_thread_proc
(
void
*
arg
);
typedef
struct
log_str
{
typedef
struct
log_str
_t
{
char
str
[
400
];
char
str
[
400
];
unsigned
int
offset
;
unsigned
int
offset
;
struct
log_str
*
prev
,
*
next
;
struct
log_str
_t
*
prev
,
*
next
;
}
log_str
;
}
log_str
_t
;
static
log_str
*
log_buffer
=
NULL
;
static
log_str
_t
*
log_buffer
=
NULL
;
DAP_STATIC_INLINE
void
s_update_log_time
(
char
*
a_datetime_str
)
{
DAP_STATIC_INLINE
void
s_update_log_time
(
char
*
a_datetime_str
)
{
time_t
t
=
time
(
NULL
);
time_t
t
=
time
(
NULL
);
...
@@ -201,18 +201,20 @@ void dap_set_log_tag_width(size_t a_width) {
...
@@ -201,18 +201,20 @@ void dap_set_log_tag_width(size_t a_width) {
* @return
* @return
*/
*/
int
dap_common_init
(
const
char
*
a_console_title
,
const
char
*
a_log_filename
)
{
int
dap_common_init
(
const
char
*
a_console_title
,
const
char
*
a_log_filename
)
{
// init randomer
srand
(
(
unsigned
int
)
time
(
NULL
)
);
srand
(
(
unsigned
int
)
time
(
NULL
)
);
/*
#ifdef _WIN32
#
if
def _WIN32
if
(
a_console_title
)
SetupConsole
(
a_console_title
,
L"Lucida Console"
,
12
,
20
);
SetupConsole
(
a_console_title
,
L"Lucida Console"
,
12
,
20
);
#endif
#else
*/
(
void
)
a_console_title
;
#endif
strncpy
(
s_log_tag_fmt_str
,
"[%s]
\t
"
,
sizeof
(
s_log_tag_fmt_str
));
strncpy
(
s_log_tag_fmt_str
,
"[%s]
\t
"
,
sizeof
(
s_log_tag_fmt_str
));
for
(
int
i
=
0
;
i
<
16
;
++
i
)
s_ansi_seq_color_len
[
i
]
=
(
unsigned
int
)
strlen
(
s_ansi_seq_color
[
i
]);
if
(
a_log_filename
)
{
if
(
a_log_filename
)
{
return
0
;
for
(
int
i
=
0
;
i
<
16
;
++
i
)
s_ansi_seq_color_len
[
i
]
=
strlen
(
s_ansi_seq_color
[
i
]);
s_log_file
=
fopen
(
a_log_filename
,
"a"
);
s_log_file
=
fopen
(
a_log_filename
,
"a"
);
if
(
s_log_file
==
NULL
)
{
if
(
s_log_file
==
NULL
)
{
dap_fprintf
(
stderr
,
"Can't open log file %s to append
\n
"
,
a_log_filename
);
dap_fprintf
(
stderr
,
"Can't open log file %s to append
\n
"
,
a_log_filename
);
...
@@ -246,24 +248,28 @@ static void *s_log_thread_proc(void *arg) {
...
@@ -246,24 +248,28 @@ static void *s_log_thread_proc(void *arg) {
for
(
;
count
==
0
;
)
{
for
(
;
count
==
0
;
)
{
pthread_cond_wait
(
&
s_log_cond
,
&
s_log_mutex
);
pthread_cond_wait
(
&
s_log_cond
,
&
s_log_mutex
);
}
}
log_str
*
elem
,
*
tmp
;
log_str
_t
*
elem
,
*
tmp
;
if
(
s_log_file
)
{
if
(
s_log_file
)
{
if
(
!
dap_file_test
(
s_log_file_path
))
{
if
(
!
dap_file_test
(
s_log_file_path
))
{
fclose
(
s_log_file
);
fclose
(
s_log_file
);
s_log_file
=
fopen
(
s_log_file_path
,
"a"
);
s_log_file
=
fopen
(
s_log_file_path
,
"a"
);
}
}
if
(
s_log_file
)
{
DL_FOREACH_SAFE
(
log_buffer
,
elem
,
tmp
)
{
fwrite
(
elem
->
str
+
elem
->
offset
,
strlen
(
elem
->
str
)
-
elem
->
offset
,
1
,
s_log_file
);
fwrite
(
elem
->
str
+
elem
->
offset
,
strlen
(
elem
->
str
)
-
elem
->
offset
,
1
,
stdout
);
DL_DELETE
(
log_buffer
,
elem
);
DAP_FREE
(
elem
);
--
count
;
fflush
(
s_log_file
);
fflush
(
stdout
);
}
}
}
}
DL_FOREACH_SAFE
(
log_buffer
,
elem
,
tmp
)
{
if
(
s_log_file
)
fwrite
(
elem
->
str
+
elem
->
offset
,
strlen
(
elem
->
str
)
-
elem
->
offset
,
1
,
s_log_file
);
fwrite
(
elem
->
str
,
strlen
(
elem
->
str
),
1
,
stdout
);
DL_DELETE
(
log_buffer
,
elem
);
DAP_FREE
(
elem
);
--
count
;
if
(
s_log_file
)
fflush
(
s_log_file
);
fflush
(
stdout
);
}
pthread_mutex_unlock
(
&
s_log_mutex
);
pthread_mutex_unlock
(
&
s_log_mutex
);
}
}
pthread_exit
(
NULL
);
pthread_exit
(
NULL
);
...
@@ -272,15 +278,15 @@ static void *s_log_thread_proc(void *arg) {
...
@@ -272,15 +278,15 @@ static void *s_log_thread_proc(void *arg) {
void
_log_it
(
const
char
*
log_tag
,
enum
dap_log_level
ll
,
const
char
*
fmt
,
...)
{
void
_log_it
(
const
char
*
log_tag
,
enum
dap_log_level
ll
,
const
char
*
fmt
,
...)
{
if
(
ll
<
dap_log_level
||
ll
>=
16
||
!
log_tag
)
if
(
ll
<
dap_log_level
||
ll
>=
16
||
!
log_tag
)
return
;
return
;
log_str
*
log_string
=
DAP_NEW_Z
(
log_str
);
log_str
_t
*
log_string
=
DAP_NEW_Z
(
log_str
_t
);
strcpy
(
log_string
->
str
,
s_ansi_seq_color
[
ll
]);
str
n
cpy
(
log_string
->
str
,
s_ansi_seq_color
[
ll
]
,
sizeof
(
log_string
->
str
)
-
1
);
log_string
->
offset
=
s_ansi_seq_color_len
[
ll
];
log_string
->
offset
=
s_ansi_seq_color_len
[
ll
];
s_update_log_time
(
log_string
->
str
+
log_string
->
offset
);
s_update_log_time
(
log_string
->
str
+
log_string
->
offset
);
in
t
offset
=
strlen
(
log_string
->
str
);
size_
t
offset
=
strlen
(
log_string
->
str
);
offset
+=
dap_sprintf
(
log_string
->
str
+
offset
,
"%s[%s%s"
,
log_level_tag
[
ll
],
log_tag
,
"] "
);
offset
+=
dap_s
n
printf
(
log_string
->
str
+
offset
,
sizeof
(
log_string
->
str
)
-
offset
,
"%s[%s%s"
,
s_
log_level_tag
[
ll
],
log_tag
,
"] "
);
va_list
va
;
va_list
va
;
va_start
(
va
,
fmt
);
va_start
(
va
,
fmt
);
offset
+=
dap_vsprintf
(
log_string
->
str
+
offset
,
fmt
,
va
);
offset
+=
dap_vs
n
printf
(
log_string
->
str
+
offset
,
sizeof
(
log_string
->
str
)
-
offset
,
fmt
,
va
);
va_end
(
va
);
va_end
(
va
);
memcpy
(
&
log_string
->
str
[
offset
],
"
\n
"
,
1
);
memcpy
(
&
log_string
->
str
[
offset
],
"
\n
"
,
1
);
pthread_mutex_lock
(
&
s_log_mutex
);
pthread_mutex_lock
(
&
s_log_mutex
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment