Cargando…
← VOLVER AL ARCHIVO

Recursión sin pila: copiar carpetas con 4 KB

AmigaOS da a cada proceso ~4 KB de pila. Copiar un árbol de carpetas es recursivo por naturaleza. Cómo ChumOS copia árboles enteros sin reventar, y el bug de ExNext() que casi nos come un disco.

DESCLASIFICADO · CHUMOSTC 02:47:18 · LIVELAT 41.368° · LON -89.465° · PRINCETON● REC

En un sistema moderno, copiar una carpeta dentro de otra es una función recursiva de veinte líneas. En un Amiga 500, esa misma función es una bomba de relojería: AmigaOS regala a cada proceso unos 4 KB de pila, y cada nivel de recursión ingenua cuesta cientos de bytes. Un árbol de seis niveles y adiós.

Marcos de recursión en el heap

La solución de ChumOS: la recursión no vive en la pila, vive en el heap. Cada nivel reserva su marco —un FileInfoBlock y dos buffers de ruta, unos 780 bytes— con AllocMem, encadenado como lista. La profundidad está acotada, y si el disco está más anidado que el límite, la operación falla con un mensaje digno en vez de con un Guru Meditation.

La guarda anti-recursión

Segunda trampa clásica: copiar una carpeta DENTRO de sí misma. Sin guarda, la copia se persigue la cola infinitamente hasta llenar el disco. ChumOS compara rutas con semántica AmigaDOS —insensible a mayúsculas— antes de empezar, y simplemente se niega: no puedes copiar Work: dentro de Work:Backup si Backup cuelga de Work.

El borrado re-lee la primera entrada tras cada unlink. Borrar durante un ExNext() es comportamiento indefinido, y lo aprendimos con un disco de pruebas.

El eureka doloroso: ExNext() y el borrado

El bug que más nos costó: borrar un árbol mientras lo recorres con ExNext() es comportamiento indefinido en AmigaDOS. A veces funciona. A veces se salta ficheros. Una vez, en un disco de pruebas, entró en un bucle glorioso. La solución es humilde: tras cada unlink, volver a leer la primera entrada del directorio. Más lento, imposible de romper. En un disquete de 880 K, la corrección le gana a la elegancia todas las veces.

D. ABELLÁN · FOUNDER · PRINCETON, IL · 2026.06.28

// ARCHIVO
EXPEDIENTES RELACIONADOS
EXPEDIENTES VINCULADOS
CHANNEL #0x4C7A · ON AIRREC ● TC 02:47:18SIGNAL ▮▮▮▮▮ 100% · AES-256
TRANSMISSION · ENCRYPTED// SUBSCRIBE

Suscríbete al canal cifrado.

Devlogs, parches y filtraciones internas. Cero spam, cero analytics. Solo lo que importa, cuando importa.

2,418AGENTES SUSCRITOS+184 · 7D
42DEVLOGS / AÑOPROMEDIO 2024–26
0SPAM · TRACKINGDESDE 2025
// AGENT_INTAKEv3.07
UNIRSE A DISCORD
TRANSMISIÓN RECIBIDA · revisa tu inbox
CIFRADO100%
PRIVACIDAD100%
FRECUENCIA2-3/MES
// AES-256// 0 ANALYTICS// 1-CLICK UNSUB// HOSTED IN EU
// SIGNED · PRINCETON · ILLINOIS · 2025▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮ ▮END_OF_TRANSMISSION_◆