See ChangeLog entry 2005-11-07 for details.
This commit is contained in:
50
os/utils.c
50
os/utils.c
@@ -2238,3 +2238,53 @@ CheckUserAuthorization(void)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __SCO__
|
||||
#include <fcntl.h>
|
||||
|
||||
static void
|
||||
lockit (int fd, short what)
|
||||
{
|
||||
struct flock lck;
|
||||
|
||||
lck.l_whence = 0;
|
||||
lck.l_start = 0;
|
||||
lck.l_len = 1;
|
||||
lck.l_type = what;
|
||||
|
||||
(void)fcntl (fd, F_SETLKW, &lck);
|
||||
}
|
||||
|
||||
/* SCO OpenServer 5 lacks pread/pwrite. Emulate them. */
|
||||
ssize_t
|
||||
pread (int fd, void *buf, size_t nbytes, off_t offset)
|
||||
{
|
||||
off_t saved;
|
||||
ssize_t ret;
|
||||
|
||||
lockit (fd, F_RDLCK);
|
||||
saved = lseek (fd, 0, SEEK_CUR);
|
||||
lseek (fd, offset, SEEK_SET);
|
||||
ret = read (fd, buf, nbytes);
|
||||
lseek (fd, saved, SEEK_SET);
|
||||
lockit (fd, F_UNLCK);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
ssize_t
|
||||
pwrite (int fd, const void *buf, size_t nbytes, off_t offset)
|
||||
{
|
||||
off_t saved;
|
||||
ssize_t ret;
|
||||
|
||||
lockit (fd, F_WRLCK);
|
||||
saved = lseek (fd, 0, SEEK_CUR);
|
||||
lseek (fd, offset, SEEK_SET);
|
||||
ret = write (fd, buf, nbytes);
|
||||
lseek (fd, saved, SEEK_SET);
|
||||
lockit (fd, F_UNLCK);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif /* __SCO__ */
|
||||
|
||||
Reference in New Issue
Block a user