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
8950ac03
Commit
8950ac03
authored
May 07, 2001
by
Andrew Tridgell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
imported new snprintf.c from samba, got rid of slprintf
parent
26ef00bd
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
834 additions
and
717 deletions
+834
-717
acconfig.h
acconfig.h
+2
-0
backup.c
backup.c
+4
-4
clientserver.c
clientserver.c
+1
-1
configure.in
configure.in
+27
-1
exclude.c
exclude.c
+1
-1
generator.c
generator.c
+2
-2
io.c
io.c
+1
-1
snprintf.c
lib/snprintf.c
+770
-653
log.c
log.c
+7
-7
options.c
options.c
+8
-8
receiver.c
receiver.c
+4
-4
rsync.c
rsync.c
+1
-1
socket.c
socket.c
+1
-1
util.c
util.c
+5
-33
No files found.
acconfig.h
View file @
8950ac03
...
...
@@ -14,3 +14,5 @@
#undef HAVE_GETTIMEOFDAY_TZ
#undef HAVE_SOCKETPAIR
#undef HAVE_SECURE_MKSTEMP
#undef HAVE_C99_VSNPRINTF
backup.c
View file @
8950ac03
...
...
@@ -39,7 +39,7 @@ static int make_simple_backup(char *fname)
return
0
;
}
s
l
printf
(
fnamebak
,
sizeof
(
fnamebak
),
"%s%s"
,
fname
,
backup_suffix
);
s
n
printf
(
fnamebak
,
sizeof
(
fnamebak
),
"%s%s"
,
fname
,
backup_suffix
);
if
(
do_rename
(
fname
,
fnamebak
)
!=
0
)
{
/* cygwin (at least version b19) reports EINVAL */
if
(
errno
!=
ENOENT
&&
errno
!=
EINVAL
)
{
...
...
@@ -92,9 +92,9 @@ static int make_bak_dir(char *fname,char *bak_path)
while
(
strncmp
(
bak_path
,
"./"
,
2
)
==
0
)
bak_path
+=
2
;
if
(
bak_path
[
strlen
(
bak_path
)
-
1
]
!=
'/'
)
{
s
l
printf
(
fullpath
,
sizeof
(
fullpath
),
"%s/"
,
bak_path
);
s
n
printf
(
fullpath
,
sizeof
(
fullpath
),
"%s/"
,
bak_path
);
}
else
{
s
l
printf
(
fullpath
,
sizeof
(
fullpath
),
"%s"
,
bak_path
);
s
n
printf
(
fullpath
,
sizeof
(
fullpath
),
"%s"
,
bak_path
);
}
p
=
fullpath
;
q
=&
fullpath
[
strlen
(
fullpath
)];
/* End of bak_path string */
...
...
@@ -208,7 +208,7 @@ static int keep_backup(char *fname)
return
0
;
}
s
l
printf
(
keep_name
,
sizeof
(
keep_name
),
"%s/%s"
,
backup_dir
,
fname
);
s
n
printf
(
keep_name
,
sizeof
(
keep_name
),
"%s/%s"
,
backup_dir
,
fname
);
#ifdef HAVE_MKNOD
...
...
clientserver.c
View file @
8950ac03
...
...
@@ -499,7 +499,7 @@ int daemon_main(void)
rsyserr
(
FLOG
,
errno
,
"failed to create pid file %s"
,
pid_file
);
exit_cleanup
(
RERR_FILEIO
);
}
s
l
printf
(
pidbuf
,
sizeof
(
pidbuf
),
"%d
\n
"
,
pid
);
s
n
printf
(
pidbuf
,
sizeof
(
pidbuf
),
"%d
\n
"
,
pid
);
write
(
fd
,
pidbuf
,
strlen
(
pidbuf
));
close
(
fd
);
}
...
...
configure.in
View file @
8950ac03
...
...
@@ -127,7 +127,7 @@ AC_FUNC_MEMCMP
AC_FUNC_UTIME_NULL
AC_CHECK_FUNCS(waitpid wait4 getcwd strdup strerror chown chmod mknod)
AC_CHECK_FUNCS(fchmod fstat strchr readlink link utime utimes strftime)
AC_CHECK_FUNCS(memmove lchown vsnprintf snprintf setsid glob strpbrk)
AC_CHECK_FUNCS(memmove lchown vsnprintf snprintf
asprintf
setsid glob strpbrk)
AC_CHECK_FUNCS(strlcat strlcpy mtrace)
AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[
...
...
@@ -231,6 +231,32 @@ if test x"$rsync_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
AC_DEFINE(HAVE_GETTIMEOFDAY_TZ)
fi
AC_CACHE_CHECK([for C99 vsnprintf],rsync_cv_HAVE_C99_VSNPRINTF,[
AC_TRY_RUN([
#include <sys/types.h>
#include <stdarg.h>
void foo(const char *format, ...) {
va_list ap;
int len;
char buf[5];
va_start(ap, format);
len = vsnprintf(0, 0, format, ap);
va_end(ap);
if (len != 5) exit(1);
if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
exit(0);
}
main() { foo("hello"); }
],
rsync_cv_HAVE_C99_VSNPRINTF=yes,rsync_cv_HAVE_C99_VSNPRINTF=no,rsync_cv_HAVE_C99_VSNPRINTF=cross)])
if test x"$rsync_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
AC_DEFINE(HAVE_C99_VSNPRINTF)
fi
AC_CACHE_CHECK([for secure mkstemp],rsync_cv_HAVE_SECURE_MKSTEMP,[
AC_TRY_RUN([#include <stdlib.h>
#include <sys/types.h>
...
...
exclude.c
View file @
8950ac03
...
...
@@ -398,7 +398,7 @@ void add_cvs_excludes(void)
add_exclude
(
cvs_ignore_list
[
i
],
0
);
if
((
p
=
getenv
(
"HOME"
))
&&
strlen
(
p
)
<
(
MAXPATHLEN
-
12
))
{
s
l
printf
(
fname
,
sizeof
(
fname
),
"%s/.cvsignore"
,
p
);
s
n
printf
(
fname
,
sizeof
(
fname
),
"%s/.cvsignore"
,
p
);
add_exclude_file
(
fname
,
0
,
0
);
}
...
...
generator.c
View file @
8950ac03
...
...
@@ -56,7 +56,7 @@ static int skip_file(char *fname,
if
(
compare_dest
!=
NULL
)
{
if
(
access
(
fname
,
0
)
!=
0
)
{
s
l
printf
(
fnamecmpdest
,
MAXPATHLEN
,
"%s/%s"
,
s
n
printf
(
fnamecmpdest
,
MAXPATHLEN
,
"%s/%s"
,
compare_dest
,
fname
);
fname
=
fnamecmpdest
;
}
...
...
@@ -329,7 +329,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
if
((
statret
==
-
1
)
&&
(
compare_dest
!=
NULL
))
{
/* try the file at compare_dest instead */
int
saveerrno
=
errno
;
s
l
printf
(
fnamecmpbuf
,
MAXPATHLEN
,
"%s/%s"
,
compare_dest
,
fname
);
s
n
printf
(
fnamecmpbuf
,
MAXPATHLEN
,
"%s/%s"
,
compare_dest
,
fname
);
statret
=
link_stat
(
fnamecmpbuf
,
&
st
);
if
(
!
S_ISREG
(
st
.
st_mode
))
statret
=
-
1
;
...
...
io.c
View file @
8950ac03
...
...
@@ -595,7 +595,7 @@ void io_printf(int fd, const char *format, ...)
int
len
;
va_start
(
ap
,
format
);
len
=
vs
l
printf
(
buf
,
sizeof
(
buf
),
format
,
ap
);
len
=
vs
n
printf
(
buf
,
sizeof
(
buf
),
format
,
ap
);
va_end
(
ap
);
if
(
len
<
0
)
exit_cleanup
(
RERR_STREAMIO
);
...
...
lib/snprintf.c
View file @
8950ac03
...
...
@@ -49,41 +49,38 @@
* fixed handling of %.0f
* added test for HAVE_LONG_DOUBLE
*
* tridge@samba.org, idra@samba.org, April 2001
* got rid of fcvt code (twas buggy and made testing harder)
* added C99 semantics
*
**************************************************************/
#ifndef NO_CONFIG_H
/* for some tests */
#include "config.h"
#endif
#ifdef HAVE_STRING_H
#include <string.h>
# include <ctype.h>
#include <sys/types.h>
#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
/* Define this as a fall through, HAVE_STDARG_H is probably already set */
#define HAVE_VARARGS_H
#endif
/* varargs declarations: */
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif
#include <sys/types.h>
#include <stdarg.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#if defined(HAVE_STDARG_H)
# include <stdarg.h>
# define HAVE_STDARGS
/* let's hope that works everywhere (mj) */
# define VA_LOCAL_DECL va_list ap
# define VA_START(f) va_start(ap, f)
# define VA_SHIFT(v,t) ;
/* no-op for ANSI */
# define VA_END va_end(ap)
#if defined(HAVE_SNPRINTF) && defined(HAVE_VSNPRINTF) && defined(HAVE_C99_VSNPRINTF)
/* only include stdio.h if we are not re-defining snprintf or vsnprintf */
#include <stdio.h>
/* make the compiler happy with an empty file */
void
dummy_snprintf
(
void
)
{}
#else
# if defined(HAVE_VARARGS_H)
# include <varargs.h>
# undef HAVE_STDARGS
# define VA_LOCAL_DECL va_list ap
# define VA_START(f) va_start(ap)
/* f is ignored! */
# define VA_SHIFT(v,t) v = va_arg(ap,t)
# define VA_END va_end(ap)
# else
/*XX ** NO VARARGS ** XX*/
# endif
#endif
#ifdef HAVE_LONG_DOUBLE
#define LDOUBLE long double
...
...
@@ -91,18 +88,21 @@
#define LDOUBLE double
#endif
/*int snprintf (char *str, size_t count, const char *fmt, ...);*/
/*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/
#ifdef HAVE_LONG_LONG
#define LLONG long long
#else
#define LLONG long
#endif
static
void
dopr
(
char
*
buffer
,
size_t
maxlen
,
const
char
*
format
,
static
size_t
dopr
(
char
*
buffer
,
size_t
maxlen
,
const
char
*
format
,
va_list
args
);
static
void
fmtstr
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
static
void
fmtstr
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
char
*
value
,
int
flags
,
int
min
,
int
max
);
static
void
fmtint
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
static
void
fmtint
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
long
value
,
int
base
,
int
min
,
int
max
,
int
flags
);
static
void
fmtfp
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
static
void
fmtfp
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
LDOUBLE
fvalue
,
int
min
,
int
max
,
int
flags
);
static
void
dopr_outch
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
char
c
);
static
void
dopr_outch
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
char
c
);
/*
* dopr(): poor man's version of doprintf
...
...
@@ -131,14 +131,17 @@ static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
#define DP_C_SHORT 1
#define DP_C_LONG 2
#define DP_C_LDOUBLE 3
#define DP_C_LLONG 4
#define char_to_int(p) (p - '0')
#define MAX(p,q) ((p >= q) ? p : q)
#define char_to_int(p) ((p)- '0')
#ifndef MAX
#define MAX(p,q) (((p) >= (q)) ? (p) : (q))
#endif
static
void
dopr
(
char
*
buffer
,
size_t
maxlen
,
const
char
*
format
,
va_list
args
)
static
size_t
dopr
(
char
*
buffer
,
size_t
maxlen
,
const
char
*
format
,
va_list
args
)
{
char
ch
;
long
value
;
LLONG
value
;
LDOUBLE
fvalue
;
char
*
strvalue
;
int
min
;
...
...
@@ -153,13 +156,11 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
max
=
-
1
;
ch
=
*
format
++
;
while
(
state
!=
DP_S_DONE
)
{
if
((
ch
==
'\0'
)
||
(
currlen
>=
maxlen
))
while
(
state
!=
DP_S_DONE
)
{
if
(
ch
==
'\0'
)
state
=
DP_S_DONE
;
switch
(
state
)
{
switch
(
state
)
{
case
DP_S_DEFAULT
:
if
(
ch
==
'%'
)
state
=
DP_S_FLAGS
;
...
...
@@ -168,8 +169,7 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
ch
=
*
format
++
;
break
;
case
DP_S_FLAGS
:
switch
(
ch
)
{
switch
(
ch
)
{
case
'-'
:
flags
|=
DP_F_MINUS
;
ch
=
*
format
++
;
...
...
@@ -196,50 +196,41 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
}
break
;
case
DP_S_MIN
:
if
(
isdigit
((
unsigned
char
)
ch
))
{
if
(
isdigit
((
unsigned
char
)
ch
))
{
min
=
10
*
min
+
char_to_int
(
ch
);
ch
=
*
format
++
;
}
else
if
(
ch
==
'*'
)
{
}
else
if
(
ch
==
'*'
)
{
min
=
va_arg
(
args
,
int
);
ch
=
*
format
++
;
state
=
DP_S_DOT
;
}
else
}
else
{
state
=
DP_S_DOT
;
}
break
;
case
DP_S_DOT
:
if
(
ch
==
'.'
)
{
if
(
ch
==
'.'
)
{
state
=
DP_S_MAX
;
ch
=
*
format
++
;
}
else
}
else
{
state
=
DP_S_MOD
;
}
break
;
case
DP_S_MAX
:
if
(
isdigit
((
unsigned
char
)
ch
))
{
if
(
isdigit
((
unsigned
char
)
ch
))
{
if
(
max
<
0
)
max
=
0
;
max
=
10
*
max
+
char_to_int
(
ch
);
ch
=
*
format
++
;
}
else
if
(
ch
==
'*'
)
{
}
else
if
(
ch
==
'*'
)
{
max
=
va_arg
(
args
,
int
);
ch
=
*
format
++
;
state
=
DP_S_MOD
;
}
else
}
else
{
state
=
DP_S_MOD
;
}
break
;
case
DP_S_MOD
:
/* Currently, we don't support Long Long, bummer */
switch
(
ch
)
{
switch
(
ch
)
{
case
'h'
:
cflags
=
DP_C_SHORT
;
ch
=
*
format
++
;
...
...
@@ -247,6 +238,10 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
case
'l'
:
cflags
=
DP_C_LONG
;
ch
=
*
format
++
;
if
(
ch
==
'l'
)
{
/* It's a long long */
cflags
=
DP_C_LLONG
;
ch
=
*
format
++
;
}
break
;
case
'L'
:
cflags
=
DP_C_LDOUBLE
;
...
...
@@ -258,14 +253,15 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
state
=
DP_S_CONV
;
break
;
case
DP_S_CONV
:
switch
(
ch
)
{
switch
(
ch
)
{
case
'd'
:
case
'i'
:
if
(
cflags
==
DP_C_SHORT
)
value
=
va_arg
(
args
,
short
int
);
value
=
va_arg
(
args
,
int
);
else
if
(
cflags
==
DP_C_LONG
)
value
=
va_arg
(
args
,
long
int
);
else
if
(
cflags
==
DP_C_LLONG
)
value
=
va_arg
(
args
,
LLONG
);
else
value
=
va_arg
(
args
,
int
);
fmtint
(
buffer
,
&
currlen
,
maxlen
,
value
,
10
,
min
,
max
,
flags
);
...
...
@@ -273,9 +269,11 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
case
'o'
:
flags
|=
DP_F_UNSIGNED
;
if
(
cflags
==
DP_C_SHORT
)
value
=
va_arg
(
args
,
unsigned
short
int
);
value
=
va_arg
(
args
,
unsigned
int
);
else
if
(
cflags
==
DP_C_LONG
)
value
=
(
long
)
va_arg
(
args
,
unsigned
long
int
);
else
if
(
cflags
==
DP_C_LLONG
)
value
=
(
long
)
va_arg
(
args
,
unsigned
LLONG
);
else
value
=
(
long
)
va_arg
(
args
,
unsigned
int
);
fmtint
(
buffer
,
&
currlen
,
maxlen
,
value
,
8
,
min
,
max
,
flags
);
...
...
@@ -283,9 +281,11 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
case
'u'
:
flags
|=
DP_F_UNSIGNED
;
if
(
cflags
==
DP_C_SHORT
)
value
=
va_arg
(
args
,
unsigned
short
int
);
value
=
va_arg
(
args
,
unsigned
int
);
else
if
(
cflags
==
DP_C_LONG
)
value
=
(
long
)
va_arg
(
args
,
unsigned
long
int
);
else
if
(
cflags
==
DP_C_LLONG
)
value
=
(
LLONG
)
va_arg
(
args
,
unsigned
LLONG
);
else
value
=
(
long
)
va_arg
(
args
,
unsigned
int
);
fmtint
(
buffer
,
&
currlen
,
maxlen
,
value
,
10
,
min
,
max
,
flags
);
...
...
@@ -295,9 +295,11 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
case
'x'
:
flags
|=
DP_F_UNSIGNED
;
if
(
cflags
==
DP_C_SHORT
)
value
=
va_arg
(
args
,
unsigned
short
int
);
value
=
va_arg
(
args
,
unsigned
int
);
else
if
(
cflags
==
DP_C_LONG
)
value
=
(
long
)
va_arg
(
args
,
unsigned
long
int
);
else
if
(
cflags
==
DP_C_LLONG
)
value
=
(
LLONG
)
va_arg
(
args
,
unsigned
LLONG
);
else
value
=
(
long
)
va_arg
(
args
,
unsigned
int
);
fmtint
(
buffer
,
&
currlen
,
maxlen
,
value
,
16
,
min
,
max
,
flags
);
...
...
@@ -331,8 +333,10 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
break
;
case
's'
:
strvalue
=
va_arg
(
args
,
char
*
);
if
(
max
<
0
)
max
=
maxlen
;
/* ie, no max */
if
(
max
==
-
1
)
{
max
=
strlen
(
strvalue
);
}
if
(
min
>
0
&&
max
>=
0
&&
min
>
max
)
max
=
min
;
fmtstr
(
buffer
,
&
currlen
,
maxlen
,
strvalue
,
flags
,
min
,
max
);
break
;
case
'p'
:
...
...
@@ -340,20 +344,19 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
fmtint
(
buffer
,
&
currlen
,
maxlen
,
(
long
)
strvalue
,
16
,
min
,
max
,
flags
);
break
;
case
'n'
:
if
(
cflags
==
DP_C_SHORT
)
{
if
(
cflags
==
DP_C_SHORT
)
{
short
int
*
num
;
num
=
va_arg
(
args
,
short
int
*
);
*
num
=
currlen
;
}
else
if
(
cflags
==
DP_C_LONG
)
{
}
else
if
(
cflags
==
DP_C_LONG
)
{
long
int
*
num
;
num
=
va_arg
(
args
,
long
int
*
);
*
num
=
(
long
int
)
currlen
;
}
else
{
}
else
if
(
cflags
==
DP_C_LLONG
)
{
LLONG
*
num
;
num
=
va_arg
(
args
,
LLONG
*
);
*
num
=
(
LLONG
)
currlen
;
}
else
{
int
*
num
;
num
=
va_arg
(
args
,
int
*
);
*
num
=
currlen
;
...
...
@@ -382,20 +385,26 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
break
;
/* some picky compilers need this */
}
}
if
(
maxlen
!=
0
)
{
if
(
currlen
<
maxlen
-
1
)
buffer
[
currlen
]
=
'\0'
;
else
else
if
(
maxlen
>
0
)
buffer
[
maxlen
-
1
]
=
'\0'
;
}
return
currlen
;
}
static
void
fmtstr
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
static
void
fmtstr
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
char
*
value
,
int
flags
,
int
min
,
int
max
)
{
int
padlen
,
strln
;
/* amount to pad */
int
cnt
=
0
;
if
(
value
==
0
)
{
#ifdef DEBUG_SNPRINTF
printf
(
"fmtstr min=%d max=%d s=[%s]
\n
"
,
min
,
max
,
value
);
#endif
if
(
value
==
0
)
{
value
=
"<NULL>"
;
}
...
...
@@ -406,19 +415,16 @@ static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
if
(
flags
&
DP_F_MINUS
)
padlen
=
-
padlen
;
/* Left Justify */
while
((
padlen
>
0
)
&&
(
cnt
<
max
))
{
while
((
padlen
>
0
)
&&
(
cnt
<
max
))
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
' '
);
--
padlen
;
++
cnt
;
}
while
(
*
value
&&
(
cnt
<
max
))
{
while
(
*
value
&&
(
cnt
<
max
))
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
*
value
++
);
++
cnt
;
}
while
((
padlen
<
0
)
&&
(
cnt
<
max
))
{
while
((
padlen
<
0
)
&&
(
cnt
<
max
))
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
' '
);
++
padlen
;
++
cnt
;
...
...
@@ -427,7 +433,7 @@ static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
static
void
fmtint
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
static
void
fmtint
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
long
value
,
int
base
,
int
min
,
int
max
,
int
flags
)
{
int
signvalue
=
0
;
...
...
@@ -443,19 +449,17 @@ static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
uvalue
=
value
;
if
(
!
(
flags
&
DP_F_UNSIGNED
))
{
if
(
!
(
flags
&
DP_F_UNSIGNED
))
{
if
(
value
<
0
)
{
signvalue
=
'-'
;
uvalue
=
-
value
;
}
else
}
else
{
if
(
flags
&
DP_F_PLUS
)
/* Do a sign (+/i) */
signvalue
=
'+'
;
else
if
(
flags
&
DP_F_SPACE
)
else
if
(
flags
&
DP_F_SPACE
)
signvalue
=
' '
;
}
}
if
(
flags
&
DP_F_UP
)
caps
=
1
;
/* Should characters be upper case? */
...
...
@@ -472,8 +476,7 @@ static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
spadlen
=
min
-
MAX
(
max
,
place
)
-
(
signvalue
?
1
:
0
);
if
(
zpadlen
<
0
)
zpadlen
=
0
;
if
(
spadlen
<
0
)
spadlen
=
0
;
if
(
flags
&
DP_F_ZERO
)
{
if
(
flags
&
DP_F_ZERO
)
{
zpadlen
=
MAX
(
zpadlen
,
spadlen
);
spadlen
=
0
;
}
...
...
@@ -486,8 +489,7 @@ static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
#endif
/* Spaces */
while
(
spadlen
>
0
)
{
while
(
spadlen
>
0
)
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
' '
);
--
spadlen
;
}
...
...
@@ -497,10 +499,8 @@ static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
dopr_outch
(
buffer
,
currlen
,
maxlen
,
signvalue
);
/* Zeros */
if
(
zpadlen
>
0
)
{
while
(
zpadlen
>
0
)
{
if
(
zpadlen
>
0
)
{
while
(
zpadlen
>
0
)
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
'0'
);
--
zpadlen
;
}
...
...
@@ -517,7 +517,7 @@ static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
}
}
static
LDOUBLE
abs_val
(
LDOUBLE
value
)
static
LDOUBLE
abs_val
(
LDOUBLE
value
)
{
LDOUBLE
result
=
value
;
...
...
@@ -527,12 +527,11 @@ static LDOUBLE abs_val (LDOUBLE value)
return
result
;
}
static
LDOUBLE
pow10
(
int
exp
)
static
LDOUBLE
POW10
(
int
exp
)
{
LDOUBLE
result
=
1
;
while
(
exp
)
{
while
(
exp
)
{
result
*=
10
;
exp
--
;
}
...
...
@@ -540,32 +539,69 @@ static LDOUBLE pow10 (int exp)
return
result
;
}
static
long
round
(
LDOUBLE
value
)
static
LLONG
ROUND
(
LDOUBLE
value
)
{
long
intpart
;
LLONG
intpart
;
intpart
=
(
long
)
value
;
intpart
=
(
LLONG
)
value
;
value
=
value
-
intpart
;
if
(
value
>=
0
.
5
)
intpart
++
;
if
(
value
>=
0
.
5
)
intpart
++
;
return
intpart
;
}
/* a replacement for modf that doesn't need the math library. Should
be portable, but slow */
static
double
my_modf
(
double
x0
,
double
*
iptr
)
{
int
i
;
long
l
;
double
x
=
x0
;
double
f
=
1
.
0
;
for
(
i
=
0
;
i
<
100
;
i
++
)
{
l
=
(
long
)
x
;
if
(
l
<=
(
x
+
1
)
&&
l
>=
(
x
-
1
))
break
;
x
*=
0
.
1
;
f
*=
10
.
0
;
}
if
(
i
==
100
)
{
/* yikes! the number is beyond what we can handle. What do we do? */
(
*
iptr
)
=
0
;
return
0
;
}
if
(
i
!=
0
)
{
double
i2
;
double
ret
;
ret
=
my_modf
(
x0
-
l
*
f
,
&
i2
);
(
*
iptr
)
=
l
*
f
+
i2
;
return
ret
;
}
(
*
iptr
)
=
l
;
return
x
-
(
*
iptr
);
}
static
void
fmtfp
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
LDOUBLE
fvalue
,
int
min
,
int
max
,
int
flags
)
{
int
signvalue
=
0
;
LDOUBLE
ufvalue
;
char
iconvert
[
20
];
char
fconvert
[
20
];
double
ufvalue
;
char
iconvert
[
311
];
char
fconvert
[
311
];
int
iplace
=
0
;
int
fplace
=
0
;
int
padlen
=
0
;
/* amount to pad */
int
zpadlen
=
0
;
int
caps
=
0
;
long
intpart
;
long
fracpart
;
int
index
;
double
intpart
;
double
fracpart
;
double
temp
;
/*
* AIX manpage says the default is 0, but Solaris says the default
...
...
@@ -576,88 +612,99 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
ufvalue
=
abs_val
(
fvalue
);
if
(
fvalue
<
0
)
if
(
fvalue
<
0
)
{
signvalue
=
'-'
;
else
if
(
flags
&
DP_F_PLUS
)
/* Do a sign (+/i) */
}
else
{
if
(
flags
&
DP_F_PLUS
)
{
/* Do a sign (+/i) */
signvalue
=
'+'
;
else
}
else
{
if
(
flags
&
DP_F_SPACE
)
signvalue
=
' '
;
}
}
#if 0
if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
#endif
intpart
=
(
long
)
ufvalue
;
#if 0
if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */
#endif
/*
* Sorry, we only support 9
digits past the decimal because of our
* Sorry, we only support 16
digits past the decimal because of our
* conversion method
*/
if
(
max
>
9
)
max
=
9
;
if
(
max
>
16
)
max
=
16
;
/* We "cheat" by converting the fractional part to integer by
* multiplying by a factor of 10
*/
fracpart
=
round
((
pow10
(
max
))
*
(
ufvalue
-
intpart
));
if
(
fracpart
>=
pow10
(
max
))
{
temp
=
ufvalue
;
my_modf
(
temp
,
&
intpart
);
fracpart
=
ROUND
((
POW10
(
max
))
*
(
ufvalue
-
intpart
));
if
(
fracpart
>=
POW10
(
max
))
{
intpart
++
;
fracpart
-=
pow10
(
max
);
fracpart
-=
POW10
(
max
);
}
#ifdef DEBUG_SNPRINTF
printf
(
"fmtfp: %g %d.%d min=%d max=%d
\n
"
,
(
double
)
fvalue
,
intpart
,
fracpart
,
min
,
max
);
#endif
/* Convert integer part */
do
{
temp
=
intpart
;
my_modf
(
intpart
*
0
.
1
,
&
intpart
);
temp
=
temp
*
0
.
1
;
index
=
(
int
)
((
temp
-
intpart
+
0
.
05
)
*
10
.
0
);
/* index = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */
/* printf ("%llf, %f, %x\n", temp, intpart, index); */
iconvert
[
iplace
++
]
=
(
caps
?
"0123456789ABCDEF"
:
"0123456789abcdef"
)[
intpart
%
10
];
intpart
=
(
intpart
/
10
);
}
while
(
intpart
&&
(
iplace
<
20
));
if
(
iplace
==
20
)
iplace
--
;
(
caps
?
"0123456789ABCDEF"
:
"0123456789abcdef"
)[
index
];
}
while
(
intpart
&&
(
iplace
<
311
));
if
(
iplace
==
311
)
iplace
--
;
iconvert
[
iplace
]
=
0
;
/* Convert fractional part */
if
(
fracpart
)
{
do
{
temp
=
fracpart
;
my_modf
(
fracpart
*
0
.
1
,
&
fracpart
);
temp
=
temp
*
0
.
1
;
index
=
(
int
)
((
temp
-
fracpart
+
0
.
05
)
*
10
.
0
);
/* index = (int) ((((temp/10) -fracpart) +0.05) *10); */
/* printf ("%lf, %lf, %ld\n", temp, fracpart, index); */
fconvert
[
fplace
++
]
=
(
caps
?
"0123456789ABCDEF"
:
"0123456789abcdef"
)[
fracpart
%
10
];
fracpart
=
(
fracpart
/
10
);
}
while
(
fracpart
&&
(
fplace
<
20
))
;
if
(
fplace
==
20
)
fplace
--
;
(
caps
?
"0123456789ABCDEF"
:
"0123456789abcdef"
)[
index
];
}
while
(
fracpart
&&
(
fplace
<
311
)
);
if
(
fplace
==
311
)
fplace
--
;
}
fconvert
[
fplace
]
=
0
;
/* -1 for decimal point, another -1 if we are printing a sign */
padlen
=
min
-
iplace
-
max
-
1
-
((
signvalue
)
?
1
:
0
);
zpadlen
=
max
-
fplace
;
if
(
zpadlen
<
0
)
zpadlen
=
0
;
if
(
zpadlen
<
0
)
zpadlen
=
0
;
if
(
padlen
<
0
)
padlen
=
0
;
if
(
flags
&
DP_F_MINUS
)
padlen
=
-
padlen
;
/* Left Justifty */
if
((
flags
&
DP_F_ZERO
)
&&
(
padlen
>
0
))
{
if
(
signvalue
)
{
if
((
flags
&
DP_F_ZERO
)
&&
(
padlen
>
0
))
{
if
(
signvalue
)
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
signvalue
);
--
padlen
;
signvalue
=
0
;
}
while
(
padlen
>
0
)
{
while
(
padlen
>
0
)
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
'0'
);
--
padlen
;
}
}
while
(
padlen
>
0
)
{
while
(
padlen
>
0
)
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
' '
);
--
padlen
;
}
...
...
@@ -667,7 +714,6 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
while
(
iplace
>
0
)
dopr_outch
(
buffer
,
currlen
,
maxlen
,
iconvert
[
--
iplace
]);
#ifdef DEBUG_SNPRINTF
printf
(
"fmtfp: fplace=%d zpadlen=%d
\n
"
,
fplace
,
zpadlen
);
#endif
...
...
@@ -683,74 +729,88 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
dopr_outch
(
buffer
,
currlen
,
maxlen
,
fconvert
[
--
fplace
]);
}
while
(
zpadlen
>
0
)
{
while
(
zpadlen
>
0
)
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
'0'
);
--
zpadlen
;
}
while
(
padlen
<
0
)
{
while
(
padlen
<
0
)
{
dopr_outch
(
buffer
,
currlen
,
maxlen
,
' '
);
++
padlen
;
}
}
static
void
dopr_outch
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
char
c
)
static
void
dopr_outch
(
char
*
buffer
,
size_t
*
currlen
,
size_t
maxlen
,
char
c
)
{
if
(
*
currlen
<
maxlen
)
buffer
[(
*
currlen
)
++
]
=
c
;
if
(
*
currlen
<
maxlen
)
{
buffer
[(
*
currlen
)]
=
c
;
}
(
*
currlen
)
++
;
}
#endif
/* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
#if
ndef HAVE_VSNPRINTF
#if
!defined(HAVE_VSNPRINTF) || !defined(HAVE_C99_VSNPRINTF)
int
vsnprintf
(
char
*
str
,
size_t
count
,
const
char
*
fmt
,
va_list
args
)
{
str
[
0
]
=
0
;
dopr
(
str
,
count
,
fmt
,
args
);
return
(
strlen
(
str
));
return
dopr
(
str
,
count
,
fmt
,
args
);
}
#endif
/* !HAVE_VSNPRINTF */
#ifndef HAVE_SNPRINTF
/* VARARGS3 */
#ifdef HAVE_STDARGS
int
snprintf
(
char
*
str
,
size_t
count
,
const
char
*
fmt
,...)
#else
int
snprintf
(
va_alist
)
va_dcl
#endif
#if !defined(HAVE_SNPRINTF) || !defined(HAVE_C99_VSNPRINTF)
int
snprintf
(
char
*
str
,
size_t
count
,
const
char
*
fmt
,...)
{
#ifndef HAVE_STDARGS
char
*
str
;
size_t
count
;
char
*
fmt
;
size_t
ret
;
va_list
ap
;
va_start
(
ap
,
fmt
);
ret
=
vsnprintf
(
str
,
count
,
fmt
,
ap
);
va_end
(
ap
);
return
ret
;
}
#endif
#endif
VA_LOCAL_DECL
;
VA_START
(
fmt
);
VA_SHIFT
(
str
,
char
*
);
VA_SHIFT
(
count
,
size_t
);
VA_SHIFT
(
fmt
,
char
*
);
(
void
)
vsnprintf
(
str
,
count
,
fmt
,
ap
);
VA_END
;
return
(
strlen
(
str
));
#ifndef HAVE_VASPRINTF
int
vasprintf
(
char
**
ptr
,
const
char
*
format
,
va_list
ap
)
{
int
ret
;
ret
=
vsnprintf
(
NULL
,
0
,
format
,
ap
);
if
(
ret
<=
0
)
return
ret
;
(
*
ptr
)
=
(
char
*
)
malloc
(
ret
+
1
);
if
(
!*
ptr
)
return
-
1
;
ret
=
vsnprintf
(
*
ptr
,
ret
+
1
,
format
,
ap
);
return
ret
;
}
#endif
#else
/* keep compilers happy about empty files */
void
dummy_snprintf
(
void
)
{}
#endif
/* !HAVE_SNPRINTF */
#ifndef HAVE_ASPRINTF
int
asprintf
(
char
**
ptr
,
const
char
*
format
,
...)
{
va_list
ap
;
int
ret
;
#ifdef TEST_SNPRINTF
#ifndef LONG_STRING
#define LONG_STRING 1024
va_start
(
ap
,
format
);
ret
=
vasprintf
(
ptr
,
format
,
ap
);
va_end
(
ap
);
return
ret
;
}
#endif
#ifdef TEST_SNPRINTF
int
sprintf
(
char
*
str
,
const
char
*
fmt
,...);
int
main
(
void
)
{
char
buf1
[
LONG_STRING
];
char
buf2
[
LONG_STRING
];
char
buf1
[
1024
];
char
buf2
[
1024
];
char
*
fp_fmt
[]
=
{
"%1.1f"
,
"%-1.5f"
,
"%1.5f"
,
"%123.9f"
,
...
...
@@ -763,10 +823,11 @@ static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
"%3.1f"
,
"%3.2f"
,
"%.0f"
,
"%.1f"
,
"%f"
,
"-16.16f"
,
NULL
};
double
fp_nums
[]
=
{
-
1
.
5
,
134
.
21
,
91340
.
2
,
341
.
1234
,
0203
.
9
,
0
.
96
,
0
.
996
,
double
fp_nums
[]
=
{
6442452944
.
1234
,
-
1
.
5
,
134
.
21
,
91340
.
2
,
341
.
1234
,
0203
.
9
,
0
.
96
,
0
.
996
,
0
.
9996
,
1
.
996
,
4
.
136
,
0
};
char
*
int_fmt
[]
=
{
"%-1.5d"
,
...
...
@@ -778,43 +839,99 @@ static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
"%+22.33d"
,
"%01.3d"
,
"%4d"
,
"%d"
,
NULL
};
long
int_nums
[]
=
{
-
1
,
134
,
91340
,
341
,
0203
,
0
};
char
*
str_fmt
[]
=
{
"10.5s"
,
"5.10s"
,
"10.1s"
,
"0.10s"
,
"10.0s"
,
"1.10s"
,
"%s"
,
"%.1s"
,
"%.10s"
,
"%10s"
,
NULL
};
char
*
str_vals
[]
=
{
"hello"
,
"a"
,
""
,
"a longer string"
,
NULL
};
int
x
,
y
;
int
fail
=
0
;
int
num
=
0
;
printf
(
"Testing snprintf format codes against system sprintf...
\n
"
);
for
(
x
=
0
;
fp_fmt
[
x
]
!=
NULL
;
x
++
)
for
(
y
=
0
;
fp_nums
[
y
]
!=
0
;
y
++
)
{
snprintf
(
buf1
,
sizeof
(
buf1
),
fp_fmt
[
x
],
fp_nums
[
y
]);
for
(
x
=
0
;
fp_fmt
[
x
]
;
x
++
)
{
for
(
y
=
0
;
fp_nums
[
y
]
!=
0
;
y
++
)
{
int
l1
=
snprintf
(
NULL
,
0
,
fp_fmt
[
x
],
fp_nums
[
y
]);
int
l2
=
snprintf
(
buf1
,
sizeof
(
buf1
),
fp_fmt
[
x
],
fp_nums
[
y
]);
sprintf
(
buf2
,
fp_fmt
[
x
],
fp_nums
[
y
]);
if
(
strcmp
(
buf1
,
buf2
))
{
printf
(
"snprintf doesn't match Format: %s
\n\t
snprintf = %s
\n\t
sprintf = %s
\n
"
,
if
(
strcmp
(
buf1
,
buf2
))
{
printf
(
"snprintf doesn't match Format: %s
\n\t
snprintf = [%s]
\n\t
sprintf = [%s]
\n
"
,
fp_fmt
[
x
],
buf1
,
buf2
);
fail
++
;
}
if
(
l1
!=
l2
)
{
printf
(
"snprintf l1 != l2 (%d %d) %s
\n
"
,
l1
,
l2
,
fp_fmt
[
x
]);
fail
++
;
}
num
++
;
}
}
for
(
x
=
0
;
int_fmt
[
x
]
!=
NULL
;
x
++
)
for
(
y
=
0
;
int_nums
[
y
]
!=
0
;
y
++
)
{
snprintf
(
buf1
,
sizeof
(
buf1
),
int_fmt
[
x
],
int_nums
[
y
]);
for
(
x
=
0
;
int_fmt
[
x
]
;
x
++
)
{
for
(
y
=
0
;
int_nums
[
y
]
!=
0
;
y
++
)
{
int
l1
=
snprintf
(
NULL
,
0
,
int_fmt
[
x
],
int_nums
[
y
]);
int
l2
=
snprintf
(
buf1
,
sizeof
(
buf1
),
int_fmt
[
x
],
int_nums
[
y
]);
sprintf
(
buf2
,
int_fmt
[
x
],
int_nums
[
y
]);
if
(
strcmp
(
buf1
,
buf2
))
{
printf
(
"snprintf doesn't match Format: %s
\n\t
snprintf = %s
\n\t
sprintf = %s
\n
"
,
if
(
strcmp
(
buf1
,
buf2
))
{
printf
(
"snprintf doesn't match Format: %s
\n\t
snprintf = [%s]
\n\t
sprintf = [%s]
\n
"
,
int_fmt
[
x
],
buf1
,
buf2
);
fail
++
;
}
if
(
l1
!=
l2
)
{
printf
(
"snprintf l1 != l2 (%d %d) %s
\n
"
,
l1
,
l2
,
int_fmt
[
x
]);
fail
++
;
}
num
++
;
}
}
for
(
x
=
0
;
str_fmt
[
x
]
;
x
++
)
{
for
(
y
=
0
;
str_vals
[
y
]
!=
0
;
y
++
)
{
int
l1
=
snprintf
(
NULL
,
0
,
str_fmt
[
x
],
str_vals
[
y
]);
int
l2
=
snprintf
(
buf1
,
sizeof
(
buf1
),
str_fmt
[
x
],
str_vals
[
y
]);
sprintf
(
buf2
,
str_fmt
[
x
],
str_vals
[
y
]);
if
(
strcmp
(
buf1
,
buf2
))
{
printf
(
"snprintf doesn't match Format: %s
\n\t
snprintf = [%s]
\n\t
sprintf = [%s]
\n
"
,
str_fmt
[
x
],
buf1
,
buf2
);
fail
++
;
}
if
(
l1
!=
l2
)
{
printf
(
"snprintf l1 != l2 (%d %d) %s
\n
"
,
l1
,
l2
,
str_fmt
[
x
]);
fail
++
;
}
num
++
;
}
}
printf
(
"%d tests failed out of %d.
\n
"
,
fail
,
num
);
printf
(
"seeing how many digits we support
\n
"
);
{
double
v0
=
0
.
12345678901234567890123456789012345678901
;
for
(
x
=
0
;
x
<
100
;
x
++
)
{
snprintf
(
buf1
,
sizeof
(
buf1
),
"%1.1f"
,
v0
*
pow
(
10
,
x
));
sprintf
(
buf2
,
"%1.1f"
,
v0
*
pow
(
10
,
x
));
if
(
strcmp
(
buf1
,
buf2
))
{
printf
(
"we seem to support %d digits
\n
"
,
x
-
1
);
break
;
}
}
}
return
0
;
}
#endif
/* SNPRINTF_TEST */
log.c
View file @
8950ac03
...
...
@@ -286,7 +286,7 @@ void rprintf(enum logcode code, const char *format, ...)
int
len
;
va_start
(
ap
,
format
);
len
=
vs
l
printf
(
buf
,
sizeof
(
buf
),
format
,
ap
);
len
=
vs
n
printf
(
buf
,
sizeof
(
buf
),
format
,
ap
);
va_end
(
ap
);
if
(
len
>
sizeof
(
buf
)
-
1
)
exit_cleanup
(
RERR_MESSAGEIO
);
...
...
@@ -311,7 +311,7 @@ void rsyserr(enum logcode code, int errcode, const char *format, ...)
char
*
sysmsg
;
va_start
(
ap
,
format
);
len
=
vs
l
printf
(
buf
,
sizeof
(
buf
),
format
,
ap
);
len
=
vs
n
printf
(
buf
,
sizeof
(
buf
),
format
,
ap
);
va_end
(
ap
);
if
(
len
>
sizeof
(
buf
)
-
1
)
exit_cleanup
(
RERR_MESSAGEIO
);
...
...
@@ -392,18 +392,18 @@ static void log_formatted(enum logcode code,
case
'h'
:
if
(
am_daemon
)
n
=
client_name
(
0
);
break
;
case
'a'
:
if
(
am_daemon
)
n
=
client_addr
(
0
);
break
;
case
'l'
:
s
l
printf
(
buf2
,
sizeof
(
buf2
),
"%.0f"
,
s
n
printf
(
buf2
,
sizeof
(
buf2
),
"%.0f"
,
(
double
)
file
->
length
);
n
=
buf2
;
break
;
case
'p'
:
s
l
printf
(
buf2
,
sizeof
(
buf2
),
"%d"
,
s
n
printf
(
buf2
,
sizeof
(
buf2
),
"%d"
,
(
int
)
getpid
());
n
=
buf2
;
break
;
case
'o'
:
n
=
op
;
break
;
case
'f'
:
s
l
printf
(
buf2
,
sizeof
(
buf2
),
"%s/%s"
,
s
n
printf
(
buf2
,
sizeof
(
buf2
),
"%s/%s"
,
file
->
basedir
?
file
->
basedir
:
""
,
f_name
(
file
));
clean_fname
(
buf2
);
...
...
@@ -422,7 +422,7 @@ static void log_formatted(enum logcode code,
b
=
stats
.
total_read
-
initial_stats
->
total_read
;
}
s
l
printf
(
buf2
,
sizeof
(
buf2
),
"%.0f"
,
(
double
)
b
);
s
n
printf
(
buf2
,
sizeof
(
buf2
),
"%.0f"
,
(
double
)
b
);
n
=
buf2
;
break
;
case
'c'
:
...
...
@@ -433,7 +433,7 @@ static void log_formatted(enum logcode code,
b
=
stats
.
total_read
-
initial_stats
->
total_read
;
}
s
l
printf
(
buf2
,
sizeof
(
buf2
),
"%.0f"
,
(
double
)
b
);
s
n
printf
(
buf2
,
sizeof
(
buf2
),
"%.0f"
,
(
double
)
b
);
n
=
buf2
;
break
;
}
...
...
options.c
View file @
8950ac03
...
...
@@ -327,7 +327,7 @@ static int check_refuse_options(char *ref, int opt)
while
((
p
=
strstr
(
ref
,
name
)))
{
if
((
p
==
ref
||
p
[
-
1
]
==
' '
)
&&
(
p
[
len
]
==
' '
||
p
[
len
]
==
0
))
{
s
l
printf
(
err_buf
,
sizeof
(
err_buf
),
s
n
printf
(
err_buf
,
sizeof
(
err_buf
),
"The '%s' option is not supported by this server
\n
"
,
name
);
return
1
;
}
...
...
@@ -418,7 +418,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
* rprintf? Everybody who gets this message
* ought to send it to the client and also to
* the logs. */
s
l
printf
(
err_buf
,
sizeof
(
err_buf
),
s
n
printf
(
err_buf
,
sizeof
(
err_buf
),
"hard links are not supported on this %s
\n
"
,
am_server
?
"server"
:
"client"
);
rprintf
(
FERROR
,
"ERROR: hard links not supported on this platform
\n
"
);
...
...
@@ -471,7 +471,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
default:
/* FIXME: If --daemon is specified, then errors for later
* parameters seem to disappear. */
s
l
printf
(
err_buf
,
sizeof
(
err_buf
),
s
n
printf
(
err_buf
,
sizeof
(
err_buf
),
"%s%s: %s
\n
"
,
am_server
?
"on remote machine: "
:
""
,
poptBadOption
(
pc
,
POPT_BADOPTION_NOALIAS
),
...
...
@@ -568,22 +568,22 @@ void server_options(char **args,int *argc)
if
(
x
!=
1
)
args
[
ac
++
]
=
argstr
;
if
(
block_size
!=
BLOCK_SIZE
)
{
s
l
printf
(
bsize
,
sizeof
(
bsize
),
"-B%d"
,
block_size
);
s
n
printf
(
bsize
,
sizeof
(
bsize
),
"-B%d"
,
block_size
);
args
[
ac
++
]
=
bsize
;
}
if
(
max_delete
&&
am_sender
)
{
s
l
printf
(
mdelete
,
sizeof
(
mdelete
),
"--max-delete=%d"
,
max_delete
);
s
n
printf
(
mdelete
,
sizeof
(
mdelete
),
"--max-delete=%d"
,
max_delete
);
args
[
ac
++
]
=
mdelete
;
}
if
(
io_timeout
)
{
s
l
printf
(
iotime
,
sizeof
(
iotime
),
"--timeout=%d"
,
io_timeout
);
s
n
printf
(
iotime
,
sizeof
(
iotime
),
"--timeout=%d"
,
io_timeout
);
args
[
ac
++
]
=
iotime
;
}
if
(
bwlimit
)
{
s
l
printf
(
bw
,
sizeof
(
bw
),
"--bwlimit=%d"
,
bwlimit
);
s
n
printf
(
bw
,
sizeof
(
bw
),
"--bwlimit=%d"
,
bwlimit
);
args
[
ac
++
]
=
bw
;
}
...
...
@@ -602,7 +602,7 @@ void server_options(char **args,int *argc)
args
[
ac
++
]
=
"--size-only"
;
if
(
modify_window_set
)
{
s
l
printf
(
mwindow
,
sizeof
(
mwindow
),
"--modify-window=%d"
,
s
n
printf
(
mwindow
,
sizeof
(
mwindow
),
"--modify-window=%d"
,
modify_window
);
args
[
ac
++
]
=
mwindow
;
}
...
...
receiver.c
View file @
8950ac03
...
...
@@ -179,7 +179,7 @@ static int get_tmpname(char *fnametmp, char *fname)
rprintf
(
FERROR
,
"filename too long
\n
"
);
return
0
;
}
s
l
printf
(
fnametmp
,
MAXPATHLEN
,
"%s/.%s.XXXXXX"
,
tmpdir
,
f
);
s
n
printf
(
fnametmp
,
MAXPATHLEN
,
"%s/.%s.XXXXXX"
,
tmpdir
,
f
);
return
1
;
}
...
...
@@ -192,11 +192,11 @@ static int get_tmpname(char *fnametmp, char *fname)
if
(
f
)
{
*
f
=
0
;
s
l
printf
(
fnametmp
,
MAXPATHLEN
,
"%s/.%s.XXXXXX"
,
s
n
printf
(
fnametmp
,
MAXPATHLEN
,
"%s/.%s.XXXXXX"
,
fname
,
f
+
1
);
*
f
=
'/'
;
}
else
{
s
l
printf
(
fnametmp
,
MAXPATHLEN
,
".%s.XXXXXX"
,
fname
);
s
n
printf
(
fnametmp
,
MAXPATHLEN
,
".%s.XXXXXX"
,
fname
);
}
return
1
;
...
...
@@ -372,7 +372,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
if
((
fd1
==
-
1
)
&&
(
compare_dest
!=
NULL
))
{
/* try the file at compare_dest instead */
s
l
printf
(
fnamecmpbuf
,
MAXPATHLEN
,
"%s/%s"
,
s
n
printf
(
fnamecmpbuf
,
MAXPATHLEN
,
"%s/%s"
,
compare_dest
,
fname
);
fnamecmp
=
fnamecmpbuf
;
fd1
=
do_open
(
fnamecmp
,
O_RDONLY
,
0
);
...
...
rsync.c
View file @
8950ac03
...
...
@@ -91,7 +91,7 @@ int delete_file(char *fname)
if
(
strcmp
(
dname
,
"."
)
==
0
||
strcmp
(
dname
,
".."
)
==
0
)
continue
;
s
l
printf
(
buf
,
sizeof
(
buf
),
"%s/%s"
,
fname
,
dname
);
s
n
printf
(
buf
,
sizeof
(
buf
),
"%s/%s"
,
fname
,
dname
);
if
(
verbose
>
0
)
rprintf
(
FINFO
,
"deleting %s
\n
"
,
buf
);
if
(
delete_file
(
buf
)
!=
0
)
{
...
...
socket.c
View file @
8950ac03
...
...
@@ -32,7 +32,7 @@ static int establish_proxy_connection(int fd, char *host, int port)
char
buffer
[
1024
];
char
*
cp
;
s
l
printf
(
buffer
,
sizeof
(
buffer
),
"CONNECT %s:%d HTTP/1.0
\r\n\r\n
"
,
host
,
port
);
s
n
printf
(
buffer
,
sizeof
(
buffer
),
"CONNECT %s:%d HTTP/1.0
\r\n\r\n
"
,
host
,
port
);
if
(
write
(
fd
,
buffer
,
strlen
(
buffer
))
!=
strlen
(
buffer
))
{
rprintf
(
FERROR
,
"failed to write to proxy: %s
\n
"
,
strerror
(
errno
));
...
...
util.c
View file @
8950ac03
...
...
@@ -558,10 +558,7 @@ void glob_expand(char *base1, char **argv, int *argc, int maxargs)
s
=
strdup
(
s
);
if
(
!
s
)
out_of_memory
(
"glob_expand"
);
base
=
(
char
*
)
malloc
(
strlen
(
base1
)
+
3
);
if
(
!
base
)
out_of_memory
(
"glob_expand"
);
sprintf
(
base
,
" %s/"
,
base1
);
if
(
asprintf
(
&
base
,
" %s/"
,
base1
)
<=
0
)
out_of_memory
(
"glob_expand"
);
q
=
s
;
while
((
p
=
strstr
(
q
,
base
))
&&
((
*
argc
)
<
maxargs
))
{
...
...
@@ -588,33 +585,6 @@ void strlower(char *s)
}
}
/* this is like vsnprintf but it always null terminates, so you
can fit at most n-1 chars in */
int
vslprintf
(
char
*
str
,
int
n
,
const
char
*
format
,
va_list
ap
)
{
int
ret
=
vsnprintf
(
str
,
n
,
format
,
ap
);
if
(
ret
>=
n
||
ret
<
0
)
{
str
[
n
-
1
]
=
0
;
return
-
1
;
}
str
[
ret
]
=
0
;
return
ret
;
}
/* like snprintf but always null terminates */
int
slprintf
(
char
*
str
,
int
n
,
char
*
format
,
...)
{
va_list
ap
;
int
ret
;
va_start
(
ap
,
format
);
ret
=
vslprintf
(
str
,
n
,
format
,
ap
);
va_end
(
ap
);
return
ret
;
}
void
*
Realloc
(
void
*
p
,
int
size
)
{
if
(
!
p
)
return
(
void
*
)
malloc
(
size
);
...
...
@@ -987,9 +957,9 @@ int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6)
{
static
int
(
*
fn
)();
int
ret
;
char
cmd
[
1024
]
;
char
*
cmd
;
sprintf
(
cmd
,
"/usr/X11R6/bin/xterm -display :0 -T Panic -n Panic -e /bin/sh -c 'cat /tmp/ierrs.*.%d ; gdb /proc/%d/exe %d'"
,
asprintf
(
&
cmd
,
"/usr/X11R6/bin/xterm -display :0 -T Panic -n Panic -e /bin/sh -c 'cat /tmp/ierrs.*.%d ; gdb /proc/%d/exe %d'"
,
getpid
(),
getpid
(),
getpid
());
if
(
!
fn
)
{
...
...
@@ -1002,6 +972,8 @@ int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6)
system
(
cmd
);
free
(
cmd
);
return
ret
;
}
#endif
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