}
/* Abrimos primer archivo de los volumenes. */
vfp->currvol = -1;
+ vfp->lastvol = 0;
if (vfvol_open_next(vfp)) /* no se pudo abrir el primer volumen. */
{
PERR("vfopen: no se pudo abrir archivo inicial!");
int vfvol_close(VFILE* vfp)
{
- /* Si es de escritura tengo que guardar la cabecera. */
- if (vfp->mode == VFWRITE)
+ /* Si es de escritura y el último guardo la cabecera. */
+ if (vfp->mode == VFWRITE && vfp->lastvol)
{
int ret;
PERR("vfvol_close: modo == VFWRITE");
/* Me posiciono al principio del archivo. */
- if ((ret = fseek(vfp->fp, 0l, SEEK_SET))) return ret; /* fseek error. */
+ if ((ret = fseek(vfp->fp, 0l, SEEK_SET)))
+ {
+ PERR("vfvol_close: fseek error");
+ return ret; /* fseek error. */
+ }
/* Guardo cabecera para indicar si es el último volumen o no. */
- if ((ret = fputc(vfp->lastvol, vfp->fp))) return ret; /* fputc error. */
+ if ((ret = fputc(vfp->lastvol, vfp->fp)) == EOF)
+ {
+ PERR("vfvol_close: fputc error");
+ return ret; /* fputc error. */
+ }
}
return fclose(vfp->fp);
}
if (volname) free(volname);
/* Si es para lectura, me fijo si es el últio a leer. */
if (vfp->mode == VFREAD) vfp->lastvol = fgetc(vfp->fp);
- /* Si es para escritura, guardo header dummy (supongo que es el último). */
+ /* Si es para escritura, guardo header por default (hay más volúmenes). */
if (vfp->mode == VFWRITE)
{
- vfp->room = vfp->volsize;
- return !fputc(1, vfp->fp);
+ vfp->room = vfp->volsize; /* tengo todo el espacio disponible. */
+ return fputc(vfp->lastvol, vfp->fp) == EOF;
}
return 0;
}