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;
- }
- else {
- /* XXX: Once slen and dlen are known, no excuse not to memcpy */
- apr_cpystrn(dst, src, dlen);
+ 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;
}
- return APR_SUCCESS;
+ /* XXX: APR_ENOSPACE would be better */
+ return APR_EGENERAL;
}
/* already called in the knowledge that the characters are hex digits */