3.7 KiB
libs/libcmt/sprintf.obj exact-match ledger
This atomic lane started from campaign commit 1626bac6. The object was
MISSING at config index 715, absent from config/parked.json, production
source, object logs, all refs, and active worktrees. Root announced the claim
before editing and excluded all concurrent CRT lanes.
Plain-English behavior
sprintf wraps a caller's buffer in a temporary string-backed FILE, feeds
its variadic arguments to the shared CRT formatter, appends a zero, and returns
the formatter's character count. _scprintf runs that formatter with a null
destination so callers can calculate the required buffer length first.
Primary provenance and January inventory
The XDK 3911 libcmt.lib archive has SHA-256
60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55.
Its obj\i386\sprintf.obj member has SHA-256
7694ab8f6c559138f2a9a00bf2c512635a27a9e639421114247c34155ceefde8,
compiler identifier 0x001c2426, ordinary C CodeView records, and source path
d:\xbox-finalfre\private\sdktools\crt\crtw32\stdio\sprintf.c. The
authenticated historical Microsoft source is pinned by Git blob
5e10325e60d3840292ae97fc5a7a84732a224803. January remains authoritative.
The target owns two external pick-no-duplicates code COMDATs and no runtime
.rdata, .data, or BSS:
| Function | Bytes | Relocs | Normalized SHA-256 |
|---|---|---|---|
_sprintf |
88 | 2 | b2976083077c6db20e77e970849cbd86de322c00e74f035376383ae99f7f3689 |
__scprintf |
49 | 1 | a4f0ea5af60331328fc864f07a787c3a5fac1a288265b317d02aa1b65ef0dae3 |
_sprintf relocates at +0x2B to __output+0 and +0x4C to
__flsbuf+0; __scprintf relocates at +0x28 to __output+0. Candidate,
January, and authentic archive member agree on bytes, relocation identity,
COMDAT selection/alignment, and symbol ownership.
Experiment matrix
| ID | Source factor | Total bytes T/B | Relocs T/B | Result | Decision |
|---|---|---|---|---|---|
| E01 | Authenticated Microsoft variadic topology, chained stream assignments, standard putc terminator |
137/137 |
3/3 |
both functions strict exact on first compile | accepted |
No source-shape sweep was needed. This closes the narrow four-object formatter
cluster alongside snprintf, vsnprint, and vsprintf, and validates the
same readable stream construction across eight entry points.
Strict verification
XDK 3911 CL 13.00.9254.1 compiled with unchanged libcmt /O1 /Gy flags.
tools.coff_compare reports all_equal=true for both reconstructed functions
and independently for both functions extracted from the authentic archive.
The full halobetacache_build, libcmt_build, and progress targets pass.
The lane reports 347/833 completed objects, 3,472/11,060 exact functions, and
413,911 exact code bytes overall; libcmt reports 80/212 objects, 124/476
functions, 7,905 exact code bytes, and 1,728 exact data bytes. Semantic
progress reports zero unit errors.
The clean-commit regression snapshot/check forced a fresh XDK rebuild and
retained both functions as still_exact, with no failures or warnings. The
complete repository tool suite passes 179/179 tests.
House/Berth and behavior audit
The implementation uses the actual FILE structure and named fields, typed
prototypes, standard variadic handling, vertical signatures, authenticated
chained assignments, and one return per function. It contains no assembly,
volatile, forced inline, undefined sequencing, opaque layout, raw offset,
byte forcing, build-flag change, or comparator exception.
sprintf is historically unbounded and assumes the destination is large
enough. That legacy contract is preserved and documented; defensive callers
should use the admitted bounded formatter or call _scprintf first.