Merge upstream r634:646: correctly parse mixed quoted / unquoted text.

This commit is contained in:
Dag-Erling Smørgrav 2013-03-04 18:51:53 +00:00
commit ea80740663
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=247810
3 changed files with 22 additions and 12 deletions

View file

@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
.Dd May 26, 2012
.Dd March 3, 2013
.Dt OPENPAM_STRADDCH 3
.Os
.Sh NAME
@ -73,6 +73,21 @@ and
argument point to variables used to hold the size
of the buffer and the length of the string it contains, respectively.
.Pp
The final argument,
.Fa ch ,
is the character that should be appended to
the string. If
.Fa ch
is 0, nothing is appended, but a new buffer is
still allocated if
.Fa str
is NULL. This can be used to
.Do
bootstrap
.Dc
the
string.
.Pp
If a new buffer is allocated or an existing buffer is reallocated to
make room for the additional character,
.Fa str
@ -91,7 +106,9 @@ If the
function is successful, it increments the
integer variable pointed to by
.Fa len
and returns 0.
(unless
.Fa ch
was 0) and returns 0.
Otherwise, it leaves the variables pointed to by
.Fa str ,
.Fa size

View file

@ -62,11 +62,9 @@ openpam_readline(FILE *f, int *lineno, size_t *lenp)
size_t len, size;
int ch;
if ((line = malloc(size = MIN_LINE_LENGTH)) == NULL) {
openpam_log(PAM_LOG_ERROR, "malloc(): %m");
line = NULL;
if (openpam_straddch(&line, &size, &len, 0) != 0)
return (NULL);
}
len = 0;
for (;;) {
ch = fgetc(f);
/* strip comment */

View file

@ -86,13 +86,8 @@ openpam_readword(FILE *f, int *lineno, size_t *lenp)
/* begin quote */
quote = ch;
/* edge case: empty quoted string */
if (word == NULL && (word = malloc(1)) == NULL) {
openpam_log(PAM_LOG_ERROR, "malloc(): %m");
errno = ENOMEM;
if (openpam_straddch(&word, &size, &len, 0) != 0)
return (NULL);
}
*word = '\0';
size = 1;
} else if (ch == quote && !escape) {
/* end quote */
quote = 0;