Lines Matching refs:req
57 struct req { struct
73 static void parse_manpath_conf(struct req *); argument
74 static void parse_path_info(struct req *, const char *);
75 static void parse_query_string(struct req *, const char *);
78 static void pg_index(const struct req *);
79 static void pg_noresult(const struct req *, int, const char *,
81 static void pg_redirect(const struct req *, const char *);
82 static void pg_search(const struct req *);
83 static void pg_searchres(const struct req *,
85 static void pg_show(struct req *, const char *);
88 static void resp_catman(const struct req *, const char *);
91 static void resp_format(const struct req *, const char *);
92 static void resp_searchform(const struct req *, enum focus);
93 static void resp_show(const struct req *, const char *);
97 static int validate_manpath(const struct req *, const char *);
202 parse_query_string(struct req *req, const char *qs) in parse_query_string() argument
207 req->isquery = 1; in parse_query_string()
208 req->q.manpath = NULL; in parse_query_string()
209 req->q.arch = NULL; in parse_query_string()
210 req->q.sec = NULL; in parse_query_string()
211 req->q.query = NULL; in parse_query_string()
212 req->q.equal = 1; in parse_query_string()
239 set_query_attr(&req->q.query, &val); in parse_query_string()
242 req->q.equal = !strcmp(val, "0"); in parse_query_string()
252 set_query_attr(&req->q.manpath, &val); in parse_query_string()
262 set_query_attr(&req->q.sec, &val); in parse_query_string()
268 set_query_attr(&req->q.arch, &val); in parse_query_string()
431 resp_searchform(const struct req *req, enum focus focus) in resp_searchform() argument
445 if (req->q.query != NULL) in resp_searchform()
446 html_print(req->q.query); in resp_searchform()
465 if (NULL != req->q.sec && in resp_searchform()
466 0 == strcmp(sec_numbers[i], req->q.sec)) in resp_searchform()
476 if (NULL == req->q.arch) in resp_searchform()
481 if (NULL != req->q.arch && in resp_searchform()
482 0 == strcmp(arch_names[i], req->q.arch)) in resp_searchform()
490 if (req->psz > 1) { in resp_searchform()
493 for (i = 0; i < (int)req->psz; i++) { in resp_searchform()
495 if (strcmp(req->q.manpath, req->p[i]) == 0) in resp_searchform()
498 html_print(req->p[i]); in resp_searchform()
523 validate_manpath(const struct req *req, const char* manpath) in validate_manpath() argument
527 for (i = 0; i < req->psz; i++) in validate_manpath()
528 if ( ! strcmp(manpath, req->p[i])) in validate_manpath()
558 pg_index(const struct req *req) in pg_index() argument
562 resp_searchform(req, FOCUS_QUERY); in pg_index()
581 pg_noresult(const struct req *req, int code, const char *http_msg, in pg_noresult() argument
586 resp_searchform(req, FOCUS_QUERY); in pg_noresult()
622 pg_redirect(const struct req *req, const char *name) in pg_redirect() argument
628 if (strcmp(req->q.manpath, req->p[0])) in pg_redirect()
629 printf("%s/", req->q.manpath); in pg_redirect()
630 if (req->q.arch != NULL) in pg_redirect()
631 printf("%s/", req->q.arch); in pg_redirect()
633 if (req->q.sec != NULL) { in pg_redirect()
635 http_encode(req->q.sec); in pg_redirect()
641 pg_searchres(const struct req *req, struct manpage *r, size_t sz) in pg_searchres() argument
654 r[i].file, req->q.manpath); in pg_searchres()
659 if (req->isquery && sz == 1) { in pg_searchres()
668 if (strcmp(req->q.manpath, req->p[0])) in pg_searchres()
669 printf("%s/", req->q.manpath); in pg_searchres()
682 if (req->q.equal || sz == 1) { in pg_searchres()
693 if (req->q.arch == NULL) { in pg_searchres()
721 resp_searchform(req, in pg_searchres()
722 req->q.equal || sz == 1 ? FOCUS_NONE : FOCUS_QUERY); in pg_searchres()
734 if (strcmp(req->q.manpath, req->p[0])) in pg_searchres()
735 printf("%s/", req->q.manpath); in pg_searchres()
748 if (req->q.equal || sz == 1) { in pg_searchres()
750 resp_show(req, r[iuse].file); in pg_searchres()
757 resp_catman(const struct req *req, const char *file) in resp_catman() argument
896 resp_format(const struct req *req, const char *file) in resp_format() argument
914 MPARSE_VALIDATE, MANDOC_OS_OTHER, req->q.manpath); in resp_format()
922 usepath = strcmp(req->q.manpath, req->p[0]); in resp_format()
925 usepath ? req->q.manpath : "", usepath ? "/" : ""); in resp_format()
941 resp_show(const struct req *req, const char *file) in resp_show() argument
948 resp_catman(req, file); in resp_show()
950 resp_format(req, file); in resp_show()
954 pg_show(struct req *req, const char *fullpath) in pg_show() argument
967 if ( ! validate_manpath(req, manpath)) { in pg_show()
996 resp_searchform(req, FOCUS_NONE); in pg_show()
998 resp_show(req, file); in pg_show()
1003 pg_search(const struct req *req) in pg_search() argument
1019 if (chdir(req->q.manpath) == -1) { in pg_search()
1020 warn("chdir %s", req->q.manpath); in pg_search()
1025 search.arch = req->q.arch; in pg_search()
1026 search.sec = req->q.sec; in pg_search()
1028 search.argmode = req->q.equal ? ARG_NAME : ARG_EXPR; in pg_search()
1041 rp = query = mandoc_strdup(req->q.query); in pg_search()
1068 if (req->isquery && req->q.equal && argc == 1) in pg_search()
1069 pg_redirect(req, argv[0]); in pg_search()
1071 pg_noresult(req, 400, "Bad Request", in pg_search()
1074 pg_noresult(req, 404, "Not Found", "No results found."); in pg_search()
1076 pg_searchres(req, res, ressz); in pg_search()
1087 struct req req; in main() local
1131 memset(&req, 0, sizeof(struct req)); in main()
1132 req.q.equal = 1; in main()
1133 parse_manpath_conf(&req); in main()
1143 parse_path_info(&req, path); in main()
1144 if (req.q.manpath == NULL || req.q.sec == NULL || in main()
1145 *req.q.query == '\0' || access(path, F_OK) == -1) in main()
1148 parse_query_string(&req, querystring); in main()
1152 if (req.q.manpath == NULL) in main()
1153 req.q.manpath = mandoc_strdup(req.p[0]); in main()
1154 else if ( ! validate_manpath(&req, req.q.manpath)) { in main()
1160 if (req.q.arch != NULL && validate_arch(req.q.arch) == 0) { in main()
1169 pg_show(&req, path); in main()
1170 else if (NULL != req.q.query) in main()
1171 pg_search(&req); in main()
1173 pg_index(&req); in main()
1175 free(req.q.manpath); in main()
1176 free(req.q.arch); in main()
1177 free(req.q.sec); in main()
1178 free(req.q.query); in main()
1179 for (i = 0; i < (int)req.psz; i++) in main()
1180 free(req.p[i]); in main()
1181 free(req.p); in main()
1189 parse_path_info(struct req *req, const char *path) in parse_path_info() argument
1193 req->isquery = 0; in parse_path_info()
1194 req->q.equal = 1; in parse_path_info()
1195 req->q.manpath = NULL; in parse_path_info()
1196 req->q.arch = NULL; in parse_path_info()
1207 req->q.query = mandoc_strndup(name, sec - name - 1); in parse_path_info()
1208 req->q.sec = mandoc_strdup(sec); in parse_path_info()
1210 req->q.query = mandoc_strdup(name); in parse_path_info()
1211 req->q.sec = NULL; in parse_path_info()
1220 req->q.manpath = mandoc_strndup(path, end - path); in parse_path_info()
1221 if (validate_manpath(req, req->q.manpath)) { in parse_path_info()
1226 free(req->q.manpath); in parse_path_info()
1227 req->q.manpath = NULL; in parse_path_info()
1234 free(req->q.sec); in parse_path_info()
1235 req->q.sec = mandoc_strndup(path, end - path); in parse_path_info()
1248 req->q.arch = mandoc_strndup(path, end - path); in parse_path_info()
1249 if (validate_arch(req->q.arch) == 0) { in parse_path_info()
1260 parse_manpath_conf(struct req *req) in parse_manpath_conf() argument
1279 req->p = mandoc_realloc(req->p, in parse_manpath_conf()
1280 (req->psz + 1) * sizeof(char *)); in parse_manpath_conf()
1293 req->p[req->psz++] = dp; in parse_manpath_conf()
1299 if (req->p == NULL) { in parse_manpath_conf()