struct stat sb;
int fd, flags = oflags;
- if (lstat (fname, &sb) == -1) {
+ if (!(oflags & O_CREAT)) {
+ if (lstat(fname, &sb) == -1) {
- if (errno != ENOENT) {
- return (-1);
+ if (errno != ENOENT) {
+ return (-1);
+ }
}
- }
- else if (!S_ISREG (sb.st_mode)) {
- if (S_ISLNK (sb.st_mode)) {
- if (!allow_symlink) {
+ else if (!S_ISREG (sb.st_mode)) {
+ if (S_ISLNK (sb.st_mode)) {
+ if (!allow_symlink) {
+ return -1;
+ }
+ }
+ else {
return -1;
}
}
- else {
- return -1;
- }
}
#ifdef HAVE_OCLOEXEC