Una salida, todo liberado en C
El patrón adquirir-verificar-goto, escrito completo.
#include <stdio.h>
#include <stdlib.h>
int process(const char *path, size_t n) {
int result = 0;
int *buffer = NULL;
char *scratch = NULL;
FILE *f = fopen(path, "rb");
if (f == NULL) {
goto done;
}
buffer = malloc(n * sizeof(int));
if (buffer == NULL) {
goto close_file;
}
scratch = malloc(n);
if (scratch == NULL) {
goto free_buffer;
}
result = (int) fread(scratch, 1, n, f);
free(scratch);
free_buffer:
free(buffer);
close_file:
fclose(f);
done:
return result;
}
Cómo funciona
- Cada adquisición tiene una etiqueta a la cual desenrollar.
- Las etiquetas aparecen en orden inverso a la adquisición.
- Nada se libera dos veces y nada se olvida.
Palabras clave y builtins usados aquí
FILENULLcharconstgotoifintreturnsize_tsizeof
El intento, en números
- Líneas
- 31
- Caracteres a escribir
- 468
- Tokens
- 144
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 82 segundos.
Paso 2 de 2 en Errores y limpieza; paso 9 de 11 en APIs, errores y pruebas.