Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liblongpath-rsync
Project
Project
Details
Activity
Releases
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
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liblongpath
liblongpath-rsync
Commits
36828dae
Commit
36828dae
authored
Jul 27, 2008
by
Wayne Davison
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reorder the static functions to avoid the need for forward declarations.
parent
8880d8ec
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
87 additions
and
106 deletions
+87
-106
loadparm.c
loadparm.c
+87
-106
No files found.
loadparm.c
View file @
36828dae
...
...
@@ -417,22 +417,6 @@ FN_LOCAL_BOOL(lp_transfer_logging, transfer_logging)
FN_LOCAL_BOOL
(
lp_use_chroot
,
use_chroot
)
FN_LOCAL_BOOL
(
lp_write_only
,
write_only
)
/* local prototypes */
static
int
strwicmp
(
char
*
psz1
,
char
*
psz2
);
static
int
map_parameter
(
char
*
parmname
);
static
BOOL
set_boolean
(
BOOL
*
pb
,
char
*
parmvalue
);
static
int
getservicebyname
(
char
*
name
,
service
*
pserviceDest
);
static
void
copy_service
(
service
*
pserviceDest
,
service
*
pserviceSource
);
static
BOOL
do_parameter
(
char
*
parmname
,
char
*
parmvalue
);
static
BOOL
do_section
(
char
*
sectionname
);
/* Initialise a service to the defaults. */
static
void
init_service
(
service
*
pservice
)
{
memset
((
char
*
)
pservice
,
0
,
sizeof
(
service
));
copy_service
(
pservice
,
&
sDefault
);
}
/* Assign a copy of v to *s. Handles NULL strings. *v must
* be initialized when this is called, either to NULL or a malloc'd
* string.
...
...
@@ -453,39 +437,50 @@ static void string_set(char **s, const char *v)
exit_cleanup
(
RERR_MALLOC
);
}
/*
Add a new service to the services array, with defaults set
. */
static
int
add_a_service
(
service
*
pservice
,
char
*
nam
e
)
/*
Copy a service structure to another
. */
static
void
copy_service
(
service
*
pserviceDest
,
service
*
pserviceSourc
e
)
{
int
i
;
service
tservice
;
int
num_to_alloc
=
iNumServices
+
1
;
tservice
=
*
pservice
;
/* it might already exist */
if
(
name
)
{
i
=
getservicebyname
(
name
,
NULL
);
if
(
i
>=
0
)
return
i
;
}
for
(
i
=
0
;
parm_table
[
i
].
label
;
i
++
)
{
if
(
parm_table
[
i
].
ptr
&&
parm_table
[
i
].
class
==
P_LOCAL
)
{
void
*
def_ptr
=
parm_table
[
i
].
ptr
;
void
*
src_ptr
=
((
char
*
)
pserviceSource
)
+
PTR_DIFF
(
def_ptr
,
&
sDefault
);
void
*
dest_ptr
=
((
char
*
)
pserviceDest
)
+
PTR_DIFF
(
def_ptr
,
&
sDefault
);
i
=
iNumServices
;
ServicePtrs
=
realloc_array
(
ServicePtrs
,
service
*
,
num_to_alloc
);
switch
(
parm_table
[
i
].
type
)
{
case
P_BOOL
:
case
P_BOOLREV
:
*
(
BOOL
*
)
dest_ptr
=
*
(
BOOL
*
)
src_ptr
;
break
;
if
(
ServicePtrs
)
pSERVICE
(
iNumServices
)
=
new
(
service
);
case
P_INTEGER
:
case
P_ENUM
:
case
P_OCTAL
:
*
(
int
*
)
dest_ptr
=
*
(
int
*
)
src_ptr
;
break
;
if
(
!
ServicePtrs
||
!
pSERVICE
(
iNumServices
))
return
-
1
;
case
P_CHAR
:
*
(
char
*
)
dest_ptr
=
*
(
char
*
)
src_ptr
;
break
;
iNumServices
++
;
case
P_PATH
:
case
P_STRING
:
string_set
(
dest_ptr
,
*
(
char
**
)
src_ptr
);
break
;
init_service
(
pSERVICE
(
i
));
copy_service
(
pSERVICE
(
i
),
&
tservice
);
if
(
name
)
string_set
(
&
iSERVICE
(
i
).
name
,
name
);
default
:
break
;
}
}
}
}
return
i
;
/* Initialise a service to the defaults. */
static
void
init_service
(
service
*
pservice
)
{
memset
((
char
*
)
pservice
,
0
,
sizeof
(
service
));
copy_service
(
pservice
,
&
sDefault
);
}
/* Do a case-insensitive, whitespace-ignoring string compare. */
...
...
@@ -516,6 +511,53 @@ static int strwicmp(char *psz1, char *psz2)
return
*
psz1
-
*
psz2
;
}
/* Find a service by name. Otherwise works like get_service. */
static
int
getservicebyname
(
char
*
name
,
service
*
pserviceDest
)
{
int
i
;
for
(
i
=
iNumServices
-
1
;
i
>=
0
;
i
--
)
{
if
(
strwicmp
(
iSERVICE
(
i
).
name
,
name
)
==
0
)
{
if
(
pserviceDest
!=
NULL
)
copy_service
(
pserviceDest
,
pSERVICE
(
i
));
break
;
}
}
return
i
;
}
/* Add a new service to the services array, with defaults set. */
static
int
add_a_service
(
char
*
name
)
{
int
i
;
int
num_to_alloc
=
iNumServices
+
1
;
/* it might already exist */
if
(
name
)
{
i
=
getservicebyname
(
name
,
NULL
);
if
(
i
>=
0
)
return
i
;
}
i
=
iNumServices
;
ServicePtrs
=
realloc_array
(
ServicePtrs
,
service
*
,
num_to_alloc
);
if
(
ServicePtrs
)
pSERVICE
(
iNumServices
)
=
new
(
service
);
if
(
!
ServicePtrs
||
!
pSERVICE
(
iNumServices
))
return
-
1
;
iNumServices
++
;
init_service
(
pSERVICE
(
i
));
if
(
name
)
string_set
(
&
iSERVICE
(
i
).
name
,
name
);
return
i
;
}
/* Map a parameter's string representation to something we can use.
* Returns False if the parameter string is not recognised, else TRUE. */
static
int
map_parameter
(
char
*
parmname
)
...
...
@@ -554,63 +596,8 @@ static BOOL set_boolean(BOOL *pb, char *parmvalue)
return
True
;
}
/* Find a service by name. Otherwise works like get_service. */
static
int
getservicebyname
(
char
*
name
,
service
*
pserviceDest
)
{
int
i
;
for
(
i
=
iNumServices
-
1
;
i
>=
0
;
i
--
)
{
if
(
strwicmp
(
iSERVICE
(
i
).
name
,
name
)
==
0
)
{
if
(
pserviceDest
!=
NULL
)
copy_service
(
pserviceDest
,
pSERVICE
(
i
));
break
;
}
}
return
i
;
}
/* Copy a service structure to another. */
static
void
copy_service
(
service
*
pserviceDest
,
service
*
pserviceSource
)
{
int
i
;
for
(
i
=
0
;
parm_table
[
i
].
label
;
i
++
)
{
if
(
parm_table
[
i
].
ptr
&&
parm_table
[
i
].
class
==
P_LOCAL
)
{
void
*
def_ptr
=
parm_table
[
i
].
ptr
;
void
*
src_ptr
=
((
char
*
)
pserviceSource
)
+
PTR_DIFF
(
def_ptr
,
&
sDefault
);
void
*
dest_ptr
=
((
char
*
)
pserviceDest
)
+
PTR_DIFF
(
def_ptr
,
&
sDefault
);
switch
(
parm_table
[
i
].
type
)
{
case
P_BOOL
:
case
P_BOOLREV
:
*
(
BOOL
*
)
dest_ptr
=
*
(
BOOL
*
)
src_ptr
;
break
;
case
P_INTEGER
:
case
P_ENUM
:
case
P_OCTAL
:
*
(
int
*
)
dest_ptr
=
*
(
int
*
)
src_ptr
;
break
;
case
P_CHAR
:
*
(
char
*
)
dest_ptr
=
*
(
char
*
)
src_ptr
;
break
;
case
P_PATH
:
case
P_STRING
:
string_set
(
dest_ptr
,
*
(
char
**
)
src_ptr
);
break
;
default:
break
;
}
}
}
}
/* Process a parameter. */
static
BOOL
lp_do_parameter
(
int
snum
,
char
*
parmname
,
char
*
parmvalue
)
static
BOOL
do_parameter
(
char
*
parmname
,
char
*
parmvalue
)
{
int
parmnum
,
i
;
void
*
parm_ptr
=
NULL
;
/* where we are going to store the result */
...
...
@@ -626,15 +613,14 @@ static BOOL lp_do_parameter(int snum, char *parmname, char *parmvalue)
def_ptr
=
parm_table
[
parmnum
].
ptr
;
/* we might point at a service, the default service or a global */
if
(
snum
<
0
)
if
(
bInGlobalSection
)
parm_ptr
=
def_ptr
;
else
{
if
(
parm_table
[
parmnum
].
class
==
P_GLOBAL
)
{
rprintf
(
FLOG
,
"Global parameter %s found in service section!
\n
"
,
parmname
);
return
True
;
}
parm_ptr
=
((
char
*
)
pSERVICE
(
snum
))
+
PTR_DIFF
(
def_ptr
,
&
sDefault
);
parm_ptr
=
((
char
*
)
pSERVICE
(
iServiceIndex
))
+
PTR_DIFF
(
def_ptr
,
&
sDefault
);
}
/* now switch on the type of variable it is */
...
...
@@ -696,12 +682,6 @@ static BOOL lp_do_parameter(int snum, char *parmname, char *parmvalue)
return
True
;
}
/* Process a parameter. */
static
BOOL
do_parameter
(
char
*
parmname
,
char
*
parmvalue
)
{
return
lp_do_parameter
(
bInGlobalSection
?-
2
:
iServiceIndex
,
parmname
,
parmvalue
);
}
/* Process a new section (rsync module).
* Returns True on success, False on failure. */
static
BOOL
do_section
(
char
*
sectionname
)
...
...
@@ -733,8 +713,9 @@ static BOOL do_section(char *sectionname)
return
False
;
}
if
((
iServiceIndex
=
add_a_service
(
&
sDefault
,
sectionname
))
<
0
)
{
if
((
iServiceIndex
=
add_a_service
(
sectionname
))
<
0
)
{
rprintf
(
FLOG
,
"Failed to add a new module
\n
"
);
bInGlobalSection
=
True
;
return
False
;
}
...
...
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