@ -437,11 +437,11 @@ static void http_dirls_sort(dirls_entry_t **ent, int num) {
/* buffer must be able to hold "999.9K"
* conversion is simple but not perfect
*/
static int http_list_directory_sizefmt ( char * buf , off_t size ) {
static int http_list_directory_sizefmt ( char * buf , size_t bufsz , off_t size ) {
const char unit [ ] = " KMGTPE " ; /* Kilo, Mega, Tera, Peta, Exa */
const char * u = unit - 1 ; /* u will always increment at least once */
int remain ;
char * out = buf ;
size_t buflen ;
if ( size < 100 )
size + = 99 ;
@ -465,14 +465,15 @@ static int http_list_directory_sizefmt(char *buf, off_t size) {
u + + ;
}
li_itostrn ( out , 4 , size ) ;
out + = strlen ( out ) ;
out [ 0 ] = ' . ' ;
out [ 1 ] = remain + ' 0 ' ;
out [ 2 ] = * u ;
out [ 3 ] = ' \0 ' ;
li_itostrn ( buf , bufsz , size ) ;
buflen = strlen ( buf ) ;
if ( buflen + 3 > = bufsz ) return buflen ;
buf [ buflen + 0 ] = ' . ' ;
buf [ buflen + 1 ] = remain + ' 0 ' ;
buf [ buflen + 2 ] = * u ;
buf [ buflen + 3 ] = ' \0 ' ;
return ( out + 3 - buf ) ;
return buflen + 3 ;
}
static void http_list_directory_header ( server * srv , connection * con , plugin_data * p , buffer * out ) {
@ -862,7 +863,7 @@ static int http_list_directory(server *srv, connection *con, plugin_data *p, buf
# else
strftime ( datebuf , sizeof ( datebuf ) , " %Y-%b-%d %H:%M:%S " , localtime ( & ( tmp - > mtime ) ) ) ;
# endif
http_list_directory_sizefmt ( sizebuf , tmp - > size ) ;
http_list_directory_sizefmt ( sizebuf , sizeof ( sizebuf ) , tmp - > size ) ;
buffer_append_string_len ( out , CONST_STR_LEN ( " <tr><td class= \" n \" ><a href= \" " ) ) ;
buffer_append_string_encoded ( out , DIRLIST_ENT_NAME ( tmp ) , tmp - > namelen , ENCODING_REL_URI_PART ) ;