httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dgau...@hyperreal.org
Subject cvs commit: apache-1.3/src/main alloc.c util_uri.c
Date Sat, 14 Mar 1998 00:32:08 GMT
dgaudet     98/03/13 16:32:08

  Modified:    src/include alloc.h
               src/main alloc.c util_uri.c
  Log:
  I really don't think any other definition of pstrndup() makes sense --
  especially since it always allocates n+1 bytes of memory, even if I go
  back to its original definition.  And on examination, all of our uses
  of pstrndup() are cases where we want a substring of another string, and
  we know the substring is of a certain length.  So speed up pstrndup() by
  using memcpy().  (This small change was worth another 50% performance
  boost when I tested it on test-util-uri.)
  
  Revision  Changes    Path
  1.48      +1 -0      apache-1.3/src/include/alloc.h
  
  Index: alloc.h
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/include/alloc.h,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- alloc.h	1998/03/09 22:42:54	1.47
  +++ alloc.h	1998/03/14 00:32:05	1.48
  @@ -115,6 +115,7 @@
   API_EXPORT(void *) palloc(struct pool *, int nbytes);
   API_EXPORT(void *) pcalloc(struct pool *, int nbytes);
   API_EXPORT(char *) pstrdup(struct pool *, const char *s);
  +/* make a nul terminated copy of the n characters starting with s */
   API_EXPORT(char *) pstrndup(struct pool *, const char *s, int n);
   API_EXPORT(char *) pstrcat(struct pool *,...);	/* all '...' must be char* */
   
  
  
  
  1.77      +3 -1      apache-1.3/src/main/alloc.c
  
  Index: alloc.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/alloc.c,v
  retrieving revision 1.76
  retrieving revision 1.77
  diff -u -r1.76 -r1.77
  --- alloc.c	1998/03/13 13:28:15	1.76
  +++ alloc.c	1998/03/14 00:32:06	1.77
  @@ -726,10 +726,12 @@
   API_EXPORT(char *) pstrndup(struct pool *a, const char *s, int n)
   {
       char *res;
  +
       if (s == NULL)
   	return NULL;
       res = palloc(a, n + 1);
  -    ap_cpystrn(res, s, n + 1);
  +    memcpy(res, s, n);
  +    res[n] = '\0';
       return res;
   }
   
  
  
  
  1.11      +10 -25    apache-1.3/src/main/util_uri.c
  
  Index: util_uri.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/util_uri.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- util_uri.c	1998/03/13 08:13:54	1.10
  +++ util_uri.c	1998/03/14 00:32:07	1.11
  @@ -417,21 +417,6 @@
       uri_delims['\0'] = T_NUL;
   }
   
  -/* Since we know that the string we're duping is of exactly length l
  - * we don't need to go through the expensive (silly) pstrndup().  We
  - * can do much better on our own.  This is worth another 50%
  - * improvement.
  - */
  -static char *special_strdup(pool *p, const char *s, size_t l)
  -{
  -    char *d;
  -
  -    d = palloc(p, l + 1);
  -    memcpy(d, s, l);
  -    d[l] = '\0';
  -    return d;
  -}
  -
   /* parse_uri_components():
    * Parse a given URI, fill in all supplied fields of a uri_components
    * structure. This eliminates the necessity of extracting host, port,
  @@ -468,7 +453,7 @@
   	    ++s;
   	}
   	if (s != uri) {
  -	    uptr->path = special_strdup(p, uri, s - uri);
  +	    uptr->path = pstrndup(p, uri, s - uri);
   	}
   	if (*s == 0) {
   	    return HTTP_OK;
  @@ -478,7 +463,7 @@
   	    s1 = strchr(s, '#');
   	    if (s1) {
   		uptr->fragment = pstrdup(p, s1 + 1);
  -		uptr->query = special_strdup(p, s, s1 - s);
  +		uptr->query = pstrndup(p, s, s1 - s);
   	    }
   	    else {
   		uptr->query = pstrdup(p, s);
  @@ -500,14 +485,14 @@
   	goto deal_with_path;	/* backwards predicted taken! */
       }
   
  -    uptr->scheme = special_strdup(p, uri, s - uri);
  +    uptr->scheme = pstrndup(p, uri, s - uri);
       s += 3;
       hostinfo = s;
       while ((uri_delims[*(unsigned char *)s] & NOTEND_HOSTINFO) == 0) {
   	++s;
       }
       uri = s;	/* whatever follows hostinfo is start of uri */
  -    uptr->hostinfo = special_strdup(p, hostinfo, uri - hostinfo);
  +    uptr->hostinfo = pstrndup(p, hostinfo, uri - hostinfo);
   
       /* If there's a username:password@host:port, the @ we want is the last @...
        * too bad there's no memrchr()... For the C purists, note that hostinfo
  @@ -527,12 +512,12 @@
   	s = memchr(hostinfo, ':', uri - hostinfo);
   	if (s == NULL) {
   	    /* we expect the common case to have no port */
  -	    uptr->hostname = special_strdup(p, hostinfo, uri - hostinfo);
  +	    uptr->hostname = pstrndup(p, hostinfo, uri - hostinfo);
   	    goto deal_with_path;
   	}
  -	uptr->hostname = special_strdup(p, hostinfo, s - hostinfo);
  +	uptr->hostname = pstrndup(p, hostinfo, s - hostinfo);
   	++s;
  -	uptr->port_str = special_strdup(p, s, uri - s);
  +	uptr->port_str = pstrndup(p, s, uri - s);
   	if (uri != s) {
   	    port = strtol(uptr->port_str, &endstr, 10);
   	    uptr->port = port;
  @@ -549,12 +534,12 @@
       /* first colon delimits username:password */
       s1 = memchr(hostinfo, ':', s - hostinfo);
       if (s1) {
  -	uptr->user = special_strdup(p, hostinfo, s1 - hostinfo);
  +	uptr->user = pstrndup(p, hostinfo, s1 - hostinfo);
   	++s1;
  -	uptr->password = special_strdup(p, s1, s - s1);
  +	uptr->password = pstrndup(p, s1, s - s1);
       }
       else {
  -	uptr->user = special_strdup(p, hostinfo, s - hostinfo);
  +	uptr->user = pstrndup(p, hostinfo, s - hostinfo);
       }
       hostinfo = s + 1;
       goto deal_with_host;
  
  
  

Mime
View raw message