blob: 9283d078da3ef633e34376429d3be58e30b29a9b [file] [log] [blame]
#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;
/* first, count the number of extra characters */
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], "&lt;", 4);
j += 3;
}
else if (s[i] == '>') {
memcpy(&SvPVX(x)[j], "&gt;", 4);
j += 3;
}
else if (s[i] == '&') {
memcpy(&SvPVX(x)[j], "&amp;", 5);
j += 4;
}
else if (s[i] == '"') {
memcpy(&SvPVX(x)[j], "&quot;", 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; /*avoid warning*/
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