summaryrefslogtreecommitdiff
path: root/pp_sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'pp_sys.c')
-rw-r--r--pp_sys.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/pp_sys.c b/pp_sys.c
index 7cded5061f..78f7af561a 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -536,7 +536,7 @@ PP(pp_tie)
ENTER;
SAVEOP();
op = (OP *) &myop;
- if (perldb && curstash != debstash)
+ if (PERLDB_SUB && curstash != debstash)
op->op_private |= OPpENTERSUB_DB;
XPUSHs((SV*)GvCV(gv));
@@ -647,7 +647,7 @@ PP(pp_dbmopen)
ENTER;
SAVEOP();
op = (OP *) &myop;
- if (perldb && curstash != debstash)
+ if (PERLDB_SUB && curstash != debstash)
op->op_private |= OPpENTERSUB_DB;
PUTBACK;
pp_pushmark(ARGS);
@@ -4377,6 +4377,17 @@ int fd;
int operation;
{
int i;
+ int save_errno;
+ Off_t pos;
+
+ /* flock locks entire file so for lockf we need to do the same */
+ save_errno = errno;
+ pos = lseek(fd, (Off_t)0, SEEK_CUR); /* get pos to restore later */
+ if (pos > 0) /* is seekable and needs to be repositioned */
+ if (lseek(fd, (Off_t)0, SEEK_SET) < 0)
+ pos = -1; /* seek failed, so don't seek back afterwards */
+ errno = save_errno;
+
switch (operation) {
/* LOCK_SH - get a shared lock */
@@ -4408,6 +4419,10 @@ int operation;
errno = EINVAL;
break;
}
+
+ if (pos > 0) /* need to restore position of the handle */
+ lseek(fd, pos, SEEK_SET); /* ignore error here */
+
return (i);
}