/* Attempt to open a DSK file with driver <ndrv> */ static dsk_err_t dsk_iopen(DSK_DRIVER **self, const char *filename, int ndrv, COMPRESS_DATA *cd) { DRV_CLASS *dc = classes[ndrv]; dsk_err_t err; /* If we're handling compressed data, use the temporary uncompressed file */ if (cd) filename = cd->cd_ufilename; if (!dc) return DSK_ERR_BADPTR; (*self) = dsk_malloc(dc->dc_selfsize); if (!*self) return DSK_ERR_NOMEM; dr_construct(*self, dc); err = (dc->dc_open)(*self, filename); /* printf("%s: open %s = %d\n", dc->dc_drvname, filename, err); */ if (err == DSK_ERR_OK) { (*self)->dr_compress = cd; return err; } dsk_free (*self); *self = NULL; return err; }
/* Attempt to create a DSK file with driver number <ndrv> */ static dsk_err_t dsk_icreat(DSK_DRIVER **self, const char *filename, int ndrv, COMPRESS_DATA *cd) { DRV_CLASS *dc = classes[ndrv]; dsk_err_t err; if (!dc) return DSK_ERR_BADPTR; (*self) = dsk_malloc(dc->dc_selfsize); if (!*self) return DSK_ERR_NOMEM; dr_construct(*self, dc); err = (dc->dc_creat)(*self, filename); if (err == DSK_ERR_OK) { (*self)->dr_compress = cd; return err; } dsk_free (*self); *self = NULL; return err; }