| version 1.1, 1993/05/18 07:37:54 |
version 1.1.1.1, 1995/02/25 09:11:40 |
|
|
| /*- |
/*- |
| * Copyright (c) 1992 The Regents of the University of California. |
* Copyright (c) 1992, 1993 |
| * All rights reserved. |
* The Regents of the University of California. All rights reserved. |
| * |
* |
| * This code is derived from software contributed to Berkeley by |
* This code is derived from software contributed to Berkeley by |
| * Casey Leedom of Lawrence Livermore National Laboratory. |
* Casey Leedom of Lawrence Livermore National Laboratory. |
|
|
| */ |
*/ |
| |
|
| #if defined(LIBC_SCCS) && !defined(lint) |
#if defined(LIBC_SCCS) && !defined(lint) |
| static char sccsid[] = "@(#)getcap.c 5.15 (Berkeley) 3/19/93"; |
static char sccsid[] = "@(#)getcap.c 8.3 (Berkeley) 3/25/94"; |
| #endif /* LIBC_SCCS and not lint */ |
#endif /* LIBC_SCCS and not lint */ |
| |
|
| #include <sys/types.h> |
#include <sys/types.h> |
| Line 194 getent(cap, len, db_array, fd, name, dep |
|
| Line 194 getent(cap, len, db_array, fd, name, dep |
|
| DB *capdbp; |
DB *capdbp; |
| DBT key, data; |
DBT key, data; |
| register char *r_end, *rp, **db_p; |
register char *r_end, *rp, **db_p; |
| int myfd, eof, foundit, retval; |
int myfd, eof, foundit, retval, clen; |
| char *record; |
char *record, *cbuf; |
| int tc_not_resolved; |
int tc_not_resolved; |
| char pbuf[_POSIX_PATH_MAX]; |
char pbuf[_POSIX_PATH_MAX]; |
| |
|
| Line 250 getent(cap, len, db_array, fd, name, dep |
|
| Line 250 getent(cap, len, db_array, fd, name, dep |
|
| != NULL) { |
!= NULL) { |
| free(record); |
free(record); |
| retval = cdbget(capdbp, &record, name); |
retval = cdbget(capdbp, &record, name); |
| if (capdbp->close(capdbp) < 0) |
if (retval < 0) { |
| |
/* no record available */ |
| |
(void)capdbp->close(capdbp); |
| |
return (retval); |
| |
} |
| |
/* save the data; close frees it */ |
| |
clen = strlen(record); |
| |
cbuf = malloc(clen + 1); |
| |
memcpy(cbuf, record, clen + 1); |
| |
if (capdbp->close(capdbp) < 0) { |
| |
free(cbuf); |
| return (-2); |
return (-2); |
| *len = strlen(record); |
} |
| *cap = malloc(*len + 1); |
*len = clen; |
| memmove(*cap, record, *len + 1); |
*cap = cbuf; |
| return (retval); |
return (retval); |
| } else { |
} else { |
| fd = open(*db_p, O_RDONLY, 0); |
fd = open(*db_p, O_RDONLY, 0); |
| Line 657 cgetnext(bp, db_array) |
|
| Line 667 cgetnext(bp, db_array) |
|
| gottoprec = 1; |
gottoprec = 1; |
| line = toprec; |
line = toprec; |
| } else { |
} else { |
| line = fgetline(pfp, &len); |
line = fgetln(pfp, &len); |
| if (line == NULL && pfp) { |
if (line == NULL && pfp) { |
| (void)fclose(pfp); |
(void)fclose(pfp); |
| if (ferror(pfp)) { |
if (ferror(pfp)) { |
| Line 716 cgetnext(bp, db_array) |
|
| Line 726 cgetnext(bp, db_array) |
|
| *np = '\0'; |
*np = '\0'; |
| break; |
break; |
| } else { /* name field extends beyond the line */ |
} else { /* name field extends beyond the line */ |
| line = fgetline(pfp, &len); |
line = fgetln(pfp, &len); |
| if (line == NULL && pfp) { |
if (line == NULL && pfp) { |
| (void)fclose(pfp); |
(void)fclose(pfp); |
| if (ferror(pfp)) { |
if (ferror(pfp)) { |