int close(int fd) {
DLSYM_FUNCTION(real_close, "close");
- close_fd(fd);
+ if (fd >= 0) {
+ close_fd(fd);
+ }
return real_close(fd);
}
static int (*real_fclose)(FILE *);
int fclose(FILE *fp) {
+ int fd;
+
DLSYM_FUNCTION(real_fclose, "fclose");
- close_fd(fileno(fp));
+ if (fp != NULL && (fd = fileno(fp)) >= 0) {
+ close_fd(fd);
+ }
return real_fclose(fp);
}
putc_unlocked('x', stderr);
putc_unlocked('\n', stdout);
+ /* Test invalid stuff. */
+ close(-42);
+ close(-4711);
+ /* Can't test this, results in a segfault with the "normal" fclose(). */
+ /*fclose(NULL);*/
+ dup(-12);
+ dup2(12, -42);
+
return EXIT_SUCCESS;
}