version 1.71, 2014/07/13 12:45:23 |
version 1.72, 2014/07/13 12:55:45 |
Line 64 static void http_print(const char *); |
|
Line 64 static void http_print(const char *); |
|
static void http_putchar(char); |
static void http_putchar(char); |
static void http_printquery(const struct req *); |
static void http_printquery(const struct req *); |
static void pathgen(struct req *); |
static void pathgen(struct req *); |
|
static void pg_error_badrequest(const char *); |
|
static void pg_error_internal(void); |
|
static void pg_index(const struct req *); |
|
static void pg_noresult(const struct req *, const char *); |
static void pg_search(const struct req *); |
static void pg_search(const struct req *); |
|
static void pg_searchres(const struct req *, |
|
struct manpage *, size_t); |
static void pg_show(const struct req *, const char *); |
static void pg_show(const struct req *, const char *); |
static void resp_begin_html(int, const char *); |
static void resp_begin_html(int, const char *); |
static void resp_begin_http(int, const char *); |
static void resp_begin_http(int, const char *); |
static void resp_end_html(void); |
static void resp_end_html(void); |
static void resp_error_badrequest(const char *); |
|
static void resp_error_internal(void); |
|
static void resp_index(const struct req *); |
|
static void resp_noresult(const struct req *, |
|
const char *); |
|
static void resp_search(const struct req *, |
|
struct manpage *, size_t); |
|
static void resp_searchform(const struct req *); |
static void resp_searchform(const struct req *); |
static void resp_show(const struct req *, const char *); |
static void resp_show(const struct req *, const char *); |
|
|
Line 458 resp_searchform(const struct req *req) |
|
Line 457 resp_searchform(const struct req *req) |
|
} |
} |
|
|
static void |
static void |
resp_index(const struct req *req) |
pg_index(const struct req *req) |
{ |
{ |
|
|
resp_begin_html(200, NULL); |
resp_begin_html(200, NULL); |
Line 475 resp_index(const struct req *req) |
|
Line 474 resp_index(const struct req *req) |
|
} |
} |
|
|
static void |
static void |
resp_noresult(const struct req *req, const char *msg) |
pg_noresult(const struct req *req, const char *msg) |
{ |
{ |
resp_begin_html(200, NULL); |
resp_begin_html(200, NULL); |
resp_searchform(req); |
resp_searchform(req); |
Line 486 resp_noresult(const struct req *req, const char *msg) |
|
Line 485 resp_noresult(const struct req *req, const char *msg) |
|
} |
} |
|
|
static void |
static void |
resp_error_badrequest(const char *msg) |
pg_error_badrequest(const char *msg) |
{ |
{ |
|
|
resp_begin_html(400, "Bad Request"); |
resp_begin_html(400, "Bad Request"); |
Line 500 resp_error_badrequest(const char *msg) |
|
Line 499 resp_error_badrequest(const char *msg) |
|
} |
} |
|
|
static void |
static void |
resp_error_internal(void) |
pg_error_internal(void) |
{ |
{ |
resp_begin_html(500, "Internal Server Error"); |
resp_begin_html(500, "Internal Server Error"); |
puts("<P>Internal Server Error</P>"); |
puts("<P>Internal Server Error</P>"); |
Line 508 resp_error_internal(void) |
|
Line 507 resp_error_internal(void) |
|
} |
} |
|
|
static void |
static void |
resp_search(const struct req *req, struct manpage *r, size_t sz) |
pg_searchres(const struct req *req, struct manpage *r, size_t sz) |
{ |
{ |
size_t i, iuse, isec; |
size_t i, iuse, isec; |
int prio, priouse; |
int prio, priouse; |
Line 737 format(const struct req *req, const char *file) |
|
Line 736 format(const struct req *req, const char *file) |
|
if (rc >= MANDOCLEVEL_FATAL) { |
if (rc >= MANDOCLEVEL_FATAL) { |
fprintf(stderr, "fatal mandoc error: %s/%s\n", |
fprintf(stderr, "fatal mandoc error: %s/%s\n", |
req->q.manpath, file); |
req->q.manpath, file); |
resp_error_internal(); |
pg_error_internal(); |
return; |
return; |
} |
} |
|
|
Line 749 format(const struct req *req, const char *file) |
|
Line 748 format(const struct req *req, const char *file) |
|
if (NULL == man && NULL == mdoc) { |
if (NULL == man && NULL == mdoc) { |
fprintf(stderr, "fatal mandoc error: %s/%s\n", |
fprintf(stderr, "fatal mandoc error: %s/%s\n", |
req->q.manpath, file); |
req->q.manpath, file); |
resp_error_internal(); |
pg_error_internal(); |
mparse_free(mp); |
mparse_free(mp); |
return; |
return; |
} |
} |
Line 783 pg_show(const struct req *req, const char *path) |
|
Line 782 pg_show(const struct req *req, const char *path) |
|
char *sub; |
char *sub; |
|
|
if (NULL == path || NULL == (sub = strchr(path, '/'))) { |
if (NULL == path || NULL == (sub = strchr(path, '/'))) { |
resp_error_badrequest( |
pg_error_badrequest( |
"You did not specify a page to show."); |
"You did not specify a page to show."); |
return; |
return; |
} |
} |
Line 796 pg_show(const struct req *req, const char *path) |
|
Line 795 pg_show(const struct req *req, const char *path) |
|
*/ |
*/ |
|
|
if (-1 == chdir(path)) { |
if (-1 == chdir(path)) { |
resp_error_badrequest( |
pg_error_badrequest( |
"You specified an invalid manpath."); |
"You specified an invalid manpath."); |
return; |
return; |
} |
} |
Line 825 pg_search(const struct req *req) |
|
Line 824 pg_search(const struct req *req) |
|
*/ |
*/ |
|
|
if (-1 == (chdir(req->q.manpath))) { |
if (-1 == (chdir(req->q.manpath))) { |
resp_error_badrequest( |
pg_error_badrequest( |
"You specified an invalid manpath."); |
"You specified an invalid manpath."); |
return; |
return; |
} |
} |
Line 863 pg_search(const struct req *req) |
|
Line 862 pg_search(const struct req *req) |
|
} |
} |
|
|
if (0 == mansearch(&search, &paths, sz, cp, "Nd", &res, &ressz)) |
if (0 == mansearch(&search, &paths, sz, cp, "Nd", &res, &ressz)) |
resp_noresult(req, "You entered an invalid query."); |
pg_noresult(req, "You entered an invalid query."); |
else if (0 == ressz) |
else if (0 == ressz) |
resp_noresult(req, "No results found."); |
pg_noresult(req, "No results found."); |
else |
else |
resp_search(req, res, ressz); |
pg_searchres(req, res, ressz); |
|
|
for (i = 0; i < sz; i++) |
for (i = 0; i < sz; i++) |
free(cp[i]); |
free(cp[i]); |
|
|
if (-1 == chdir(MAN_DIR)) { |
if (-1 == chdir(MAN_DIR)) { |
fprintf(stderr, "MAN_DIR: %s: %s\n", |
fprintf(stderr, "MAN_DIR: %s: %s\n", |
MAN_DIR, strerror(errno)); |
MAN_DIR, strerror(errno)); |
resp_error_internal(); |
pg_error_internal(); |
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
|
|
|
else if (NULL != req.q.expr) |
else if (NULL != req.q.expr) |
pg_search(&req); |
pg_search(&req); |
else |
else |
resp_index(&req); |
pg_index(&req); |
|
|
for (i = 0; i < (int)req.psz; i++) |
for (i = 0; i < (int)req.psz; i++) |
free(req.p[i]); |
free(req.p[i]); |