return NULL;
_SYSIO_FINIT(fil, ino, flags);
+ F_REF(fil);
I_REF(ino);
return fil;
assert(!fil->f_ref);
assert(fil->f_ino);
err = (*fil->f_ino->i_ops.inop_close)(fil->f_ino);
+ I_RELE(fil->f_ino);
assert(!err);
free(fil);
}
return 0;
}
-#if ZERO_SUM_MEMORY
+#ifdef ZERO_SUM_MEMORY
static void free_oftab(oftab_t *ot)
{
if (ot->table) {
init_oftab();
- if (oldfd == newfd)
- return 0;
+ if (oldfd == newfd && oldfd >= 0)
+ return newfd;
fil = _sysio_fd_find(oldfd);
if (!fil)