* strings.h (strechr): New function.
* uinfo.cc (pwdgrp::next_str): Search only for input char in string. Return EOS on failure. Don't check for NULL since it shouldn't be possible. (pwdgrp::add_line): Revert to replacing '\n' in input line with '\0'. (pwdgrp::next_num): Pass explicit separator character to next_str. * grp.cc (pwdgrp::parse_group): Ditto. * passwd.cc (pwdgrp::parse_passwd): Ditto. Revamp test for garbage input. * pwdgrp.h (pwdgrp::next_str): Don't use default parameter.
This commit is contained in:
@ -394,24 +394,17 @@ cygheap_user::env_name (const char *name, size_t namelen)
|
||||
char *
|
||||
pwdgrp::next_str (char c)
|
||||
{
|
||||
if (!lptr)
|
||||
return NULL;
|
||||
char search[] = ":\n\0\0";
|
||||
search[2] = c;
|
||||
char *res = lptr;
|
||||
char *p = strpbrk (lptr, search);
|
||||
if (p)
|
||||
{
|
||||
lptr = (*p == '\n') ? p : p + 1;
|
||||
*p = '\0';
|
||||
}
|
||||
lptr = strechr (lptr, c);
|
||||
if (*lptr)
|
||||
*lptr++ = '\0';
|
||||
return res;
|
||||
}
|
||||
|
||||
bool
|
||||
pwdgrp::next_num (unsigned long& n)
|
||||
{
|
||||
char *p = next_str ();
|
||||
char *p = next_str (':');
|
||||
if (!p)
|
||||
return -1;
|
||||
char *cp;
|
||||
@ -425,11 +418,13 @@ pwdgrp::add_line (char *eptr)
|
||||
if (eptr)
|
||||
{
|
||||
lptr = eptr;
|
||||
eptr = strchr (lptr, '\n');
|
||||
if (eptr)
|
||||
eptr = strechr (lptr, '\n');
|
||||
if (*eptr)
|
||||
{
|
||||
if (eptr > lptr && eptr[-1] == '\r')
|
||||
eptr[-1] = '\n';
|
||||
eptr[-1] = '\0';
|
||||
else
|
||||
*eptr = '\0';
|
||||
eptr++;
|
||||
}
|
||||
if (curr_lines >= max_lines)
|
||||
|
Reference in New Issue
Block a user