| version 1.46, 2006/05/29 21:55:41 |
version 1.47, 2006/07/04 03:53:54 |
| Line 110 cgetset(const char *ent) |
|
| Line 110 cgetset(const char *ent) |
|
| char *dest; |
char *dest; |
| |
|
| if (ent == NULL) { |
if (ent == NULL) { |
| if (toprec) |
if (toprec != NULL) |
| free(toprec); |
free(toprec); |
| toprec = NULL; |
toprec = NULL; |
| topreclen = 0; |
topreclen = 0; |
| return (0); |
return 0; |
| } |
} |
| topreclen = strlen(ent); |
topreclen = strlen(ent); |
| if ((toprec = malloc (topreclen + 1)) == NULL) { |
if ((toprec = malloc(topreclen + 1)) == NULL) { |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-1); |
return -1; |
| } |
} |
| gottoprec = 0; |
gottoprec = 0; |
| |
|
| source=ent; |
source = ent; |
| dest=toprec; |
dest = toprec; |
| while (*source) { /* Strip whitespace */ |
while (*source != '\0') { /* Strip whitespace */ |
| *dest++ = *source++; /* Do not check first field */ |
*dest++ = *source++; /* Do not check first field */ |
| while (*source == ':') { |
while (*source == ':') { |
| check=source+1; |
check = source + 1; |
| while (*check && (isspace((unsigned char)*check) || |
while (*check && (isspace((unsigned char)*check) || |
| (*check=='\\' && isspace((unsigned char)check[1])))) |
(*check=='\\' && isspace((unsigned char)check[1])))) |
| ++check; |
++check; |
| if( *check == ':' ) |
if (*check == ':') |
| source=check; |
source = check; |
| else |
else |
| break; |
break; |
| |
|
| } |
} |
| } |
} |
| *dest=0; |
*dest = 0; |
| |
|
| return (0); |
return 0; |
| } |
} |
| |
|
| /* |
/* |
| Line 177 cgetcap(buf, cap, type) |
|
| Line 177 cgetcap(buf, cap, type) |
|
| */ |
*/ |
| for (;;) |
for (;;) |
| if (*bp == '\0') |
if (*bp == '\0') |
| return (NULL); |
return NULL; |
| else |
else if (*bp++ == ':') |
| if (*bp++ == ':') |
break; |
| break; |
|
| |
|
| /* |
/* |
| * Try to match (cap, type) in buf. |
* Try to match (cap, type) in buf. |
| Line 190 cgetcap(buf, cap, type) |
|
| Line 189 cgetcap(buf, cap, type) |
|
| if (*cp != '\0') |
if (*cp != '\0') |
| continue; |
continue; |
| if (*bp == '@') |
if (*bp == '@') |
| return (NULL); |
return NULL; |
| if (type == ':') { |
if (type == ':') { |
| if (*bp != '\0' && *bp != ':') |
if (*bp != '\0' && *bp != ':') |
| continue; |
continue; |
| return(bp); |
return bp; |
| } |
} |
| if (*bp != type) |
if (*bp != type) |
| continue; |
continue; |
| bp++; |
bp++; |
| return (*bp == '@' ? NULL : bp); |
return *bp == '@' ? NULL : bp; |
| } |
} |
| /* NOTREACHED */ |
/* NOTREACHED */ |
| } |
} |
| Line 223 cgetent(char **buf, const char * const * |
|
| Line 222 cgetent(char **buf, const char * const * |
|
| _DIAGASSERT(db_array != NULL); |
_DIAGASSERT(db_array != NULL); |
| _DIAGASSERT(name != NULL); |
_DIAGASSERT(name != NULL); |
| |
|
| return (getent(buf, &dummy, db_array, -1, name, 0, NULL)); |
return getent(buf, &dummy, db_array, -1, name, 0, NULL); |
| } |
} |
| |
|
| /* |
/* |
| Line 257 getent(char **cap, size_t *len, const ch |
|
| Line 256 getent(char **cap, size_t *len, const ch |
|
| size_t clen; |
size_t clen; |
| #endif |
#endif |
| char *record, *newrecord; |
char *record, *newrecord; |
| char *r_end, *rp = NULL; /* pacify gcc */ |
char *r_end, *rp; /* pacify gcc */ |
| const char * const *db_p; |
const char * const *db_p; |
| int myfd = 0, eof, foundit; |
int myfd, eof, foundit; |
| int tc_not_resolved; |
int tc_not_resolved; |
| |
|
| _DIAGASSERT(cap != NULL); |
_DIAGASSERT(cap != NULL); |
| Line 269 getent(char **cap, size_t *len, const ch |
|
| Line 268 getent(char **cap, size_t *len, const ch |
|
| _DIAGASSERT(name != NULL); |
_DIAGASSERT(name != NULL); |
| /* nfield may be NULL */ |
/* nfield may be NULL */ |
| |
|
| |
myfd = 0; |
| |
rp = NULL; |
| |
|
| /* |
/* |
| * Return with ``loop detected'' error if we've recursed more than |
* Return with ``loop detected'' error if we've recursed more than |
| * MAX_RECURSION times. |
* MAX_RECURSION times. |
| */ |
*/ |
| if (depth > MAX_RECURSION) |
if (depth > MAX_RECURSION) |
| return (-3); |
return -3; |
| |
|
| /* |
/* |
| * Check if we have a top record from cgetset(). |
* Check if we have a top record from cgetset(). |
| */ |
*/ |
| if (depth == 0 && toprec != NULL && cgetmatch(toprec, name) == 0) { |
if (depth == 0 && toprec != NULL && cgetmatch(toprec, name) == 0) { |
| if ((record = malloc (topreclen + BFRAG)) == NULL) { |
if ((record = malloc(topreclen + BFRAG)) == NULL) { |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); |
return -2; |
| } |
} |
| (void)strcpy(record, toprec); /* XXX: strcpy is safe */ |
(void)strcpy(record, toprec); /* XXX: strcpy is safe */ |
| db_p = db_array; |
db_p = db_array; |
| Line 295 getent(char **cap, size_t *len, const ch |
|
| Line 297 getent(char **cap, size_t *len, const ch |
|
| */ |
*/ |
| if ((record = malloc(BFRAG)) == NULL) { |
if ((record = malloc(BFRAG)) == NULL) { |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); |
return -2; |
| } |
} |
| r_end = record + BFRAG; |
r_end = record + BFRAG; |
| foundit = 0; |
foundit = 0; |
| Line 322 getent(char **cap, size_t *len, const ch |
|
| Line 324 getent(char **cap, size_t *len, const ch |
|
| if (retval < 0) { |
if (retval < 0) { |
| /* no record available */ |
/* no record available */ |
| (void)capdbp->close(capdbp); |
(void)capdbp->close(capdbp); |
| return (retval); |
return retval; |
| } |
} |
| /* save the data; close frees it */ |
/* save the data; close frees it */ |
| clen = strlen(record); |
clen = strlen(record); |
| if ((cbuf = malloc(clen + 1)) == NULL) { |
if ((cbuf = malloc(clen + 1)) == NULL) { |
| (void)capdbp->close(capdbp); |
(void)capdbp->close(capdbp); |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); |
return -2; |
| } |
} |
| memmove(cbuf, record, clen + 1); |
memmove(cbuf, record, clen + 1); |
| if (capdbp->close(capdbp) < 0) { |
if (capdbp->close(capdbp) < 0) { |
| Line 337 getent(char **cap, size_t *len, const ch |
|
| Line 339 getent(char **cap, size_t *len, const ch |
|
| |
|
| free(cbuf); |
free(cbuf); |
| errno = serrno; |
errno = serrno; |
| return (-2); |
return -2; |
| } |
} |
| *len = clen; |
*len = clen; |
| *cap = cbuf; |
*cap = cbuf; |
| return (retval); |
return retval; |
| } else |
} else |
| #endif |
#endif |
| { |
{ |
| Line 372 getent(char **cap, size_t *len, const ch |
|
| Line 374 getent(char **cap, size_t *len, const ch |
|
| */ |
*/ |
| b_end = buf; |
b_end = buf; |
| bp = buf; |
bp = buf; |
| cp = 0; |
cp = NULL; |
| slash = 0; |
slash = 0; |
| for (;;) { |
for (;;) { |
| |
|
| /* |
/* |
| * Read in a line implementing (\, newline) |
* Read in a line implementing (\, newline) |
| * line continuation. |
* line continuation. |
| Line 394 getent(char **cap, size_t *len, const ch |
|
| Line 395 getent(char **cap, size_t *len, const ch |
|
| |
|
| free(record); |
free(record); |
| errno = serrno; |
errno = serrno; |
| return (-2); |
return -2; |
| } else { |
} else { |
| fd = -1; |
fd = -1; |
| eof = 1; |
eof = 1; |
| Line 425 getent(char **cap, size_t *len, const ch |
|
| Line 426 getent(char **cap, size_t *len, const ch |
|
| * to the colon (eliminating the |
* to the colon (eliminating the |
| * field). |
* field). |
| */ |
*/ |
| if (cp) |
if (cp != NULL) |
| rp = cp; |
rp = cp; |
| else |
else |
| cp = rp; |
cp = rp; |
| Line 457 getent(char **cap, size_t *len, const ch |
|
| Line 458 getent(char **cap, size_t *len, const ch |
|
| if (myfd) |
if (myfd) |
| (void)close(fd); |
(void)close(fd); |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); |
return -2; |
| } |
} |
| record = newrecord; |
record = newrecord; |
| r_end = record + newsize; |
r_end = record + newsize; |
| Line 485 getent(char **cap, size_t *len, const ch |
|
| Line 486 getent(char **cap, size_t *len, const ch |
|
| /* |
/* |
| * See if this is the record we want ... |
* See if this is the record we want ... |
| */ |
*/ |
| if (cgetmatch(record, name) == 0) { |
if (cgetmatch(record, name) == 0) |
| if (nfield == NULL || !nfcmp(nfield, record)) { |
if (nfield == NULL || !nfcmp(nfield, record)) { |
| foundit = 1; |
foundit = 1; |
| break; /* found it! */ |
break; /* found it! */ |
| } |
} |
| } |
|
| } |
} |
| } |
} |
| if (foundit) |
if (foundit) |
| break; |
break; |
| } |
} |
| |
|
| if (!foundit) |
if (!foundit) |
| return (-1); |
return -1; |
| |
|
| /* |
/* |
| * Got the capability record, but now we have to expand all tc=name |
* Got the capability record, but now we have to expand all tc=name |
|
|
| if (myfd) |
if (myfd) |
| (void)close(fd); |
(void)close(fd); |
| free(record); |
free(record); |
| return (iret); |
return iret; |
| } |
} |
| if (iret == 1) |
if (iret == 1) |
| tc_not_resolved = 1; |
tc_not_resolved = 1; |
|
|
| for (;;) |
for (;;) |
| if (*s == '\0') |
if (*s == '\0') |
| break; |
break; |
| else |
else if (*s++ == ':') |
| if (*s++ == ':') |
break; |
| break; |
|
| newilen -= s - newicap; |
newilen -= s - newicap; |
| newicap = s; |
newicap = s; |
| |
|
| /* make sure interpolated record is `:'-terminated */ |
/* make sure interpolated record is `:'-terminated */ |
| s += newilen; |
s += newilen; |
| if (*(s-1) != ':') { |
if (*(s - 1) != ':') { |
| *s = ':'; /* overwrite NUL with : */ |
*s = ':'; /* overwrite NUL with : */ |
| newilen++; |
newilen++; |
| } |
} |
|
|
| (void)close(fd); |
(void)close(fd); |
| free(icap); |
free(icap); |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); |
return -2; |
| } |
} |
| record = newrecord; |
record = newrecord; |
| r_end = record + newsize; |
r_end = record + newsize; |
|
|
| * Start scan on `:' so next cgetcap works properly |
* Start scan on `:' so next cgetcap works properly |
| * (cgetcap always skips first field). |
* (cgetcap always skips first field). |
| */ |
*/ |
| scan = s-1; |
scan = s - 1; |
| } |
} |
| |
|
| } |
} |
|
|
| realloc(record, (size_t)(rp - record))) == NULL) { |
realloc(record, (size_t)(rp - record))) == NULL) { |
| free(record); |
free(record); |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); |
return -2; |
| } |
} |
| record = newrecord; |
record = newrecord; |
| } |
} |
| |
|
| *cap = record; |
*cap = record; |
| if (tc_not_resolved) |
if (tc_not_resolved) |
| return (1); |
return 1; |
| return (0); |
return 0; |
| } |
} |
| |
|
| #ifndef SMALL |
#ifndef SMALL |
| Line 669 cdbget(DB *capdbp, char **bp, const char |
|
| Line 668 cdbget(DB *capdbp, char **bp, const char |
|
| /* Get the reference. */ |
/* Get the reference. */ |
| switch(capdbp->get(capdbp, &key, &data, 0)) { |
switch(capdbp->get(capdbp, &key, &data, 0)) { |
| case -1: |
case -1: |
| return (-2); |
return -2; |
| case 1: |
case 1: |
| return (-1); |
return -1; |
| } |
} |
| |
|
| /* If not an index to another record, leave. */ |
/* If not an index to another record, leave. */ |
| Line 683 cdbget(DB *capdbp, char **bp, const char |
|
| Line 682 cdbget(DB *capdbp, char **bp, const char |
|
| } |
} |
| |
|
| *bp = (char *)data.data + 1; |
*bp = (char *)data.data + 1; |
| return (((char *)(data.data))[0] == TCERR ? 1 : 0); |
return ((char *)(data.data))[0] == TCERR ? 1 : 0; |
| } |
} |
| #endif |
#endif |
| |
|
| Line 711 cgetmatch(const char *buf, const char *n |
|
| Line 710 cgetmatch(const char *buf, const char *n |
|
| for (;;) |
for (;;) |
| if (*np == '\0') { |
if (*np == '\0') { |
| if (*bp == '|' || *bp == ':' || *bp == '\0') |
if (*bp == '|' || *bp == ':' || *bp == '\0') |
| return (0); |
return 0; |
| else |
else |
| break; |
break; |
| } else |
} else if (*bp++ != *np++) |
| if (*bp++ != *np++) |
break; |
| break; |
|
| |
|
| /* |
/* |
| * Match failed, skip to next name in record. |
* Match failed, skip to next name in record. |
| Line 724 cgetmatch(const char *buf, const char *n |
|
| Line 722 cgetmatch(const char *buf, const char *n |
|
| if (bp > buf) |
if (bp > buf) |
| bp--; /* a '|' or ':' may have stopped the match */ |
bp--; /* a '|' or ':' may have stopped the match */ |
| else |
else |
| return (-1); |
return -1; |
| for (;;) |
for (;;) |
| if (*bp == '\0' || *bp == ':') |
if (*bp == '\0' || *bp == ':') |
| return (-1); /* match failed totally */ |
return -1; /* match failed totally */ |
| else |
else if (*bp++ == '|') |
| if (*bp++ == '|') |
break; /* found next name */ |
| break; /* found next name */ |
|
| } |
} |
| } |
} |
| |
|
| Line 742 cgetfirst(char **buf, const char * const |
|
| Line 739 cgetfirst(char **buf, const char * const |
|
| _DIAGASSERT(db_array != NULL); |
_DIAGASSERT(db_array != NULL); |
| |
|
| (void)cgetclose(); |
(void)cgetclose(); |
| return (cgetnext(buf, db_array)); |
return cgetnext(buf, db_array); |
| } |
} |
| |
|
| static FILE *pfp; |
static FILE *pfp; |
|
|
| dbp = NULL; |
dbp = NULL; |
| gottoprec = 0; |
gottoprec = 0; |
| slash = 0; |
slash = 0; |
| return(0); |
return 0; |
| } |
} |
| |
|
| /* |
/* |
| Line 784 cgetnext(char **bp, const char * const * |
|
| Line 781 cgetnext(char **bp, const char * const * |
|
| |
|
| if (pfp == NULL && (pfp = fopen(*dbp, "r")) == NULL) { |
if (pfp == NULL && (pfp = fopen(*dbp, "r")) == NULL) { |
| (void)cgetclose(); |
(void)cgetclose(); |
| return (-1); |
return -1; |
| } |
} |
| for(;;) { |
for (;;) { |
| if (toprec && !gottoprec) { |
if (toprec != NULL && !gottoprec) { |
| gottoprec = 1; |
gottoprec = 1; |
| line = toprec; |
line = toprec; |
| } else { |
} else { |
| Line 797 cgetnext(char **bp, const char * const * |
|
| Line 794 cgetnext(char **bp, const char * const * |
|
| return -1; |
return -1; |
| if (ferror(pfp)) { |
if (ferror(pfp)) { |
| (void)cgetclose(); |
(void)cgetclose(); |
| return (-1); |
return -1; |
| } else { |
} else { |
| (void)fclose(pfp); |
(void)fclose(pfp); |
| pfp = NULL; |
pfp = NULL; |
| if (*++dbp == NULL) { |
if (*++dbp == NULL) { |
| (void)cgetclose(); |
(void)cgetclose(); |
| return (0); |
return 0; |
| } else if ((pfp = |
} else if ((pfp = |
| fopen(*dbp, "r")) == NULL) { |
fopen(*dbp, "r")) == NULL) { |
| (void)cgetclose(); |
(void)cgetclose(); |
| return (-1); |
return -1; |
| } else |
} else |
| continue; |
continue; |
| } |
} |
| Line 858 cgetnext(char **bp, const char * const * |
|
| Line 855 cgetnext(char **bp, const char * const * |
|
| if (line == NULL && pfp) { |
if (line == NULL && pfp) { |
| if (ferror(pfp)) { |
if (ferror(pfp)) { |
| (void)cgetclose(); |
(void)cgetclose(); |
| return (-1); |
return -1; |
| } |
} |
| (void)fclose(pfp); |
(void)fclose(pfp); |
| pfp = NULL; |
pfp = NULL; |
| Line 871 cgetnext(char **bp, const char * const * |
|
| Line 868 cgetnext(char **bp, const char * const * |
|
| if (len > sizeof(buf)) |
if (len > sizeof(buf)) |
| return -1; |
return -1; |
| rp = buf; |
rp = buf; |
| for(cp = nbuf; *cp != '\0'; cp++) |
for (cp = nbuf; *cp != '\0'; cp++) |
| if (*cp == '|' || *cp == ':') |
if (*cp == '|' || *cp == ':') |
| break; |
break; |
| else |
else |
| Line 890 cgetnext(char **bp, const char * const * |
|
| Line 887 cgetnext(char **bp, const char * const * |
|
| if (status == -2 || status == -3) |
if (status == -2 || status == -3) |
| (void)cgetclose(); |
(void)cgetclose(); |
| |
|
| return (status + 1); |
return status + 1; |
| } |
} |
| /* NOTREACHED */ |
/* NOTREACHED */ |
| } |
} |
| Line 922 cgetstr(char *buf, const char *cap, char |
|
| Line 919 cgetstr(char *buf, const char *cap, char |
|
| */ |
*/ |
| bp = cgetcap(buf, cap, '='); |
bp = cgetcap(buf, cap, '='); |
| if (bp == NULL) |
if (bp == NULL) |
| return (-1); |
return -1; |
| |
|
| /* |
/* |
| * Conversion / storage allocation loop ... Allocate memory in |
* Conversion / storage allocation loop ... Allocate memory in |
| Line 930 cgetstr(char *buf, const char *cap, char |
|
| Line 927 cgetstr(char *buf, const char *cap, char |
|
| */ |
*/ |
| if ((mem = malloc(SFRAG)) == NULL) { |
if ((mem = malloc(SFRAG)) == NULL) { |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); /* couldn't even allocate the first fragment */ |
return -2; /* couldn't even allocate the first fragment */ |
| } |
} |
| m_room = SFRAG; |
m_room = SFRAG; |
| mp = mem; |
mp = mem; |
| Line 1004 cgetstr(char *buf, const char *cap, char |
|
| Line 1001 cgetstr(char *buf, const char *cap, char |
|
| |
|
| if ((newmem = realloc(mem, size + SFRAG)) == NULL) { |
if ((newmem = realloc(mem, size + SFRAG)) == NULL) { |
| free(mem); |
free(mem); |
| return (-2); |
return -2; |
| } |
} |
| mem = newmem; |
mem = newmem; |
| m_room = SFRAG; |
m_room = SFRAG; |
| Line 1021 cgetstr(char *buf, const char *cap, char |
|
| Line 1018 cgetstr(char *buf, const char *cap, char |
|
| if (m_room != 0) { |
if (m_room != 0) { |
| if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { |
if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { |
| free(mem); |
free(mem); |
| return (-2); |
return -2; |
| } |
} |
| mem = newmem; |
mem = newmem; |
| } |
} |
| *str = mem; |
*str = mem; |
| return (len); |
return len; |
| } |
} |
| |
|
| /* |
/* |
| Line 1056 cgetustr(char *buf, const char *cap, cha |
|
| Line 1053 cgetustr(char *buf, const char *cap, cha |
|
| * Find string capability cap |
* Find string capability cap |
| */ |
*/ |
| if ((bp = cgetcap(buf, cap, '=')) == NULL) |
if ((bp = cgetcap(buf, cap, '=')) == NULL) |
| return (-1); |
return -1; |
| |
|
| /* |
/* |
| * Conversion / storage allocation loop ... Allocate memory in |
* Conversion / storage allocation loop ... Allocate memory in |
| Line 1064 cgetustr(char *buf, const char *cap, cha |
|
| Line 1061 cgetustr(char *buf, const char *cap, cha |
|
| */ |
*/ |
| if ((mem = malloc(SFRAG)) == NULL) { |
if ((mem = malloc(SFRAG)) == NULL) { |
| errno = ENOMEM; |
errno = ENOMEM; |
| return (-2); /* couldn't even allocate the first fragment */ |
return -2; /* couldn't even allocate the first fragment */ |
| } |
} |
| m_room = SFRAG; |
m_room = SFRAG; |
| mp = mem; |
mp = mem; |
| Line 1088 cgetustr(char *buf, const char *cap, cha |
|
| Line 1085 cgetustr(char *buf, const char *cap, cha |
|
| |
|
| if ((newmem = realloc(mem, size + SFRAG)) == NULL) { |
if ((newmem = realloc(mem, size + SFRAG)) == NULL) { |
| free(mem); |
free(mem); |
| return (-2); |
return -2; |
| } |
} |
| mem = newmem; |
mem = newmem; |
| m_room = SFRAG; |
m_room = SFRAG; |
| Line 1105 cgetustr(char *buf, const char *cap, cha |
|
| Line 1102 cgetustr(char *buf, const char *cap, cha |
|
| if (m_room != 0) { |
if (m_room != 0) { |
| if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { |
if ((newmem = realloc(mem, (size_t)(mp - mem))) == NULL) { |
| free(mem); |
free(mem); |
| return (-2); |
return -2; |
| } |
} |
| mem = newmem; |
mem = newmem; |
| } |
} |
| *str = mem; |
*str = mem; |
| return (len); |
return len; |
| } |
} |
| |
|
| /* |
/* |
| Line 1135 cgetnum(char *buf, const char *cap, long |
|
| Line 1132 cgetnum(char *buf, const char *cap, long |
|
| */ |
*/ |
| bp = cgetcap(buf, cap, '#'); |
bp = cgetcap(buf, cap, '#'); |
| if (bp == NULL) |
if (bp == NULL) |
| return (-1); |
return -1; |
| |
|
| /* |
/* |
| * Look at value and determine numeric base: |
* Look at value and determine numeric base: |
| Line 1178 cgetnum(char *buf, const char *cap, long |
|
| Line 1175 cgetnum(char *buf, const char *cap, long |
|
| * Return value and success. |
* Return value and success. |
| */ |
*/ |
| *num = n; |
*num = n; |
| return (0); |
return 0; |
| } |
} |
| |
|
| |
|
| Line 1195 nfcmp(char *nf, char *rec) |
|
| Line 1192 nfcmp(char *nf, char *rec) |
|
| _DIAGASSERT(rec != NULL); |
_DIAGASSERT(rec != NULL); |
| |
|
| for (cp = rec; *cp != ':'; cp++) |
for (cp = rec; *cp != ':'; cp++) |
| ; |
continue; |
| |
|
| tmp = *(cp + 1); |
tmp = *(cp + 1); |
| *(cp + 1) = '\0'; |
*(cp + 1) = '\0'; |
| ret = strcmp(nf, rec); |
ret = strcmp(nf, rec); |
| *(cp + 1) = tmp; |
*(cp + 1) = tmp; |
| |
|
| return (ret); |
return ret; |
| } |
} |