data->lastkey = estrdup(key);
-#ifdef O_EXCL
- data->fd = VCWD_OPEN(buf, O_RDWR | O_BINARY);
-
- if (data->fd == -1 && errno == ENOENT)
- data->fd = VCWD_OPEN_MODE(buf, O_EXCL | O_RDWR | O_CREAT | O_BINARY, 0600);
-#else
data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, 0600);
-#endif
- if (data->fd != -1)
+
+ if (data->fd != -1) {
flock(data->fd, LOCK_EX);
-
- if (data->fd == -1)
+ if (fcntl(data->fd, F_SETFD, 1)) {
+ php_error(E_WARNING, "fcntl(%d, F_SETFD, 1) failed: %s (%d)", data->fd, strerror(errno), errno);
+ }
+ } else {
php_error(E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf,
strerror(errno), errno);
+ }
}
}