Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F37954902
missing-string.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
4 KB
Subscribers
None
missing-string.c
View Options
/* missing-string.c - missing string utilities
* Copyright (C) 1994, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
*
* This file is part of Libgcrypt.
*
* Libgcrypt is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* Libgcrypt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#include
<config.h>
#include
<stdlib.h>
#include
<string.h>
#include
<ctype.h>
#include
"g10lib.h"
#ifndef HAVE_STPCPY
char
*
stpcpy
(
char
*
a
,
const
char
*
b
)
{
while
(
*
b
)
*
a
++
=
*
b
++
;
*
a
=
0
;
return
(
char
*
)
a
;
}
#endif
#ifndef HAVE_STRSEP
/* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */
char
*
strsep
(
char
**
stringp
,
const
char
*
delim
)
{
char
*
begin
,
*
end
;
begin
=
*
stringp
;
if
(
begin
==
NULL
)
return
NULL
;
/* A frequent case is when the delimiter string contains only one
character. Here we don't need to call the expensive `strpbrk'
function and instead work using `strchr'. */
if
(
delim
[
0
]
==
'\0'
||
delim
[
1
]
==
'\0'
)
{
char
ch
=
delim
[
0
];
if
(
ch
==
'\0'
)
end
=
NULL
;
else
{
if
(
*
begin
==
ch
)
end
=
begin
;
else
if
(
*
begin
==
'\0'
)
end
=
NULL
;
else
end
=
strchr
(
begin
+
1
,
ch
);
}
}
else
/* Find the end of the token. */
end
=
strpbrk
(
begin
,
delim
);
if
(
end
)
{
/* Terminate the token and set *STRINGP past NUL character. */
*
end
++
=
'\0'
;
*
stringp
=
end
;
}
else
/* No more delimiters; this is the last token. */
*
stringp
=
NULL
;
return
begin
;
}
#endif
/*HAVE_STRSEP*/
/* #ifndef HAVE_STRLWR */
/* char * */
/* strlwr(char *s) */
/* { */
/* char *p; */
/* for(p=s; *p; p++ ) */
/* *p = tolower(*p); */
/* return s; */
/* } */
/* #endif */
#ifndef HAVE_STRCASECMP
int
strcasecmp
(
const
char
*
a
,
const
char
*
b
)
{
for
(
;
*
a
&&
*
b
;
a
++
,
b
++
)
{
if
(
*
a
!=
*
b
&&
toupper
(
*
a
)
!=
toupper
(
*
b
)
)
break
;
}
return
*
(
const
byte
*
)
a
-
*
(
const
byte
*
)
b
;
}
#endif
#ifdef __MINGW32__
/*
* Like vsprintf but provides a pointer to malloc'd storage, which
* must be freed by the caller (gcry_free). Taken from libiberty as
* found in gcc-2.95.2 and a little bit modernized.
* FIXME: Write a new CRT for W32.
*/
int
vasprintf
(
char
**
result
,
const
char
*
format
,
va_list
args
)
{
const
char
*
p
=
format
;
/* Add one to make sure that it is never zero, which might cause malloc
to return NULL. */
int
total_width
=
strlen
(
format
)
+
1
;
va_list
ap
;
/* this is not really portable but works under Windows */
memcpy
(
&
ap
,
&
args
,
sizeof
(
va_list
));
while
(
*
p
!=
'\0'
)
{
if
(
*
p
++
==
'%'
)
{
while
(
strchr
(
"-+ #0"
,
*
p
))
++
p
;
if
(
*
p
==
'*'
)
{
++
p
;
total_width
+=
abs
(
va_arg
(
ap
,
int
));
}
else
{
char
*
endp
;
total_width
+=
strtoul
(
p
,
&
endp
,
10
);
p
=
endp
;
}
if
(
*
p
==
'.'
)
{
++
p
;
if
(
*
p
==
'*'
)
{
++
p
;
total_width
+=
abs
(
va_arg
(
ap
,
int
));
}
else
{
char
*
endp
;
total_width
+=
strtoul
(
p
,
&
endp
,
10
);
p
=
endp
;
}
}
while
(
strchr
(
"hlL"
,
*
p
))
++
p
;
/* Should be big enough for any format specifier except %s
and floats. */
total_width
+=
30
;
switch
(
*
p
)
{
case
'd'
:
case
'i'
:
case
'o'
:
case
'u'
:
case
'x'
:
case
'X'
:
case
'c'
:
(
void
)
va_arg
(
ap
,
int
);
break
;
case
'f'
:
case
'e'
:
case
'E'
:
case
'g'
:
case
'G'
:
(
void
)
va_arg
(
ap
,
double
);
/* Since an ieee double can have an exponent of 307, we'll
make the buffer wide enough to cover the gross case. */
total_width
+=
307
;
case
's'
:
total_width
+=
strlen
(
va_arg
(
ap
,
char
*
));
break
;
case
'p'
:
case
'n'
:
(
void
)
va_arg
(
ap
,
char
*
);
break
;
}
}
}
*
result
=
gcry_malloc
(
total_width
);
if
(
*
result
!=
NULL
)
return
vsprintf
(
*
result
,
format
,
args
);
else
return
0
;
}
#endif
/*__MINGW32__*/
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Thu, Mar 19, 6:05 PM (1 d, 2 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
7a/ac/95da3dbe76b61c9f3195dbf485e7
Attached To
rC libgcrypt
Event Timeline
Log In to Comment