version 1.32, 2000/01/22 22:19:10 |
version 1.38, 2003/08/07 16:42:49 |
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* 3. Neither the name of the University nor the names of its contributors |
* must display the following acknowledgement: |
|
* This product includes software developed by the University of |
|
* California, Berkeley and its contributors. |
|
* 4. Neither the name of the University nor the names of its contributors |
|
* may be used to endorse or promote products derived from this software |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* without specific prior written permission. |
* |
* |
|
|
* SUCH DAMAGE. |
* SUCH DAMAGE. |
*/ |
*/ |
|
|
|
#if HAVE_CONFIG_H |
|
#include "config.h" |
|
#endif |
|
|
#include <sys/cdefs.h> |
#include <sys/cdefs.h> |
#if defined(LIBC_SCCS) && !defined(lint) |
#if defined(LIBC_SCCS) && !defined(lint) |
#if 0 |
#if 0 |
Line 47 __RCSID("$NetBSD$"); |
|
Line 47 __RCSID("$NetBSD$"); |
|
|
|
#include "namespace.h" |
#include "namespace.h" |
#include <sys/types.h> |
#include <sys/types.h> |
|
#include <sys/param.h> |
|
|
#include <assert.h> |
#include <assert.h> |
#include <ctype.h> |
#include <ctype.h> |
Line 249 getent(cap, len, db_array, fd, name, dep |
|
Line 250 getent(cap, len, db_array, fd, name, dep |
|
char *r_end, *rp = NULL, **db_p; /* pacify gcc */ |
char *r_end, *rp = NULL, **db_p; /* pacify gcc */ |
int myfd = 0, eof, foundit, retval; |
int myfd = 0, eof, foundit, retval; |
size_t clen; |
size_t clen; |
char *record, *cbuf; |
char *record, *cbuf, *newrecord; |
int tc_not_resolved; |
int tc_not_resolved; |
char pbuf[_POSIX_PATH_MAX]; |
char pbuf[MAXPATHLEN]; |
|
|
_DIAGASSERT(cap != NULL); |
_DIAGASSERT(cap != NULL); |
_DIAGASSERT(len != NULL); |
_DIAGASSERT(len != NULL); |
Line 435 getent(cap, len, db_array, fd, name, dep |
|
Line 436 getent(cap, len, db_array, fd, name, dep |
|
|
|
pos = rp - record; |
pos = rp - record; |
newsize = r_end - record + BFRAG; |
newsize = r_end - record + BFRAG; |
record = realloc(record, newsize); |
newrecord = realloc(record, newsize); |
if (record == NULL) { |
if (newrecord == NULL) { |
|
free(record); |
if (myfd) |
if (myfd) |
(void)close(fd); |
(void)close(fd); |
errno = ENOMEM; |
errno = ENOMEM; |
return (-2); |
return (-2); |
} |
} |
|
record = newrecord; |
r_end = record + newsize; |
r_end = record + newsize; |
rp = record + pos; |
rp = record + pos; |
} |
} |
|
|
newsize = r_end - record + diff + BFRAG; |
newsize = r_end - record + diff + BFRAG; |
tcpos = tcstart - record; |
tcpos = tcstart - record; |
tcposend = tcend - record; |
tcposend = tcend - record; |
record = realloc(record, newsize); |
newrecord = realloc(record, newsize); |
if (record == NULL) { |
if (newrecord == NULL) { |
|
free(record); |
if (myfd) |
if (myfd) |
(void)close(fd); |
(void)close(fd); |
free(icap); |
free(icap); |
errno = ENOMEM; |
errno = ENOMEM; |
return (-2); |
return (-2); |
} |
} |
|
record = newrecord; |
r_end = record + newsize; |
r_end = record + newsize; |
rp = record + pos; |
rp = record + pos; |
tcstart = record + tcpos; |
tcstart = record + tcpos; |
|
|
if (myfd) |
if (myfd) |
(void)close(fd); |
(void)close(fd); |
*len = rp - record - 1; /* don't count NUL */ |
*len = rp - record - 1; /* don't count NUL */ |
if (r_end > rp) |
if (r_end > rp) { |
if ((record = |
if ((newrecord = |
realloc(record, (size_t)(rp - record))) == NULL) { |
realloc(record, (size_t)(rp - record))) == NULL) { |
|
free(record); |
errno = ENOMEM; |
errno = ENOMEM; |
return (-2); |
return (-2); |
} |
} |
|
record = newrecord; |
|
} |
|
|
*cap = record; |
*cap = record; |
if (tc_not_resolved) |
if (tc_not_resolved) |
Line 701 cgetmatch(buf, name) |
|
Line 709 cgetmatch(buf, name) |
|
/* |
/* |
* Match failed, skip to next name in record. |
* Match failed, skip to next name in record. |
*/ |
*/ |
bp--; /* a '|' or ':' may have stopped the match */ |
if (bp > buf) |
|
bp--; /* a '|' or ':' may have stopped the match */ |
|
else |
|
return (-1); |
for (;;) |
for (;;) |
if (*bp == '\0' || *bp == ':') |
if (*bp == '\0' || *bp == ':') |
return (-1); /* match failed totally */ |
return (-1); /* match failed totally */ |
Line 812 cgetnext(bp, db_array) |
|
Line 823 cgetnext(bp, db_array) |
|
/* |
/* |
* Line points to a name line. |
* Line points to a name line. |
*/ |
*/ |
|
if (len > sizeof(nbuf)) |
|
return -1; |
done = 0; |
done = 0; |
np = nbuf; |
np = nbuf; |
for (;;) { |
for (;;) { |
Line 843 cgetnext(bp, db_array) |
|
Line 856 cgetnext(bp, db_array) |
|
line[len - 1] = '\0'; |
line[len - 1] = '\0'; |
} |
} |
} |
} |
|
if (len > sizeof(buf)) |
|
return -1; |
rp = buf; |
rp = buf; |
for(cp = nbuf; *cp != '\0'; cp++) |
for(cp = nbuf; *cp != '\0'; cp++) |
if (*cp == '|' || *cp == ':') |
if (*cp == '|' || *cp == ':') |
Line 887 cgetstr(buf, cap, str) |
|
Line 902 cgetstr(buf, cap, str) |
|
const char *bp; |
const char *bp; |
char *mp; |
char *mp; |
int len; |
int len; |
char *mem; |
char *mem, *newmem; |
|
|
_DIAGASSERT(buf != NULL); |
_DIAGASSERT(buf != NULL); |
_DIAGASSERT(cap != NULL); |
_DIAGASSERT(cap != NULL); |
Line 978 cgetstr(buf, cap, str) |
|
Line 993 cgetstr(buf, cap, str) |
|
if (m_room == 0) { |
if (m_room == 0) { |
size_t size = mp - mem; |
size_t size = mp - mem; |
|
|
if ((mem = realloc(mem, size + SFRAG)) == NULL) |
if ((newmem = realloc(mem, size + SFRAG)) == NULL) { |
|
free(mem); |
return (-2); |
return (-2); |
|
} |
|
mem = newmem; |
m_room = SFRAG; |
m_room = SFRAG; |
mp = mem + size; |
mp = mem + size; |
} |
} |
Line 991 cgetstr(buf, cap, str) |
|
Line 1009 cgetstr(buf, cap, str) |
|
/* |
/* |
* Give back any extra memory and return value and success. |
* Give back any extra memory and return value and success. |
*/ |
*/ |
if (m_room != 0) |
if (m_room != 0) { |
if ((mem = realloc(mem, (size_t)(mp - mem))) == NULL) |
if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { |
|
free(mem); |
return (-2); |
return (-2); |
|
} |
|
mem = newmem; |
|
} |
*str = mem; |
*str = mem; |
return (len); |
return (len); |
} |
} |
Line 1018 cgetustr(buf, cap, str) |
|
Line 1040 cgetustr(buf, cap, str) |
|
const char *bp; |
const char *bp; |
char *mp; |
char *mp; |
int len; |
int len; |
char *mem; |
char *mem, *newmem; |
|
|
_DIAGASSERT(buf != NULL); |
_DIAGASSERT(buf != NULL); |
_DIAGASSERT(cap != NULL); |
_DIAGASSERT(cap != NULL); |
Line 1058 cgetustr(buf, cap, str) |
|
Line 1080 cgetustr(buf, cap, str) |
|
if (m_room == 0) { |
if (m_room == 0) { |
size_t size = mp - mem; |
size_t size = mp - mem; |
|
|
if ((mem = realloc(mem, size + SFRAG)) == NULL) |
if ((newmem = realloc(mem, size + SFRAG)) == NULL) { |
|
free(mem); |
return (-2); |
return (-2); |
|
} |
|
mem = newmem; |
m_room = SFRAG; |
m_room = SFRAG; |
mp = mem + size; |
mp = mem + size; |
} |
} |
Line 1071 cgetustr(buf, cap, str) |
|
Line 1096 cgetustr(buf, cap, str) |
|
/* |
/* |
* Give back any extra memory and return value and success. |
* Give back any extra memory and return value and success. |
*/ |
*/ |
if (m_room != 0) |
if (m_room != 0) { |
if ((mem = realloc(mem, (size_t)(mp - mem))) == NULL) |
if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { |
|
free(mem); |
return (-2); |
return (-2); |
|
} |
|
mem = newmem; |
|
} |
*str = mem; |
*str = mem; |
return (len); |
return (len); |
} |
} |