LDPUBLIC32 dsk_err_t LDPUBLIC16 dsk_close(DSK_DRIVER **self) { dsk_err_t e, e2; COMPRESS_DATA *dc; DSK_OPTION *opt, *opt2; if (!self || (!(*self)) || (!(*self)->dr_class)) return DSK_ERR_BADPTR; e = ((*self)->dr_class->dc_close)(*self); dc = (*self)->dr_compress; if (dc) { if ((*self)->dr_dirty) e2 = comp_commit(&dc); else e2 = comp_abort (&dc); if (!e) e = e2; } /* Free any option blocks the driver has accumulated */ opt = (*self)->dr_options; while (opt) { opt2 = opt->do_next; dsk_free(opt); opt = opt2; } dsk_free (*self); *self = NULL; return e; }
LDPUBLIC32 dsk_err_t LDPUBLIC16 dsk_close(DSK_DRIVER **self) { dsk_err_t e, e2; COMPRESS_DATA *dc; if (!self || (!(*self)) || (!(*self)->dr_class)) return DSK_ERR_BADPTR; e = ((*self)->dr_class->dc_close)(*self); dc = (*self)->dr_compress; if (dc) { if ((*self)->dr_dirty) e2 = comp_commit(&dc); else e2 = comp_abort (&dc); if (!e) e = e2; } dsk_free (*self); *self = NULL; return e; }