Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | merged in trunk [11abffbb497d67a], added a test script to check a th1 memleak case. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | th1-query-api |
Files: | files | file ages | folders |
SHA1: |
13b0e0b4d4edb91926c22a2e74cc9fb9 |
User & Date: | stephan 2012-07-22 17:59:58.009 |
Context
2012-08-03
| ||
18:41 | merged in [336e1355b927f]. ... (Closed-Leaf check-in: 82e78034 user: stephan tags: th1-query-api) | |
2012-07-22
| ||
17:59 | merged in trunk [11abffbb497d67a], added a test script to check a th1 memleak case. ... (check-in: 13b0e0b4 user: stephan tags: th1-query-api) | |
17:40 | Pulled in minor memleak fix [bee0036681]. ... (check-in: 11abffbb user: stephan tags: trunk) | |
16:54 | Fixed a memleak in the th1 variadic proc args support. ... (check-in: bee00366 user: stephan tags: th1-query-api) | |
Changes
Changes to src/browse.c.
︙ | ︙ | |||
118 119 120 121 122 123 124 | int rid = 0; char *zUuid = 0; Blob dirname; Manifest *pM = 0; const char *zSubdirLink; login_check_credentials(); | | | 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | int rid = 0; char *zUuid = 0; Blob dirname; Manifest *pM = 0; const char *zSubdirLink; login_check_credentials(); if( !g.perm.Read ){ login_needed(); return; } while( nD>1 && zD[nD-2]=='/' ){ zD[(--nD)-1] = 0; } style_header("File List"); sqlite3_create_function(g.db, "pathelement", 2, SQLITE_UTF8, 0, pathelementFunc, 0, 0); /* If the name= parameter is an empty string, make it a NULL pointer */ if( zD && strlen(zD)==0 ){ zD = 0; } |
︙ | ︙ |
Changes to src/info.c.
︙ | ︙ | |||
1386 1387 1388 1389 1390 1391 1392 | else cgi_append_content("\n", 1); z += i; if( z[0]=='\n' ) z++; } if( n<iEnd ) cgi_printf("</div>"); @ </pre> if( iStart ){ | < < | < < | 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 | else cgi_append_content("\n", 1); z += i; if( z[0]=='\n' ) z++; } if( n<iEnd ) cgi_printf("</div>"); @ </pre> if( iStart ){ @ <script>gebi('topln').scrollIntoView(true);</script> } } /* ** WEBPAGE: artifact ** URL: /artifact/ARTIFACTID |
︙ | ︙ | |||
2003 2004 2005 2006 2007 2008 2009 | @ <tr><td align="right" valign="top"><b>Background Color:</b></td> @ <td valign="top"> render_color_chooser(fNewPropagateColor, zNewColor, "pclr", "clr", "clrcust"); @ </td></tr> @ <tr><td align="right" valign="top"><b>Tags:</b></td> @ <td valign="top"> | | | > | 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 | @ <tr><td align="right" valign="top"><b>Background Color:</b></td> @ <td valign="top"> render_color_chooser(fNewPropagateColor, zNewColor, "pclr", "clr", "clrcust"); @ </td></tr> @ <tr><td align="right" valign="top"><b>Tags:</b></td> @ <td valign="top"> @ <input type="checkbox" id="newtag" name="newtag"%s(zNewTagFlag) /> @ Add the following new tag name to this check-in: @ <input type="text" style="width:15;" name="tagname" value="%h(zNewTag)" @ onkeyup="gebi('newtag').checked=!!this.value" /> db_prepare(&q, "SELECT tag.tagid, tagname FROM tagxref, tag" " WHERE tagxref.rid=%d AND tagtype>0 AND tagxref.tagid=tag.tagid" " ORDER BY CASE WHEN tagname GLOB 'sym-*' THEN substr(tagname,5)" " ELSE tagname END /*sort*/", rid ); |
︙ | ︙ | |||
2034 2035 2036 2037 2038 2039 2040 | } } db_finalize(&q); @ </td></tr> @ <tr><td align="right" valign="top"><b>Branching:</b></td> @ <td valign="top"> | | | > | 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 | } } db_finalize(&q); @ </td></tr> @ <tr><td align="right" valign="top"><b>Branching:</b></td> @ <td valign="top"> @ <input id="newbr" type="checkbox" name="newbr"%s(zNewBrFlag) /> @ Make this check-in the start of a new branch named: @ <input type="text" style="width:15;" name="brname" value="%h(zNewBranch)" @ onkeyup="gebi('newbr').checked=!!this.value" /> @ </td></tr> if( is_a_leaf(rid) && !db_exists("SELECT 1 FROM tagxref " " WHERE tagid=%d AND rid=%d AND tagtype>0", TAG_CLOSED, rid) ){ |
︙ | ︙ |
Changes to src/json_dir.c.
︙ | ︙ | |||
64 65 66 67 68 69 70 | char const * zDX = NULL; int nD; char * zUuid = NULL; char const * zCI = NULL; Manifest * pM = NULL; Stmt q = empty_Stmt; int rid = 0; | | | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | char const * zDX = NULL; int nD; char * zUuid = NULL; char const * zCI = NULL; Manifest * pM = NULL; Stmt q = empty_Stmt; int rid = 0; if( !g.perm.Read ){ json_set_err(FSL_JSON_E_DENIED, "Requires 'o' permissions."); return NULL; } zCI = json_find_option_cstr("checkin",NULL,"ci" ); /* If a specific check-in is requested, fetch and parse it. If the ** specific check-in does not exist, clear zCI. zCI==0 will cause all ** files from all check-ins to be displayed. |
︙ | ︙ |
Changes to src/login.c.
︙ | ︙ | |||
592 593 594 595 596 597 598 | @ <tr> @ <td></td> @ <td><input type="submit" name="in" value="Login" @ onClick="chngAction(this.form)" /></td> @ </tr> @ </table> @ <script type="text/JavaScript"> | | | 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 | @ <tr> @ <td></td> @ <td><input type="submit" name="in" value="Login" @ onClick="chngAction(this.form)" /></td> @ </tr> @ </table> @ <script type="text/JavaScript"> @ gebi('u').focus() @ function chngAction(form){ if( g.sslNotAvailable==0 && memcmp(g.zBaseURL,"https:",6)!=0 && db_get_boolean("https-login",0) ){ char *zSSL = mprintf("https:%s", &g.zBaseURL[5]); @ if( form.u.value!="anonymous" ){ |
︙ | ︙ | |||
633 634 635 636 637 638 639 | @ Visitors may enter <b>anonymous</b> as the user-ID with @ the 8-character hexadecimal password shown below:</p> @ <div class="captcha"><table class="captcha"><tr><td><pre> @ %s(zCaptcha) @ </pre></td></tr></table> if( bAutoCaptcha ) { @ <input type="button" value="Fill out captcha" | < | | 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 | @ Visitors may enter <b>anonymous</b> as the user-ID with @ the 8-character hexadecimal password shown below:</p> @ <div class="captcha"><table class="captcha"><tr><td><pre> @ %s(zCaptcha) @ </pre></td></tr></table> if( bAutoCaptcha ) { @ <input type="button" value="Fill out captcha" @ onclick="gebi('u').value='anonymous'; gebi('p').value='%s(zDecoded)';" /> } @ </div> free(zCaptcha); } if( g.zLogin ){ @ <hr /> @ <p>To log off the system (and delete your login cookie) |
︙ | ︙ |
Changes to src/setup.c.
︙ | ︙ | |||
1164 1165 1166 1167 1168 1169 1170 | if( pSet->versionable ){ @ (v)<br /> } else { @ <br /> } } } | | | 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 | if( pSet->versionable ){ @ (v)<br /> } else { @ <br /> } } } @ </td><td style="width:50px;"></td><td valign="top"> for(pSet=ctrlSettings; pSet->name!=0; pSet++){ if( pSet->width!=0 ){ entry_attribute(pSet->name, /*pSet->width*/ 40, pSet->name, pSet->var!=0 ? pSet->var : pSet->name, (char*)pSet->def); if( pSet->versionable ){ @ (v)<br /> |
︙ | ︙ |
Changes to src/style.c.
︙ | ︙ | |||
121 122 123 124 125 126 127 | ** Generate javascript that will set the href= attribute on all anchors. */ void style_resolve_href(void){ int i; if( !g.perm.Hyperlink || !g.javascriptHyperlink || nHref==0 ) return; @ <script type="text/JavaScript"> @ /* <![CDATA[ */ | | | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | ** Generate javascript that will set the href= attribute on all anchors. */ void style_resolve_href(void){ int i; if( !g.perm.Hyperlink || !g.javascriptHyperlink || nHref==0 ) return; @ <script type="text/JavaScript"> @ /* <![CDATA[ */ @ function u(i,h){gebi(i).href=h;} for(i=0; i<nHref; i++){ @ u(%d(i+1),"%s(aHref[i])"); } @ /* ]]> */ @ </script> } |
︙ | ︙ | |||
171 172 173 174 175 176 177 | login_check_credentials(); va_start(ap, zTitleFormat); zTitle = vmprintf(zTitleFormat, ap); va_end(ap); cgi_destination(CGI_HEADER); | > | | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | login_check_credentials(); va_start(ap, zTitleFormat); zTitle = vmprintf(zTitleFormat, ap); va_end(ap); cgi_destination(CGI_HEADER); @ <!DOCTYPE html> if( g.thTrace ) Th_Trace("BEGIN_HEADER<br />\n", -1); /* Generate the header up through the main menu */ Th_Store("project_name", db_get("project-name","Unnamed Fossil Project")); Th_Store("title", zTitle); Th_Store("baseurl", g.zBaseURL); |
︙ | ︙ | |||
197 198 199 200 201 202 203 204 205 206 207 208 209 210 | Th_Render(zHeader, Th_Render_Flags_DEFAULT); if( g.thTrace ) Th_Trace("END_HEADER<br />\n", -1); Th_Unstore("title"); /* Avoid collisions with ticket field names */ cgi_destination(CGI_BODY); g.cgiOutput = 1; headerHasBeenGenerated = 1; sideboxUsed = 0; } /* ** Append ad unit text if appropriate. */ static void style_ad_unit(void){ const char *zAd; | > > > > > > > > > > > > > > > > | 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | Th_Render(zHeader, Th_Render_Flags_DEFAULT); if( g.thTrace ) Th_Trace("END_HEADER<br />\n", -1); Th_Unstore("title"); /* Avoid collisions with ticket field names */ cgi_destination(CGI_BODY); g.cgiOutput = 1; headerHasBeenGenerated = 1; sideboxUsed = 0; /* Make the gebi(x) function available as an almost-alias for ** document.getElementById(x) (except that it throws if the element is not found). ** ** Maintenance note: this function must of course be available ** before it is called. It "should" go in the HEAD so that client ** HEAD code can make use of it, but because the client can replace ** the HEAD, and some fossil pages rely on gebi(), we put it here. */ @ <script> @ function gebi(x){ @ if(/^#/.test(x)) x = x.substr(1); @ var e = document.getElementById(x); @ if(!e) throw new Error("Expecting element with ID "+x); @ else return e;} @ </script> } /* ** Append ad unit text if appropriate. */ static void style_ad_unit(void){ const char *zAd; |
︙ | ︙ |
Changes to src/timeline.c.
︙ | ︙ | |||
565 566 567 568 569 570 571 | } } if( cSep=='[' ) cgi_printf("["); cgi_printf("]}%s", pRow->pNext ? ",\n" : "];\n"); } cgi_printf("var nrail = %d\n", pGraph->mxRail+1); graph_free(pGraph); | | | | | 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 | } } if( cSep=='[' ) cgi_printf("["); cgi_printf("]}%s", pRow->pNext ? ",\n" : "];\n"); } cgi_printf("var nrail = %d\n", pGraph->mxRail+1); graph_free(pGraph); @ var canvasDiv = gebi("canvas"); #if 0 @ var realCanvas = null; #endif @ function drawBox(color,x0,y0,x1,y1){ @ var n = document.createElement("div"); @ if( x0>x1 ){ var t=x0; x0=x1; x1=t; } @ if( y0>y1 ){ var t=y0; y0=y1; y1=t; } @ var w = x1-x0+1; @ var h = y1-y0+1; @ n.style.position = "absolute"; @ n.style.overflow = "hidden"; @ n.style.left = x0+"px"; @ n.style.top = y0+"px"; @ n.style.width = w+"px"; @ n.style.height = h+"px"; @ n.style.backgroundColor = color; @ canvasDiv.appendChild(n); @ } @ function absoluteY(id){ @ var obj = gebi(id); @ if( !obj ) return; @ var top = 0; @ if( obj.offsetParent ){ @ do{ @ top += obj.offsetTop; @ }while( obj = obj.offsetParent ); @ } @ return top; @ } @ function absoluteX(id){ @ var obj = gebi(id); @ if( !obj ) return; @ var left = 0; @ if( obj.offsetParent ){ @ do{ @ left += obj.offsetLeft; @ }while( obj = obj.offsetParent ); @ } |
︙ | ︙ | |||
685 686 687 688 689 690 691 | @ drawThinArrow(y0,mx,p.x+6); @ }else{ @ drawThinArrow(y0,mx,p.x-5); @ } @ } @ } @ function renderGraph(){ | | | | 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 | @ drawThinArrow(y0,mx,p.x+6); @ }else{ @ drawThinArrow(y0,mx,p.x-5); @ } @ } @ } @ function renderGraph(){ @ var canvasDiv = gebi("canvas"); @ while( canvasDiv.hasChildNodes() ){ @ canvasDiv.removeChild(canvasDiv.firstChild); @ } @ var canvasY = absoluteY("timelineTable"); @ var left = absoluteX("m"+rowinfo[0].id) - absoluteX("canvas") + 15; @ var width = nrail*20; @ for(var i in rowinfo){ @ rowinfo[i].y = absoluteY("m"+rowinfo[i].id) + 10 - canvasY; @ rowinfo[i].x = left + rowinfo[i].r*20; @ } @ var btm = absoluteY("grbtm") + 10 - canvasY; #if 0 @ if( btm<32768 ){ @ canvasDiv.innerHTML = '<canvas id="timeline-canvas" '+ @ 'style="position:absolute;left:'+(left-5)+'px;"' + @ ' width="'+width+'" height="'+btm+'"><'+'/canvas>'; @ realCanvas = gebi('timeline-canvas'); @ }else{ @ realCanvas = 0; @ } @ var context; @ if( realCanvas && realCanvas.getContext @ && (context = realCanvas.getContext('2d'))) { @ drawBox = function(color,x0,y0,x1,y1) { |
︙ | ︙ |
Added test/th1-variadic-proc.th1.
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | <th1> proc vfunc {args} { set argc [llength $args] puts "argc=$argc Check this for a memleak when args length > 0\n" } vfunc vfunc 1 vfunc 1 2 vfunc 1 2 3 </th1> |