@@ -28,13 +28,15 @@
28 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** builtin_data.h file. Include that information here:
29 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
30 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "builtin_data.h"
31 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return a pointer to built-in content
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the index in the aBuiltinFiles[] array for the file
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** whose name is zFilename. Or return -1 if the file is not
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** found.
34 36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const unsigned char *builtin_file(const char *zFilename, int *piSize){
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int builtin_file_index(const char *zFilename){
36 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lwr, upr, i, c;
37 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lwr = 0;
38 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upr = count(aBuiltinFiles) - 1;
39 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( upr>=lwr ){
40 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = (upr+lwr)/2;
@@ -42,16 +44,28 @@
42 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c<0 ){
43 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lwr = i+1;
44 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( c>0 ){
45 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upr = i-1;
46 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( piSize ) *piSize = aBuiltinFiles[i].nByte;
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return aBuiltinFiles[i].pData;
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return i;
49 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
50 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( piSize ) *piSize = 0;
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1;
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return a pointer to built-in content
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const unsigned char *builtin_file(const char *zFilename, int *piSize){
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i = builtin_file_index(zFilename);
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=0 ){
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( piSize ) *piSize = aBuiltinFiles[i].nByte;
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return aBuiltinFiles[i].pData;
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( piSize ) *piSize = 0;
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
53 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *builtin_text(const char *zFilename){
55 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (char*)builtin_file(zFilename, 0);
56 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -65,11 +79,11 @@
65 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
66 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void test_builtin_list(void){
67 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, size = 0;;
68 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<count(aBuiltinFiles); i++){
69 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int n = aBuiltinFiles[i].nByte;
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("%-30s %6d\n", aBuiltinFiles[i].zName,n);
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("%3d. %-45s %6d\n", i+1, aBuiltinFiles[i].zName,n);
71 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size += n;
72 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(find_option("verbose","v",0)!=0){
74 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%d entries totaling %d bytes\n", i, size);
75 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -81,16 +95,18 @@
81 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Show all built-in text files.
82 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
83 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void test_builtin_list_page(void){
84 98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
85 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("Built-in Text Files");
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <ul>
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <ol>
87 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<count(aBuiltinFiles); i++){
88 102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = aBuiltinFiles[i].zName;
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <li>%z(href("%R/builtin?name=%T&id=%S",z,MANIFEST_UUID))%h(z)</a>
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zUrl = href("%R/builtin?name=%T&id=%.8s&mimetype=text/plain",
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z,fossil_exe_id());
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <li>%z(zUrl)%h(z)</a>
90 106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ </ul>
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </ol>
92 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_footer();
93 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
96 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-builtin-get
@@ -110,5 +126,90 @@
110 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&x, (const char*)pData, nByte);
112 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_write_to_file(&x, g.argc==4 ? g.argv[3] : "-");
113 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&x);
114 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Input zList is a list of numeric identifiers for files in
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aBuiltinFiles[]. Return the concatenation of all of those
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** files using mimetype zType, or as application/javascript if
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zType is 0.
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void builtin_deliver_multiple_js_files(
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zList, /* List of numeric identifiers */
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zType /* Override mimetype */
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *pOut;
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zType==0 ) zType = "application/javascript";
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_set_content_type(zType);
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOut = cgi_output_blob();
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( zList[0] ){
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i = atoi(zList);
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>0 && i<=count(aBuiltinFiles) ){
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(pOut, (const char*)aBuiltinFiles[i-1].pData,
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aBuiltinFiles[i-1].nByte);
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( fossil_isdigit(zList[0]) ) zList++;
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zList[0]==',' ) zList++;
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WEBPAGE: builtin
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return one of many built-in content files. Query parameters:
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** name=FILENAME Return the single file whose name is FILENAME.
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mimetype=TYPE Override the mimetype in the returned file to
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be TYPE. If this query parameter is omitted
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (the usual case) then the mimetype is inferred
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the suffix on FILENAME
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** m=IDLIST IDLIST is a comma-separated list of integers
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that specify multiple javascript files to be
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** concatenated and returned all at once.
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** id=UNIQUEID Version number of the "builtin" files. Used
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for cache control only.
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** At least one of the name= or m= query parameters must be present.
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the id= query parameter is present, then Fossil assumes that the
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** result is immutable and sets a very large cache retention time (1 year).
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void builtin_webpage(void){
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob out;
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName = P("name");
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTxt = 0;
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zId = P("id");
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zType = P("mimetype");
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nId;
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName ) zTxt = builtin_text(zName);
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zTxt==0 ){
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zM = P("m");
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zM ){
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ builtin_deliver_multiple_js_files(zM, zType);
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_set_status(404, "Not Found");
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ File "%h(zName)" not found
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zType==0 ){
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_strglob("*.js", zName)==0 ){
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zType = "application/javascript";
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zType = mimetype_from_name(zName);
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_set_content_type(zType);
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zId
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (nId = (int)strlen(zId))>=8
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && strncmp(zId,fossil_exe_id(),nId)==0
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.isConst = 1;
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ etag_check(0,0);
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&out, zTxt, -1);
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_set_content(&out);
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
115 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!