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/modules/standard mod_autoindex.c
Date Tue, 20 Apr 1999 21:53:27 GMT
dgaudet     99/04/20 14:53:27

  Modified:    src      CHANGES
               src/modules/standard mod_autoindex.c
  Log:
  the width stuff wasn't taking into account &escapes;
  
  PR:		4075
  
  Revision  Changes    Path
  1.1315    +4 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1314
  retrieving revision 1.1315
  diff -u -r1.1314 -r1.1315
  --- CHANGES	1999/04/20 19:42:54	1.1314
  +++ CHANGES	1999/04/20 21:53:22	1.1315
  @@ -1,5 +1,9 @@
   Changes with Apache 1.3.7
   
  +  *) When padding the name with spaces for display, mod_autoindex would
  +     count &, <, and > in their escaped width, messing up the display.
  +     [Dean Gaudet] PR#4075
  +
     *) PORT: fixed a compilation problem on NEXT.
        [Jacques Distler <distler@golem.ph.utexas.edu>] PR#4130
   
  
  
  
  1.102     +21 -64    apache-1.3/src/modules/standard/mod_autoindex.c
  
  Index: mod_autoindex.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_autoindex.c,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- mod_autoindex.c	1999/01/04 19:49:41	1.101
  +++ mod_autoindex.c	1999/04/20 21:53:25	1.102
  @@ -410,8 +410,8 @@
   	    else {
   		int width = atoi(&w[10]);
   
  -		if (width < 1) {
  -		    return "NameWidth value must be greater than 1";
  +		if (width < 5) {
  +		    return "NameWidth value must be greater than 5";
   		}
   		d_cfg->name_width = width;
   		d_cfg->name_adjust = K_NOADJUST;
  @@ -1042,41 +1042,6 @@
       }
   }
   
  -/*
  - * Fit a string into a specified buffer width, marking any
  - * truncation.  The size argument is the actual buffer size, including
  - * the \0 termination byte.  The buffer will be prefilled with blanks.
  - * If the pad argument is false, any extra spaces at the end of the
  - * buffer are omitted.  (Used when constructing anchors.)
  - */
  -static ap_inline char *widthify(const char *s, char *buff, int size, int pad)
  -{
  -    int s_len;
  -
  -    memset(buff, ' ', size);
  -    buff[size - 1] = '\0';
  -    s_len = strlen(s);
  -    if (s_len > (size - 1)) {
  -	ap_cpystrn(buff, s, size);
  -	if (size > 1) {
  -	    buff[size - 2] = '>';
  -	}
  -	if (size > 2) {
  -	    buff[size - 3] = '.';
  -	}
  -	if (size > 3) {
  -	    buff[size - 4] = '.';
  -	}
  -    }
  -    else {
  -	ap_cpystrn(buff, s, s_len + 1);
  -	if (pad) {
  -	    buff[s_len] = ' ';
  -	}
  -    }
  -    return buff;
  -}
  -
   static void output_directories(struct ent **ar, int n,
   			       autoindex_config_rec *d, request_rec *r,
   			       int autoindex_opts, char keyid, char direction)
  @@ -1088,6 +1053,7 @@
       pool *scratch = ap_make_sub_pool(r->pool);
       int name_width;
       char *name_scratch;
  +    char *pad_scratch;
   
       if (name[0] == '\0') {
   	name = "/";
  @@ -1102,10 +1068,10 @@
   	    }
   	}
       }
  -    ++name_width;
       name_scratch = ap_palloc(r->pool, name_width + 1);
  -    memset(name_scratch, ' ', name_width);
  -    name_scratch[name_width] = '\0';
  +    pad_scratch = ap_palloc(r->pool, name_width + 1);
  +    memset(pad_scratch, ' ', name_width);
  +    pad_scratch[name_width] = '\0';
   
       if (autoindex_opts & FANCY_INDEXING) {
   	ap_rputs("<PRE>", r);
  @@ -1122,15 +1088,9 @@
   		    );
   	    }
   	    ap_rputs("> ", r);
  -	}
  -        emit_link(r, widthify("Name", name_scratch,
  -			      (name_width > 5) ? 5 : name_width, K_NOPAD),
  -		  K_NAME, keyid, direction, static_columns);
  -	if (name_width > 5) {
  -	    memset(name_scratch, ' ', name_width);
  -	    name_scratch[name_width] = '\0';
  -	    ap_rputs(&name_scratch[5], r);
   	}
  +        emit_link(r, "Name", K_NAME, keyid, direction, static_columns);
  +	ap_rputs(pad_scratch + 4, r);
   	/*
   	 * Emit the guaranteed-at-least-one-space-between-columns byte.
   	 */
  @@ -1156,7 +1116,6 @@
   
       for (x = 0; x < n; x++) {
   	char *anchor, *t, *t2;
  -	char *pad;
   	int nwidth;
   
   	ap_clear_pool(scratch);
  @@ -1167,15 +1126,12 @@
   	    if (t[0] == '\0') {
   		t = "/";
   	    }
  -	       /* 1234567890123456 */
   	    t2 = "Parent Directory";
  -	    pad = name_scratch + 16;
   	    anchor = ap_escape_html(scratch, ap_os_escape_path(scratch, t, 0));
   	}
   	else {
   	    t = ar[x]->name;
  -	    pad = name_scratch + strlen(t);
  -	    t2 = ap_escape_html(scratch, t);
  +	    t2 = t;
   	    anchor = ap_escape_html(scratch, ap_os_escape_path(scratch, t, 0));
   	}
   
  @@ -1200,18 +1156,19 @@
   		ap_rputs("</A>", r);
   	    }
   
  -	    ap_rvputs(r, " <A HREF=\"", anchor, "\">",
  -		      widthify(t2, name_scratch, name_width, K_NOPAD),
  -		      "</A>", NULL);
  -	    /*
  -	     * We know that widthify() prefilled the buffer with spaces
  -	     * before doing its thing, so use them.
  -	     */
   	    nwidth = strlen(t2);
  -	    if (nwidth < (name_width - 1)) {
  -		name_scratch[nwidth] = ' ';
  -		ap_rputs(&name_scratch[nwidth], r);
  +	    if (nwidth > name_width) {
  +	      memcpy(name_scratch, t2, name_width - 3);
  +	      name_scratch[name_width - 3] = '.';
  +	      name_scratch[name_width - 2] = '.';
  +	      name_scratch[name_width - 1] = '>';
  +	      name_scratch[name_width] = 0;
  +	      t2 = name_scratch;
  +	      nwidth = name_width;
   	    }
  +	    ap_rvputs(r, " <A HREF=\"", anchor, "\">",
  +	      ap_escape_html(scratch, t2), pad_scratch + nwidth,
  +	      "</A>", NULL);
   	    /*
   	     * The blank before the storm.. er, before the next field.
   	     */
  @@ -1241,7 +1198,7 @@
   	}
   	else {
   	    ap_rvputs(r, "<LI><A HREF=\"", anchor, "\"> ", t2,
  -		      "</A>", pad, NULL);
  +		      "</A>", pad_scratch + strlen(t2), NULL);
   	}
   	ap_rputc('\n', r);
       }
  
  
  

Mime
View raw message