/*
** Opens the given file and processes its contents as c-pp, sending
** all output to the global c-pp output channel. Fails fatally on
-** error.
+** error. If bRaw is true then the file's contents are passed through
+** verbatim, rather than being preprocessed.
*/
-static void cmpp_process_file(const char * zName);
+static void cmpp_process_file(const char * zName, int bRaw);
/*
** Operator policy for cmpp_kvp_parse().
static void cmpp_kwd_include(CmppKeyword const * pKw, CmppTokenizer *t){
char const * zFile;
char * zResolved;
+ int bRaw = 0 /* -raw flag */;
if(CT_skip(t)) return;
- else if(t->args.argc!=2){
- cmpp_kwd__err(pKw, t, "Expecting exactly 1 filename argument");
+ else if(t->args.argc<2 || t->args.argc>3){
+ cmpp_kwd__err(pKw, t, "Expected args: ?-raw? filename");
+ }
+ if(t->args.argc==2){
+ zFile = (const char *)t->args.argv[1];
+ }else{
+ if( 0==strcmp("-raw", (char*)t->args.argv[1]) ){
+ bRaw = 1;
+ }else{
+ cmpp_kwd__err(pKw, t, "Unhandled argument: %s",
+ t->args.argv[1]);
+ }
+ zFile = (const char *)t->args.argv[2];
}
- zFile = (const char *)t->args.argv[1];
- if(db_including_has(zFile)){
+ if(!bRaw && db_including_has(zFile)){
/* Note that different spellings of the same filename
** will elude this check, but that seems okay, as different
** spellings means that we're not re-running the exact same
}
zResolved = db_include_search(zFile);
if(zResolved){
- db_including_add(zFile, t->zName, t->token.lineNo);
- cmpp_process_file(zResolved);
- db_include_rm(zFile);
+ if( bRaw ) db_including_add(zFile, t->zName, t->token.lineNo);
+ cmpp_process_file(zResolved, bRaw);
+ if( bRaw ) db_include_rm(zFile);
db_free(zResolved);
}else{
cmpp_t__err(t, "file not found: %s", zFile);
}
}
-
static void cmpp_dump_defines( FILE * fp, int bIndent ){
sqlite3_stmt * const q = g_stmt(GStmt_defSelAll);
while( SQLITE_ROW==sqlite3_step(q) ){
{S(Endif), 0, TT_Endif, cmpp_kwd_endif},
{S(Error), 0, TT_Error, cmpp_kwd_error},
{S(If), 1, TT_If, cmpp_kwd_if},
- {S(Include), 0, TT_Include, cmpp_kwd_include},
+ {S(Include), 1, TT_Include, cmpp_kwd_include},
{S(Pragma), 1, TT_Pragma, cmpp_kwd_pragma},
{S(Savepoint), 1, TT_Savepoint, cmpp_kwd_savepoint},
{S(Stderr), 0, TT_Stderr, cmpp_kwd_stderr},
g.tok = oldTok;
}
-void cmpp_process_file(const char * zName){
+void cmpp_process_file(const char * zName, int bRaw){
FileWrapper fw = FileWrapper_empty;
FileWrapper_open(&fw, zName, "r");
g_FileWrapper_link(&fw);
FileWrapper_slurp(&fw);
g_debug(1,("Read %u byte(s) from [%s]\n", fw.nContent, fw.zName));
if( fw.zContent ){
- cmpp_process_string(zName, fw.zContent, fw.nContent);
+ if( bRaw ){
+ FileWrapper fw = FileWrapper_empty;
+ FileWrapper_open(&fw, zName, "rb");
+ g_FileWrapper_link(&fw);
+ FileWrapper_slurp(&fw);
+ if( 1!=fwrite(fw.zContent, fw.nContent, 1, g.out.pFile) ){
+ fatal("fwrite() failed with errno %d\n", errno);
+ }
+ g_FileWrapper_close(&fw);
+ }else{
+ cmpp_process_string(zName, fw.zContent, fw.nContent);
+ }
}
g_FileWrapper_close(&fw);
}
DOIT {
++nFile;
g_out_open;
- cmpp_process_file(zVal);
+ cmpp_process_file(zVal, 0);
}
}
ISFLAG("e"){
++inclCount;
}
FileWrapper_open(&g.out, g.out.zName, "w");
- cmpp_process_file("-");
+ cmpp_process_file("-", 0);
}
}
}
-C Fix\sa\sproblem\sin\sthe\sEXISTS-to-JOIN\soptimization\s([e33da6d5dc964db8])\sso\nthat\sit\sworks\swith\snested\sWHERE\sand\sEXISTS\sstatements.\n[forum:/forumpost/0704c3c41e49631b|Forum\spost\s0704c3c41e4]
-D 2025-11-13T11:36:48.835
+C Add\sthe\s#include\s-raw\sflag\sto\sext/wasm/c-pp-lite.c\sto\ssupport\sa\spending\sfeature.
+D 2025-11-13T14:47:41.941
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/wasm/api/sqlite3-wasm.c 2d1cbe498f7b0fb64b11451eda481f458df74d6258baea635513e637fcbb8b1a
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js bda1c75bd674a92a0e27cc2f3d46dbbf21e422413f8046814515a0bd7409328a
F ext/wasm/api/sqlite3-worker1.c-pp.js 802d69ead8c38dc1be52c83afbfc77e757da8a91a2e159e7ed3ecda8b8dba2e7
-F ext/wasm/c-pp-lite.c 67e86d9ea47cf3e70a4067acd92788f4f8e6271fae02a68490b069303d7597be
+F ext/wasm/c-pp-lite.c 943be1a36774d58385dca32de36fc18d4f432fe79f7aa35e6c85dd6a6b825bd0
F ext/wasm/common/SqliteTestUtil.js 7adaeffef757d8708418dc9190f72df22367b531831775804b31598b44f6aa51
F ext/wasm/common/emscripten.css 11bd104b6c0d597c67d40cc8ecc0a60dae2b965151e3b6a37fa5708bac3acd15
F ext/wasm/common/testing.css e97549bab24126c24e0daabfe2de9bb478fb0a69fdb2ddd0a73a992c091aad6f
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P cb0f0e22241aae65938b4bc7a1b809088466a17cee80344f66ee889a76c422c1
-R e1df7415359298fd0a1cd1de534392b6
-U drh
-Z 3f50cf19050f41cd47ef418e45137a07
+P d1e901eddc25175174d0706238ae0c33bfa5569e0c2ba4f1164b7a9600203442
+R 69751ab1669928a56efde739054714dc
+U stephan
+Z 96038a39e433e91de1388406d7509460
# Remove this line to create a well-formed Fossil manifest.