#include "mod_perl.h"
#include "util_date.h"
#define TIME_NOW time(NULL)
#define DEFAULT_TIME_FORMAT "%a, %d %b %Y %H:%M:%S %Z"
#define parsedate ap_parseHTTPdate
#define util_pool() perl_get_util_pool()
static
SV *size_string(
size_t
size)
{
SV *sv = newSVpv(
" -"
, 5);
if
(size == (
size_t
)-1) {
}
else
if
(!size) {
sv_setpv(sv,
" 0k"
);
}
else
if
(size < 1024) {
sv_setpv(sv,
" 1k"
);
}
else
if
(size < 1048576) {
sv_setpvf(sv,
"%4dk"
, (size + 512) / 1024);
}
else
if
(size < 103809024) {
sv_setpvf(sv,
"%4.1fM"
, size / 1048576.0);
}
else
{
sv_setpvf(sv,
"%4dM"
, (size + 524288) / 1048576);
}
return
sv;
}
static
SV *my_escape_html(
char
*s)
{
int
i, j;
SV *x;
for
(i = 0, j = 0; s[i] !=
'\0'
; i++)
if
(s[i] ==
'<'
|| s[i] ==
'>'
)
j += 3;
else
if
(s[i] ==
'&'
)
j += 4;
else
if
(s[i] ==
'"'
)
j += 5;
if
(j == 0)
return
newSVpv(s,i);
x = newSV(i + j + 1);
for
(i = 0, j = 0; s[i] !=
'\0'
; i++, j++)
if
(s[i] ==
'<'
) {
memcpy
(&SvPVX(x)[j],
"<"
, 4);
j += 3;
}
else
if
(s[i] ==
'>'
) {
memcpy
(&SvPVX(x)[j],
">"
, 4);
j += 3;
}
else
if
(s[i] ==
'&'
) {
memcpy
(&SvPVX(x)[j],
"&"
, 5);
j += 4;
}
else
if
(s[i] ==
'"'
) {
memcpy
(&SvPVX(x)[j],
"""
, 6);
j += 5;
}
else
SvPVX(x)[j] = s[i];
SvPVX(x)[j] =
'\0'
;
SvCUR_set(x, j);
SvPOK_on(x);
return
x;
}
#define validate_password(passwd, hash) \
(ap_validate_password(passwd, hash) == NULL)
MODULE = Apache::Util PACKAGE = Apache::Util
PROTOTYPES: DISABLE
BOOT:
items = items;
SV *
size_string(size)
size_t
size
char
*
escape_uri(segment)
const
char
*segment
CODE:
RETVAL = ap_os_escape_path(util_pool(), segment, TRUE);
OUTPUT:
RETVAL
SV *
escape_html(s)
char
*s
CODE:
RETVAL = my_escape_html(s);
OUTPUT:
RETVAL
char
*
ht_time(t=TIME_NOW, fmt=DEFAULT_TIME_FORMAT, gmt=TRUE)
time_t
t
const
char
*fmt
int
gmt
CODE:
RETVAL = ap_ht_time(util_pool(), t, fmt, gmt);
OUTPUT:
RETVAL
time_t
parsedate(date)
const
char
*date
int
validate_password(passwd, hash)
const
char
*passwd
const
char
*hash