Fossil SCM

Replace an errant free() with a fossil_free(). Teach (uv export) to create the directory parts of uv names if needed, and fix what appeared to be a memleak when skipping overwriting of a file.

stephan 2026-10-10 10:33 UTC trunk
Commit 9be336524c21f9b5919dc07fbae02d8e1aea2b8dc39e0589bc7f8a6e681b441d
2 files changed +1 -1 +7 -4
+1 -1
--- src/file.c
+++ src/file.c
@@ -923,11 +923,11 @@
923923
rc = errorReturn;
924924
}
925925
}
926926
}
927927
}
928
- free(zName);
928
+ fossil_free(zName);
929929
return rc;
930930
}
931931
932932
#if defined(_WIN32)
933933
/*
934934
--- src/file.c
+++ src/file.c
@@ -923,11 +923,11 @@
923 rc = errorReturn;
924 }
925 }
926 }
927 }
928 free(zName);
929 return rc;
930 }
931
932 #if defined(_WIN32)
933 /*
934
--- src/file.c
+++ src/file.c
@@ -923,11 +923,11 @@
923 rc = errorReturn;
924 }
925 }
926 }
927 }
928 fossil_free(zName);
929 return rc;
930 }
931
932 #if defined(_WIN32)
933 /*
934
--- src/unversioned.c
+++ src/unversioned.c
@@ -455,15 +455,16 @@
455455
}
456456
if( file_isdir(g.argv[i], ExtFILE)>0 && !forceFlag ){
457457
fossil_print("\"%s\" already exists, add -f to overwrite\n",
458458
g.argv[i]);
459459
}else{
460
+ file_mkfolder(g.argv[i], ExtFILE, 1, 0);
460461
blob_write_to_file(&content, g.argv[i]);
461
- blob_reset(&content);
462462
}
463
+ blob_reset(&content);
463464
}
464
- }else{
465
+ }else{
465466
/* All unversioned files */
466467
Stmt q;
467468
db_prepare(&q, "SELECT name FROM unversioned WHERE %s "
468469
"AND hash IS NOT NULL "
469470
"ORDER BY name", zPattern/*safe-for-%s*/);
@@ -474,13 +475,15 @@
474475
}
475476
if( file_isdir(db_column_text(&q,0), ExtFILE)>0 && !forceFlag ){
476477
fossil_print("\"%s\" already exists, add -f to overwrite\n",
477478
db_column_text(&q,0));
478479
}else{
479
- blob_write_to_file(&content, db_column_text(&q,0));
480
- blob_reset(&content);
480
+ const char * const z = db_column_text(&q,0);
481
+ file_mkfolder(z, ExtFILE, 1, 0);
482
+ blob_write_to_file(&content, z);
481483
}
484
+ blob_reset(&content);
482485
}
483486
db_finalize(&q);
484487
}
485488
}else{
486489
verify_all_options();
487490
--- src/unversioned.c
+++ src/unversioned.c
@@ -455,15 +455,16 @@
455 }
456 if( file_isdir(g.argv[i], ExtFILE)>0 && !forceFlag ){
457 fossil_print("\"%s\" already exists, add -f to overwrite\n",
458 g.argv[i]);
459 }else{
 
460 blob_write_to_file(&content, g.argv[i]);
461 blob_reset(&content);
462 }
 
463 }
464 }else{
465 /* All unversioned files */
466 Stmt q;
467 db_prepare(&q, "SELECT name FROM unversioned WHERE %s "
468 "AND hash IS NOT NULL "
469 "ORDER BY name", zPattern/*safe-for-%s*/);
@@ -474,13 +475,15 @@
474 }
475 if( file_isdir(db_column_text(&q,0), ExtFILE)>0 && !forceFlag ){
476 fossil_print("\"%s\" already exists, add -f to overwrite\n",
477 db_column_text(&q,0));
478 }else{
479 blob_write_to_file(&content, db_column_text(&q,0));
480 blob_reset(&content);
 
481 }
 
482 }
483 db_finalize(&q);
484 }
485 }else{
486 verify_all_options();
487
--- src/unversioned.c
+++ src/unversioned.c
@@ -455,15 +455,16 @@
455 }
456 if( file_isdir(g.argv[i], ExtFILE)>0 && !forceFlag ){
457 fossil_print("\"%s\" already exists, add -f to overwrite\n",
458 g.argv[i]);
459 }else{
460 file_mkfolder(g.argv[i], ExtFILE, 1, 0);
461 blob_write_to_file(&content, g.argv[i]);
 
462 }
463 blob_reset(&content);
464 }
465 }else{
466 /* All unversioned files */
467 Stmt q;
468 db_prepare(&q, "SELECT name FROM unversioned WHERE %s "
469 "AND hash IS NOT NULL "
470 "ORDER BY name", zPattern/*safe-for-%s*/);
@@ -474,13 +475,15 @@
475 }
476 if( file_isdir(db_column_text(&q,0), ExtFILE)>0 && !forceFlag ){
477 fossil_print("\"%s\" already exists, add -f to overwrite\n",
478 db_column_text(&q,0));
479 }else{
480 const char * const z = db_column_text(&q,0);
481 file_mkfolder(z, ExtFILE, 1, 0);
482 blob_write_to_file(&content, z);
483 }
484 blob_reset(&content);
485 }
486 db_finalize(&q);
487 }
488 }else{
489 verify_all_options();
490

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button