1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-08 15:02:10 +03:00

optimize this... Do strlen() ONLY if we need to check

for overflow.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1228766 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jim Jagielski
2012-01-08 01:40:01 +00:00
parent 81cd9d743d
commit 2232c2c14b

View File

@@ -81,15 +81,18 @@ APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(proxy, PROXY, int, create_req,
PROXY_DECLARE(apr_status_t) ap_proxy_strncpy(char *dst, const char *src,
apr_size_t dlen)
{
if ((strlen(src)+1) > dlen) {
/* XXX: APR_ENOSPACE would be better */
return APR_EGENERAL;
char *thenil;
apr_size_t thelen;
thenil = apr_cpystrn(dst, src, dlen);
thelen = thenil - dst;
/* Assume the typical case is smaller copying into bigger
so we have a fast return */
if ((thelen < dlen-1) || ((strlen(src)) == thelen)) {
return APR_SUCCESS;
}
else {
/* XXX: Once slen and dlen are known, no excuse not to memcpy */
apr_cpystrn(dst, src, dlen);
}
return APR_SUCCESS;
/* XXX: APR_ENOSPACE would be better */
return APR_EGENERAL;
}
/* already called in the knowledge that the characters are hex digits */