mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
Reduce duplicate code.
MFC after: 2 weeks
This commit is contained in:
parent
aea86367e8
commit
dc6ab8ddb4
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=206154
|
@ -207,6 +207,32 @@ servent_unpack(char *p, struct servent *serv, char **aliases,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
parse_result(struct servent *serv, char *buffer, size_t bufsize,
|
||||||
|
char *resultbuf, size_t resultbuflen, int *errnop)
|
||||||
|
{
|
||||||
|
char **aliases;
|
||||||
|
int aliases_size;
|
||||||
|
|
||||||
|
if (bufsize <= resultbuflen + _ALIGNBYTES + sizeof(char *)) {
|
||||||
|
*errnop = ERANGE;
|
||||||
|
return (NS_RETURN);
|
||||||
|
}
|
||||||
|
aliases = (char **)_ALIGN(&buffer[resultbuflen + 1]);
|
||||||
|
aliases_size = (buffer + bufsize - (char *)aliases) / sizeof(char *);
|
||||||
|
if (aliases_size < 1) {
|
||||||
|
*errnop = ERANGE;
|
||||||
|
return (NS_RETURN);
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buffer, resultbuf, resultbuflen);
|
||||||
|
buffer[resultbuflen] = '\0';
|
||||||
|
|
||||||
|
if (servent_unpack(buffer, serv, aliases, aliases_size, errnop) != 0)
|
||||||
|
return ((*errnop == 0) ? NS_NOTFOUND : NS_RETURN);
|
||||||
|
return (NS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
/* files backend implementation */
|
/* files backend implementation */
|
||||||
static void
|
static void
|
||||||
files_endstate(void *p)
|
files_endstate(void *p)
|
||||||
|
@ -258,8 +284,6 @@ files_servent(void *retval, void *mdata, va_list ap)
|
||||||
size_t bufsize;
|
size_t bufsize;
|
||||||
int *errnop;
|
int *errnop;
|
||||||
|
|
||||||
char **aliases;
|
|
||||||
int aliases_size;
|
|
||||||
size_t linesize;
|
size_t linesize;
|
||||||
char *line;
|
char *line;
|
||||||
char **cp;
|
char **cp;
|
||||||
|
@ -347,35 +371,12 @@ files_servent(void *retval, void *mdata, va_list ap)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bufsize <= linesize + _ALIGNBYTES + sizeof(char *)) {
|
rv = parse_result(serv, buffer, bufsize, line, linesize,
|
||||||
*errnop = ERANGE;
|
|
||||||
rv = NS_RETURN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
aliases = (char **)_ALIGN(&buffer[linesize + 1]);
|
|
||||||
aliases_size = (buffer + bufsize -
|
|
||||||
(char *)aliases) / sizeof(char *);
|
|
||||||
if (aliases_size < 1) {
|
|
||||||
*errnop = ERANGE;
|
|
||||||
rv = NS_RETURN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(buffer, line, linesize);
|
|
||||||
buffer[linesize] = '\0';
|
|
||||||
|
|
||||||
rv = servent_unpack(buffer, serv, aliases, aliases_size,
|
|
||||||
errnop);
|
errnop);
|
||||||
if (rv !=0 ) {
|
if (rv == NS_NOTFOUND)
|
||||||
if (*errnop == 0) {
|
|
||||||
rv = NS_NOTFOUND;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
if (rv == NS_RETURN)
|
||||||
else {
|
|
||||||
rv = NS_RETURN;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = NS_NOTFOUND;
|
rv = NS_NOTFOUND;
|
||||||
switch (serv_mdata->how) {
|
switch (serv_mdata->how) {
|
||||||
|
@ -483,9 +484,6 @@ nis_servent(void *retval, void *mdata, va_list ap)
|
||||||
size_t bufsize;
|
size_t bufsize;
|
||||||
int *errnop;
|
int *errnop;
|
||||||
|
|
||||||
char **aliases;
|
|
||||||
int aliases_size;
|
|
||||||
|
|
||||||
name = NULL;
|
name = NULL;
|
||||||
proto = NULL;
|
proto = NULL;
|
||||||
how = (enum nss_lookup_type)mdata;
|
how = (enum nss_lookup_type)mdata;
|
||||||
|
@ -591,32 +589,8 @@ nis_servent(void *retval, void *mdata, va_list ap)
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (bufsize <= resultbuflen + _ALIGNBYTES + sizeof(char *)) {
|
rv = parse_result(serv, buffer, bufsize, resultbuf,
|
||||||
*errnop = ERANGE;
|
resultbuflen, errnop);
|
||||||
rv = NS_RETURN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
aliases = (char **)_ALIGN(&buffer[resultbuflen + 1]);
|
|
||||||
aliases_size =
|
|
||||||
(buffer + bufsize - (char *)aliases) / sizeof(char *);
|
|
||||||
if (aliases_size < 1) {
|
|
||||||
*errnop = ERANGE;
|
|
||||||
rv = NS_RETURN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(buffer, resultbuf, resultbuflen);
|
|
||||||
buffer[resultbuflen] = '\0';
|
|
||||||
|
|
||||||
if (servent_unpack(buffer, serv, aliases, aliases_size,
|
|
||||||
errnop) != 0) {
|
|
||||||
if (*errnop == 0)
|
|
||||||
rv = NS_NOTFOUND;
|
|
||||||
else
|
|
||||||
rv = NS_RETURN;
|
|
||||||
} else
|
|
||||||
rv = NS_SUCCESS;
|
|
||||||
free(resultbuf);
|
free(resultbuf);
|
||||||
|
|
||||||
} while (!(rv & NS_TERMINATE) && how == nss_lt_all);
|
} while (!(rv & NS_TERMINATE) && how == nss_lt_all);
|
||||||
|
|
Loading…
Reference in a new issue