Hi all,

several places in the source code of httpd have lines like these ones :

>>>>>>>>>>>>>>>>>>>>> (exemple taken from \modules\ssl\ssl_scache.c)
    ap_rputs("<hr>\n", r);
    ap_rputs("<table cellspacing=0 cellpadding=0>\n", r);
    ap_rputs("<tr><td bgcolor=\"#000000\">\n", r);
    ap_rputs("<b><font color=\"#ffffff\" face=\"Arial,Helvetica\">SSL/TLS
Session Cache Status:</font></b>\r", r);
    ...
>>>>>>>>>>>>>>>>>>>>>

This could, IMO be improved in 2 ways.
I would like to have feedback in order to know if patches to implement
theses ideas are interesting and should be proposed.
If yes, I can prepare a set of patches.



First, the whole could be behave the same with only one call to ap_rputs :
>>>>>>>>>>>>>>>>>>>>>
    ap_rputs("<hr>\n"
                  "<table cellspacing=0 cellpadding=0>\n"
                  "<tr><td bgcolor=\"#000000\">\n"
                  "<b><font color=\"#ffffff\"
face=\"Arial,Helvetica\">SSL/TLS Session Cache Status:</font></b>\r", r);
    ...
>>>>>>>>>>>>>>>>>>>>>
This way of doing things is also widely used in the code. It is still very
readable and should run faster.


Second, most of the time, 'ap_rputs' is called with a constant string as
argument (as in the exmaple above). 'ap_rputs' then computes the length of
the string using 'strlen' and then goes further in the processing.
Compilers (at least GCC) knows how to compute constant strings length at
compile time and avoid useless calls to 'strlen'. So, most of the time
letting the compiler compute the length at compile time would be a win.

This could be done easily by turning the function
   AP_DECLARE(int) ap_rputs(const char *str, request_rec *r)
into a macro that would look like :
   #define ap_rputs(a, b)     do { ap_rwrite((a), strlen(a), (b)) } while
(0);

I know that function are preferred to macro and that names of macro should
be in uppercase by convention, but please give me a feed back if you think
it could be a win.


Best regards,

Christophe Jaillet



Reply via email to