Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Fix the /doc page so that it returns status 200 (not 404) after appending "index.html" to the end of a page name. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
8b4b4247dcf0dee75da7cfd6d785c9c8 |
| User & Date: | drh 2015-01-29 01:48:22.652 |
Context
|
2015-01-29
| ||
| 09:14 | Changelog additions, and a single "const" addition ... (check-in: 9586ac14b8 user: jan.nijtmans tags: trunk) | |
| 01:48 | Fix the /doc page so that it returns status 200 (not 404) after appending "index.html" to the end of a page name. ... (check-in: 8b4b4247dc user: drh tags: trunk) | |
| 01:25 | Fix harmless compiler warnings. ... (check-in: ef108998c4 user: drh tags: trunk) | |
Changes
Changes to src/doc.c.
| ︙ | ︙ | |||
388 389 390 391 392 393 394 | const char *zOrigName = "?"; /* Original document name */ const char *zMime; /* Document MIME type */ char *zCheckin = "tip"; /* The checkin holding the document */ int vid = 0; /* Artifact of checkin */ int rid = 0; /* Artifact of file */ int i; /* Loop counter */ Blob filebody; /* Content of the documentation file */ | | | > > | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 |
const char *zOrigName = "?"; /* Original document name */
const char *zMime; /* Document MIME type */
char *zCheckin = "tip"; /* The checkin holding the document */
int vid = 0; /* Artifact of checkin */
int rid = 0; /* Artifact of file */
int i; /* Loop counter */
Blob filebody; /* Content of the documentation file */
int nMiss = (-1); /* Failed attempts to find the document */
static const char *azSuffix[] = {
"index.html", "index.wiki", "index.md"
};
login_check_credentials();
if( !g.perm.Read ){ login_needed(); return; }
while( rid==0 && (++nMiss)<=ArraySize(azSuffix) ){
zName = PD("name", "tip/index.wiki");
for(i=0; zName[i] && zName[i]!='/'; i++){}
zCheckin = mprintf("%.*s", i, zName);
if( fossil_strcmp(zCheckin,"ckout")==0 && db_open_local(0)==0 ){
zCheckin = "tip";
}
if( nMiss==ArraySize(azSuffix) ){
zName = "404.md";
}else if( zName[i]==0 ){
assert( nMiss>=0 && nMiss<ArraySize(azSuffix) );
zName = azSuffix[nMiss];
}else{
zName += i;
}
while( zName[0]=='/' ){ zName++; }
g.zPath = mprintf("%s/%s/%s", g.zPath, zCheckin, zName);
if( nMiss==0 ) zOrigName = zName;
if( !file_is_simple_pathname(zName, 1) ){
if( sqlite3_strglob("*/", zName)==0 ){
assert( nMiss>=0 && nMiss<ArraySize(azSuffix) );
zName = mprintf("%s%s", zName, azSuffix[nMiss]);
if( !file_is_simple_pathname(zName, 1) ){
goto doc_not_found;
}
}else{
goto doc_not_found;
}
|
| ︙ | ︙ | |||
456 457 458 459 460 461 462 |
" WHERE blob.uuid=foci.uuid"
" AND foci.checkinID=%d;",
vid
);
}
rid = db_int(0, "SELECT rid FROM vcache"
" WHERE vid=%d AND fname=%Q", vid, zName);
| < | 458 459 460 461 462 463 464 465 466 467 468 469 470 471 |
" WHERE blob.uuid=foci.uuid"
" AND foci.checkinID=%d;",
vid
);
}
rid = db_int(0, "SELECT rid FROM vcache"
" WHERE vid=%d AND fname=%Q", vid, zName);
if( rid==0 || content_get(rid, &filebody)==0 ){
goto doc_not_found;
}
db_end_transaction(0);
}
}
if( rid==0 ) goto doc_not_found;
|
| ︙ | ︙ | |||
496 497 498 499 500 501 502 |
}else if( fossil_strcmp(zMime, "text/x-markdown")==0 ){
Blob title = BLOB_INITIALIZER;
Blob tail = BLOB_INITIALIZER;
markdown_to_html(&filebody, &title, &tail);
if( blob_size(&title)>0 ){
style_header("%s", blob_str(&title));
}else{
| | > | | 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 |
}else if( fossil_strcmp(zMime, "text/x-markdown")==0 ){
Blob title = BLOB_INITIALIZER;
Blob tail = BLOB_INITIALIZER;
markdown_to_html(&filebody, &title, &tail);
if( blob_size(&title)>0 ){
style_header("%s", blob_str(&title));
}else{
style_header("%s", nMiss>=ArraySize(azSuffix)?
"Not Found" : "Documentation");
}
blob_append(cgi_output_blob(), blob_buffer(&tail), blob_size(&tail));
style_footer();
}else if( fossil_strcmp(zMime, "text/plain")==0 ){
style_header("Documentation");
@ <blockquote><pre>
@ %h(blob_str(&filebody))
@ </pre></blockquote>
style_footer();
#ifdef FOSSIL_ENABLE_TH1_DOCS
}else if( db_get_boolean("th1-docs", 0) &&
fossil_strcmp(zMime, "application/x-th1")==0 ){
style_header("%h", zName);
Th_Render(blob_str(&filebody));
style_footer();
#endif
}else{
cgi_set_content_type(zMime);
cgi_set_content(&filebody);
}
if( nMiss>=ArraySize(azSuffix) ) cgi_set_status(404, "Not Found");
return;
/* Jump here when unable to locate the document */
doc_not_found:
db_end_transaction(0);
cgi_set_status(404, "Not Found");
style_header("Not Found");
|
| ︙ | ︙ |