Mercurial > dovecot > original-hg > dovecot-1.2
changeset 1862:3b25ea70b500 HEAD
pread/pwrite fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 08 Nov 2003 16:20:10 +0200 |
parents | e42d97a85653 |
children | d2f729d6f1e2 |
files | src/lib/compat.c |
diffstat | 1 files changed, 34 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/compat.c Wed Nov 05 10:42:12 2003 +0200 +++ b/src/lib/compat.c Sat Nov 08 16:20:10 2003 +0200 @@ -1,13 +1,28 @@ -/* Copyright (c) 2002-2003 Timo Sirainen */ +/* + compat.c : Compatibility functions for OSes not having them + + Copyright (c) 2002 Timo Sirainen -#include "config.h" -#undef HAVE_CONFIG_H + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: -#ifdef PREAD_WRAPPERS -# define _XOPEN_SOURCE 500 /* Linux */ -#endif + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. -#define IN_COMPAT_C + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + #include "lib.h" #include <stdio.h> @@ -108,6 +123,11 @@ ssize_t my_pread(int fd, void *buf, size_t count, off_t offset) { ssize_t ret; + off_t old_offset; + + old_offset = lseek(fd, 0, SEEK_CUR); + if (old_offset == -1) + return -1; if (lseek(fd, offset, SEEK_SET) < 0) return -1; @@ -116,7 +136,7 @@ if (ret < 0) return -1; - if (lseek(fd, offset, SEEK_SET) < 0) + if (lseek(fd, old_offset, SEEK_SET) < 0) return -1; return ret; } @@ -124,6 +144,11 @@ ssize_t my_pwrite(int fd, const void *buf, size_t count, off_t offset) { ssize_t ret; + off_t old_offset; + + old_offset = lseek(fd, 0, SEEK_CUR); + if (old_offset == -1) + return -1; if (lseek(fd, offset, SEEK_SET) < 0) return -1; @@ -132,7 +157,7 @@ if (ret < 0) return -1; - if (lseek(fd, offset, SEEK_SET) < 0) + if (lseek(fd, old_offset, SEEK_SET) < 0) return -1; return ret; }