#include <sys/file.h>
#include <ctype.h>
#include <time.h>
+#include <errno.h>
#include "mbox.h"
#include "procmsg.h"
g_free(lockfile);
} else if (type == LOCK_FLOCK) {
gint lockfd;
+ gboolean fcntled = FALSE;
#if HAVE_FCNTL_H
struct flock fl;
fl.l_type = F_WRLCK;
if (fcntl(lockfd, F_SETLK, &fl) == -1) {
g_warning("can't fnctl %s (%s)", base, strerror(errno));
return -1;
+ } else {
+ fcntled = TRUE;
}
#endif
#if HAVE_FLOCK
- if (flock(lockfd, LOCK_EX|LOCK_NB) < 0) {
+ if (flock(lockfd, LOCK_EX|LOCK_NB) < 0 && !fcntled) {
perror("flock");
#else
#if HAVE_LOCKF
- if (lockf(lockfd, F_TLOCK, 0) < 0) {
+ if (lockf(lockfd, F_TLOCK, 0) < 0 && !fcntled) {
perror("lockf");
#else
{
return 0;
} else if (type == LOCK_FLOCK) {
+ gboolean fcntled = FALSE;
#if HAVE_FCNTL_H
struct flock fl;
fl.l_type = F_UNLCK;
if (fcntl(fd, F_SETLK, &fl) == -1) {
g_warning("can't fnctl %s", base);
return -1;
+ } else {
+ fcntled = TRUE;
}
#endif
#if HAVE_FLOCK
- if (flock(fd, LOCK_UN) < 0) {
+ if (flock(fd, LOCK_UN) < 0 && !fcntled) {
perror("flock");
#else
#if HAVE_LOCKF
- if (lockf(fd, F_ULOCK, 0) < 0) {
+ if (lockf(fd, F_ULOCK, 0) < 0 && !fcntled) {
perror("lockf");
#else
{