diag: log errno when popen/malloc fails in run_capture (Linux mirror lookup)

这个提交包含在:
JGZYES
2026-09-01 19:10:28 +08:00
父节点 f2178bd652
当前提交 32985c5978
+11 -2
查看文件
@@ -3,6 +3,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <errno.h>
#ifdef _WIN32 #ifdef _WIN32
#include <io.h> #include <io.h>
@@ -29,10 +30,18 @@
/* Read all output of `cmd` into a malloc'd buffer. */ /* Read all output of `cmd` into a malloc'd buffer. */
static char *run_capture(const char *cmd, size_t *out_len) { static char *run_capture(const char *cmd, size_t *out_len) {
FILE *f = PMM_POPEN(cmd, "rb"); FILE *f = PMM_POPEN(cmd, "rb");
if (!f) return NULL; if (!f) {
if (getenv("PMM_DEBUG"))
fprintf(stderr, "[http] popen(cmd) failed: errno=%d %s\n", errno, strerror(errno));
return NULL;
}
size_t cap = 64 * 1024, len = 0; size_t cap = 64 * 1024, len = 0;
char *buf = malloc(cap); char *buf = malloc(cap);
if (!buf) { PMM_PCLOSE(f); return NULL; } if (!buf) {
if (getenv("PMM_DEBUG"))
fprintf(stderr, "[http] malloc(%zu) failed: errno=%d %s\n", cap, errno, strerror(errno));
PMM_PCLOSE(f); return NULL;
}
for (;;) { for (;;) {
if (len + 4096 > cap) { if (len + 4096 > cap) {
cap *= 2; cap *= 2;