return NULL;
_SYSIO_FINIT(fil, ino, flags);
- I_REF(ino);
+ F_REF(fil);
+ I_REF(fil->f_ino);
return fil;
}
assert(fil->f_ino);
err = (*fil->f_ino->i_ops.inop_close)(fil->f_ino);
assert(!err);
+ I_RELE(fil->f_ino);
free(fil);
}
return 0;
}
-#if ZERO_SUM_MEMORY
+#ifdef ZERO_SUM_MEMORY
void
_sysio_fd_shutdown()
{
struct file *fil;
int fd;
- if (oldfd == newfd)
+ if (oldfd == newfd && oldfd >= 0)
return newfd;
fil = _sysio_fd_find(oldfd);