Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
b121b7ac
Unverified
Commit
b121b7ac
authored
Jun 22, 2018
by
Edward Thomson
Committed by
GitHub
Jun 22, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #4411 from pks-t/pks/config-parse-cleanups
Config parser cleanups
parents
e212011b
e1e90dcc
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
41 deletions
+41
-41
src/config_file.c
+12
-18
src/config_parse.c
+27
-21
src/config_parse.h
+2
-2
No files found.
src/config_file.c
View file @
b121b7ac
...
@@ -876,10 +876,8 @@ static char *escape_value(const char *ptr)
...
@@ -876,10 +876,8 @@ static char *escape_value(const char *ptr)
ptr
++
;
ptr
++
;
}
}
if
(
git_buf_oom
(
&
buf
))
{
if
(
git_buf_oom
(
&
buf
))
git_buf_dispose
(
&
buf
);
return
NULL
;
return
NULL
;
}
return
git_buf_detach
(
&
buf
);
return
git_buf_detach
(
&
buf
);
}
}
...
@@ -1022,8 +1020,8 @@ static int parse_conditional_include(git_config_parser *reader,
...
@@ -1022,8 +1020,8 @@ static int parse_conditional_include(git_config_parser *reader,
static
int
read_on_variable
(
static
int
read_on_variable
(
git_config_parser
*
reader
,
git_config_parser
*
reader
,
const
char
*
current_section
,
const
char
*
current_section
,
char
*
var_name
,
c
onst
c
har
*
var_name
,
char
*
var_value
,
c
onst
c
har
*
var_value
,
const
char
*
line
,
const
char
*
line
,
size_t
line_len
,
size_t
line_len
,
void
*
data
)
void
*
data
)
...
@@ -1031,24 +1029,24 @@ static int read_on_variable(
...
@@ -1031,24 +1029,24 @@ static int read_on_variable(
diskfile_parse_state
*
parse_data
=
(
diskfile_parse_state
*
)
data
;
diskfile_parse_state
*
parse_data
=
(
diskfile_parse_state
*
)
data
;
git_buf
buf
=
GIT_BUF_INIT
;
git_buf
buf
=
GIT_BUF_INIT
;
git_config_entry
*
entry
;
git_config_entry
*
entry
;
const
char
*
c
;
int
result
=
0
;
int
result
=
0
;
GIT_UNUSED
(
line
);
GIT_UNUSED
(
line
);
GIT_UNUSED
(
line_len
);
GIT_UNUSED
(
line_len
);
git__strtolower
(
var_name
);
git_buf_puts
(
&
buf
,
current_section
);
git_buf_printf
(
&
buf
,
"%s.%s"
,
current_section
,
var_name
);
git_buf_putc
(
&
buf
,
'.'
);
git__free
(
var_name
);
for
(
c
=
var_name
;
*
c
;
c
++
)
git_buf_putc
(
&
buf
,
git__tolower
(
*
c
));
if
(
git_buf_oom
(
&
buf
))
{
if
(
git_buf_oom
(
&
buf
))
git__free
(
var_value
);
return
-
1
;
return
-
1
;
}
entry
=
git__calloc
(
1
,
sizeof
(
git_config_entry
));
entry
=
git__calloc
(
1
,
sizeof
(
git_config_entry
));
GITERR_CHECK_ALLOC
(
entry
);
GITERR_CHECK_ALLOC
(
entry
);
entry
->
name
=
git_buf_detach
(
&
buf
);
entry
->
name
=
git_buf_detach
(
&
buf
);
entry
->
value
=
var_value
;
entry
->
value
=
var_value
?
git__strdup
(
var_value
)
:
NULL
;
entry
->
level
=
parse_data
->
level
;
entry
->
level
=
parse_data
->
level
;
entry
->
include_depth
=
parse_data
->
depth
;
entry
->
include_depth
=
parse_data
->
depth
;
...
@@ -1065,7 +1063,6 @@ static int read_on_variable(
...
@@ -1065,7 +1063,6 @@ static int read_on_variable(
result
=
parse_conditional_include
(
reader
,
parse_data
,
result
=
parse_conditional_include
(
reader
,
parse_data
,
entry
->
name
,
entry
->
value
);
entry
->
name
,
entry
->
value
);
return
result
;
return
result
;
}
}
...
@@ -1249,8 +1246,8 @@ static int write_on_section(
...
@@ -1249,8 +1246,8 @@ static int write_on_section(
static
int
write_on_variable
(
static
int
write_on_variable
(
git_config_parser
*
reader
,
git_config_parser
*
reader
,
const
char
*
current_section
,
const
char
*
current_section
,
char
*
var_name
,
c
onst
c
har
*
var_name
,
char
*
var_value
,
c
onst
c
har
*
var_value
,
const
char
*
line
,
const
char
*
line
,
size_t
line_len
,
size_t
line_len
,
void
*
data
)
void
*
data
)
...
@@ -1279,9 +1276,6 @@ static int write_on_variable(
...
@@ -1279,9 +1276,6 @@ static int write_on_variable(
if
(
has_matched
&&
write_data
->
preg
!=
NULL
)
if
(
has_matched
&&
write_data
->
preg
!=
NULL
)
has_matched
=
(
regexec
(
write_data
->
preg
,
var_value
,
0
,
NULL
,
0
)
==
0
);
has_matched
=
(
regexec
(
write_data
->
preg
,
var_value
,
0
,
NULL
,
0
)
==
0
);
git__free
(
var_name
);
git__free
(
var_value
);
/* If this isn't the name/value we're looking for, simply dump the
/* If this isn't the name/value we're looking for, simply dump the
* existing data back out and continue on.
* existing data back out and continue on.
*/
*/
...
...
src/config_parse.c
View file @
b121b7ac
...
@@ -404,22 +404,21 @@ static int parse_name(
...
@@ -404,22 +404,21 @@ static int parse_name(
static
int
parse_variable
(
git_config_parser
*
reader
,
char
**
var_name
,
char
**
var_value
)
static
int
parse_variable
(
git_config_parser
*
reader
,
char
**
var_name
,
char
**
var_value
)
{
{
const
char
*
value_start
=
NULL
;
const
char
*
value_start
=
NULL
;
char
*
line
;
char
*
line
=
NULL
,
*
name
=
NULL
,
*
value
=
NULL
;
int
quote_count
;
int
quote_count
,
error
;
bool
multiline
;
bool
multiline
;
*
var_name
=
NULL
;
*
var_value
=
NULL
;
git_parse_advance_ws
(
&
reader
->
ctx
);
git_parse_advance_ws
(
&
reader
->
ctx
);
line
=
git__strndup
(
reader
->
ctx
.
line
,
reader
->
ctx
.
line_len
);
line
=
git__strndup
(
reader
->
ctx
.
line
,
reader
->
ctx
.
line_len
);
if
(
line
==
NULL
)
GITERR_CHECK_ALLOC
(
line
);
return
-
1
;
quote_count
=
strip_comments
(
line
,
0
);
quote_count
=
strip_comments
(
line
,
0
);
/* If there is no value, boolean true is assumed */
if
((
error
=
parse_name
(
&
name
,
&
value_start
,
reader
,
line
))
<
0
)
*
var_value
=
NULL
;
goto
out
;
if
(
parse_name
(
var_name
,
&
value_start
,
reader
,
line
)
<
0
)
goto
on_error
;
/*
/*
* Now, let's try to parse the value
* Now, let's try to parse the value
...
@@ -428,30 +427,34 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
...
@@ -428,30 +427,34 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
while
(
git__isspace
(
value_start
[
0
]))
while
(
git__isspace
(
value_start
[
0
]))
value_start
++
;
value_start
++
;
if
(
unescape_line
(
var_value
,
&
multiline
,
value_start
,
0
)
<
0
)
if
(
(
error
=
unescape_line
(
&
value
,
&
multiline
,
value_start
,
0
)
)
<
0
)
goto
o
n_error
;
goto
o
ut
;
if
(
multiline
)
{
if
(
multiline
)
{
git_buf
multi_value
=
GIT_BUF_INIT
;
git_buf
multi_value
=
GIT_BUF_INIT
;
git_buf_attach
(
&
multi_value
,
*
var_
value
,
0
);
git_buf_attach
(
&
multi_value
,
value
,
0
);
if
(
parse_multiline_variable
(
reader
,
&
multi_value
,
quote_count
)
<
0
||
if
(
parse_multiline_variable
(
reader
,
&
multi_value
,
quote_count
)
<
0
||
git_buf_oom
(
&
multi_value
))
{
git_buf_oom
(
&
multi_value
))
{
error
=
-
1
;
git_buf_dispose
(
&
multi_value
);
git_buf_dispose
(
&
multi_value
);
goto
o
n_error
;
goto
o
ut
;
}
}
*
var_
value
=
git_buf_detach
(
&
multi_value
);
value
=
git_buf_detach
(
&
multi_value
);
}
}
}
}
git__free
(
line
);
*
var_name
=
name
;
return
0
;
*
var_value
=
value
;
name
=
NULL
;
value
=
NULL
;
on_error
:
out
:
git__free
(
*
var_name
);
git__free
(
name
);
git__free
(
value
);
git__free
(
line
);
git__free
(
line
);
return
-
1
;
return
error
;
}
}
int
git_config_parse
(
int
git_config_parse
(
...
@@ -463,7 +466,7 @@ int git_config_parse(
...
@@ -463,7 +466,7 @@ int git_config_parse(
void
*
data
)
void
*
data
)
{
{
git_parse_ctx
*
ctx
;
git_parse_ctx
*
ctx
;
char
*
current_section
=
NULL
,
*
var_name
,
*
var_value
;
char
*
current_section
=
NULL
,
*
var_name
=
NULL
,
*
var_value
=
NULL
;
int
result
=
0
;
int
result
=
0
;
ctx
=
&
parser
->
ctx
;
ctx
=
&
parser
->
ctx
;
...
@@ -508,7 +511,10 @@ int git_config_parse(
...
@@ -508,7 +511,10 @@ int git_config_parse(
default
:
/* assume variable declaration */
default
:
/* assume variable declaration */
if
((
result
=
parse_variable
(
parser
,
&
var_name
,
&
var_value
))
==
0
&&
on_variable
)
{
if
((
result
=
parse_variable
(
parser
,
&
var_name
,
&
var_value
))
==
0
&&
on_variable
)
{
result
=
on_variable
(
parser
,
current_section
,
var_name
,
var_value
,
line_start
,
line_len
,
data
);
result
=
on_variable
(
parser
,
current_section
,
var_name
,
var_value
,
line_start
,
line_len
,
data
);
git__free
(
var_name
);
git__free
(
var_value
);
}
}
break
;
break
;
}
}
...
...
src/config_parse.h
View file @
b121b7ac
...
@@ -36,8 +36,8 @@ typedef int (*git_config_parser_section_cb)(
...
@@ -36,8 +36,8 @@ typedef int (*git_config_parser_section_cb)(
typedef
int
(
*
git_config_parser_variable_cb
)(
typedef
int
(
*
git_config_parser_variable_cb
)(
git_config_parser
*
parser
,
git_config_parser
*
parser
,
const
char
*
current_section
,
const
char
*
current_section
,
char
*
var_name
,
c
onst
c
har
*
var_name
,
char
*
var_value
,
c
onst
c
har
*
var_value
,
const
char
*
line
,
const
char
*
line
,
size_t
line_len
,
size_t
line_len
,
void
*
data
);
void
*
data
);
...
...
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