#include <assert.h>
#include <errno.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <sys/queue.h>
#include "sysio.h"
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);
}
struct file *fil;
int fd;
- if (oldfd == newfd)
+ if (oldfd == newfd && oldfd >= 0)
return newfd;
fil = _sysio_fd_find(oldfd);