Skip to content

Commit 6a57e14

Browse files
ramseymcgrathclaude
andcommitted
bridge: rename logf() helper to blog() to avoid MSVC intrinsic conflict
logf is the C99 single-precision log() function in <math.h>. MSVC marks it as an intrinsic and rejects user redefinitions with C2169 / C2167, even when the user declaration is static. GCC and Clang let the static override stand, which is why local builds passed on macOS / Linux but the Windows CI job failed. Renamed to blog (bridge log) — distinctive, no collision with libc or libm symbols on any toolchain. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 9cdc2ed commit 6a57e14

1 file changed

Lines changed: 20 additions & 20 deletions

File tree

‎src/bridge.c‎

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ static void writer_for_emit(const uint8_t *buf, size_t n, void *user) {
110110

111111
/* ── Logging ────────────────────────────────────────────────────────────── */
112112

113-
static void logf(const char *fmt, ...) {
113+
static void blog(const char *fmt, ...) {
114114
va_list ap;
115115
va_start(ap, fmt);
116116
vfprintf(stderr, fmt, ap);
@@ -188,10 +188,10 @@ static void cb_version(void *user) {
188188
b->probe_calls++;
189189
if (rc == 0) {
190190
b->probe_ok++;
191-
logf("version probe ok: fw=\"%s\"", tmp);
191+
blog("version probe ok: fw=\"%s\"", tmp);
192192
} else {
193193
b->probe_fail++;
194-
logf("version probe FAILED: rc=%d (firmware not responding on real UART)", rc);
194+
blog("version probe FAILED: rc=%d (firmware not responding on real UART)", rc);
195195
}
196196
ferrum_emit_version_text(writer_for_emit, b);
197197
}
@@ -201,15 +201,15 @@ static void cb_move(int32_t x, int32_t y, void *user) {
201201
b->ferrum_moves++;
202202
/* Rate-limited diag log: first 10 moves verbatim, then every 256th. */
203203
if (b->ferrum_moves <= 10 || (b->ferrum_moves & 0xFF) == 0) {
204-
logf("move(%d, %d) [seq=%llu]", (int)x, (int)y,
204+
blog("move(%d, %d) [seq=%llu]", (int)x, (int)y,
205205
(unsigned long long)b->ferrum_moves - 1);
206206
}
207207
if (x > INT16_MAX) x = INT16_MAX;
208208
if (x < INT16_MIN) x = INT16_MIN;
209209
if (y > INT16_MAX) y = INT16_MAX;
210210
if (y < INT16_MIN) y = INT16_MIN;
211211
int rc = hurra_move(b->hc, (int16_t)x, (int16_t)y);
212-
if (rc != 0) logf("hurra_move rc=%d", rc);
212+
if (rc != 0) blog("hurra_move rc=%d", rc);
213213
}
214214

215215
static void cb_button_set(uint8_t mask, uint8_t state, void *user) {
@@ -235,7 +235,7 @@ static void cb_button_get(uint8_t mask, void *user) {
235235
* it's discoverable but don't fail. */
236236
static bool warned = false;
237237
if (!warned) {
238-
logf("warn: km.<button>() get not yet wired through libhurra; "
238+
blog("warn: km.<button>() get not yet wired through libhurra; "
239239
"returning 0. (mask=0x%02x)", (unsigned)mask);
240240
warned = true;
241241
}
@@ -443,34 +443,34 @@ int main(int argc, char **argv) {
443443
/* Open hurra client. */
444444
br.hc = hurra_open(args.device, args.baud);
445445
if (!br.hc) {
446-
logf("error: hurra_open(%s, %u) failed", args.device, (unsigned)args.baud);
446+
blog("error: hurra_open(%s, %u) failed", args.device, (unsigned)args.baud);
447447
return 1;
448448
}
449-
logf("hurra: opened %s @ %u baud", args.device, (unsigned)args.baud);
449+
blog("hurra: opened %s @ %u baud", args.device, (unsigned)args.baud);
450450

451451
/* TX batching aligned to CH343B FS bulk MPS (64 bytes). Multiple small
452452
* Hurra frames in a single PTY read get packed into one USB transfer
453453
* instead of one per write() syscall — ~7x throughput for 9-byte moves.
454454
* We flush at the end of every main-loop iteration so latency is still
455455
* bounded by the loop period (~500us idle, instant on activity). */
456456
hurra_set_tx_batch(br.hc, 64);
457-
logf("hurra: tx_batch=64 bytes (CH343B MPS); flushed every main-loop tick");
457+
blog("hurra: tx_batch=64 bytes (CH343B MPS); flushed every main-loop tick");
458458

459459
/* Open virtual port. */
460460
#ifdef _WIN32
461461
if (!args.virtual_port) {
462-
logf("error: --virtual-port is required on Windows");
462+
blog("error: --virtual-port is required on Windows");
463463
hurra_close(br.hc);
464464
return 1;
465465
}
466466
br.vp = vp_open(args.virtual_port, NULL);
467467
if (!br.vp) {
468-
logf("error: vp_open(%s) failed (GetLastError=%lu)",
468+
blog("error: vp_open(%s) failed (GetLastError=%lu)",
469469
args.virtual_port, (unsigned long)GetLastError());
470470
hurra_close(br.hc);
471471
return 1;
472472
}
473-
logf("vp: opened %s", args.virtual_port);
473+
blog("vp: opened %s", args.virtual_port);
474474
#else
475475
char *owned_link = NULL;
476476
const char *link = args.link_path;
@@ -480,7 +480,7 @@ int main(int argc, char **argv) {
480480
}
481481
br.vp = vp_open(NULL, link);
482482
if (!br.vp) {
483-
logf("error: vp_open failed");
483+
blog("error: vp_open failed");
484484
free(owned_link);
485485
hurra_close(br.hc);
486486
return 1;
@@ -527,14 +527,14 @@ int main(int argc, char **argv) {
527527

528528
br.parser = ferrum_parser_create(&cbs, &br);
529529
if (!br.parser) {
530-
logf("error: ferrum_parser_create failed");
530+
blog("error: ferrum_parser_create failed");
531531
vp_close(br.vp);
532532
hurra_close(br.hc);
533533
return 1;
534534
}
535535

536536
br.start_ms = mono_ms();
537-
logf("bridge: running. SIGINT to stop.");
537+
blog("bridge: running. SIGINT to stop.");
538538

539539
/* Main loop. */
540540
uint8_t buf[256];
@@ -549,7 +549,7 @@ int main(int argc, char **argv) {
549549
while (!g_stop) {
550550
int n = vp_read(br.vp, buf, sizeof(buf));
551551
if (n < 0) {
552-
logf("vp_read error; exiting");
552+
blog("vp_read error; exiting");
553553
break;
554554
}
555555
for (int i = 0; i < n; i++) {
@@ -583,7 +583,7 @@ int main(int argc, char **argv) {
583583
(br.probe_ok > 0 && br.probe_fail > 0) ? "flapping" :
584584
"unknown");
585585
if (w > 0) vp_write_all(br.vp, (const uint8_t *)out, (size_t)w);
586-
logf("__diag__ requested; replied %d bytes", w);
586+
blog("__diag__ requested; replied %d bytes", w);
587587
}
588588
diag_pos = 0;
589589
} else if (c == '\r') {
@@ -602,7 +602,7 @@ int main(int argc, char **argv) {
602602

603603
int drained = hurra_poll(br.hc);
604604
if (drained < 0) {
605-
logf("hurra_poll error; exiting");
605+
blog("hurra_poll error; exiting");
606606
break;
607607
}
608608
if (drained > 0) br.hurra_rx_bytes += (uint64_t)drained;
@@ -611,7 +611,7 @@ int main(int argc, char **argv) {
611611
uint64_t now = mono_ms();
612612
if (now - last_heartbeat_ms >= HEARTBEAT_PERIOD_MS) {
613613
last_heartbeat_ms = now;
614-
logf("heartbeat up=%llus moves=%llu probes=%u(ok=%u fail=%u) "
614+
blog("heartbeat up=%llus moves=%llu probes=%u(ok=%u fail=%u) "
615615
"rx_bytes=%llu fw=%s",
616616
(unsigned long long)((now - br.start_ms) / 1000),
617617
(unsigned long long)br.ferrum_moves,
@@ -635,7 +635,7 @@ int main(int argc, char **argv) {
635635
}
636636
}
637637

638-
logf("bridge: stopping.");
638+
blog("bridge: stopping.");
639639
ferrum_parser_destroy(br.parser);
640640
vp_close(br.vp);
641641
hurra_close(br.hc);

0 commit comments

Comments
 (0)