cvs: php4 /ext/session config.m4 mod_files.c

From: Date: Fri, 11 May 2001 17:43:41 +0000
Subject: cvs: php4 /ext/session config.m4 mod_files.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-5663@lists.php.net to get a copy of this message
sas Fri May 11 10:43:41 2001 EDT Modified files: /php4/ext/session config.m4 mod_files.c Log: Save a couple of syscalls per session Fix apparent new-session-files-were-not-locked bug Replace %m with portable "%s", strerror(errno) Index: php4/ext/session/config.m4 diff -u php4/ext/session/config.m4:1.10 php4/ext/session/config.m4:1.11 --- php4/ext/session/config.m4:1.10 Tue Mar 27 12:34:42 2001 +++ php4/ext/session/config.m4 Fri May 11 10:43:40 2001 @@ -1,4 +1,4 @@ -dnl $Id: config.m4,v 1.10 2001/03/27 20:34:42 sniper Exp $ +dnl $Id: config.m4,v 1.11 2001/05/11 17:43:40 sas Exp $ PHP_ARG_WITH(mm,for mm support, [ --with-mm[=DIR] Include mm support for session storage]) @@ -31,6 +31,7 @@ fi if test "$PHP_SESSION" != "no"; then + AC_CHECK_FUNCS(pread pwrite) PHP_EXTENSION(session,$ext_shared) PHP_SUBST(SESSION_SHARED_LIBADD) fi Index: php4/ext/session/mod_files.c diff -u php4/ext/session/mod_files.c:1.53 php4/ext/session/mod_files.c:1.54 --- php4/ext/session/mod_files.c:1.53 Mon Apr 30 05:43:38 2001 +++ php4/ext/session/mod_files.c Fri May 11 10:43:40 2001 @@ -49,6 +49,7 @@ char *basedir; size_t basedir_len; int dirdepth; + size_t st_size; } ps_files; ps_module ps_mod_files = { @@ -140,21 +141,18 @@ #ifdef O_EXCL data->fd = VCWD_OPEN((buf, O_RDWR | O_BINARY)); - if (data->fd == -1) { - if (errno == ENOENT) { - data->fd = VCWD_OPEN((buf, O_EXCL | O_RDWR | O_CREAT | O_BINARY, 0600)); - } - } else { - flock(data->fd, LOCK_EX); - } + + if (data->fd == -1 && errno == ENOENT) + data->fd = VCWD_OPEN((buf, O_EXCL | O_RDWR | O_CREAT | O_BINARY, 0600)); #else data->fd = VCWD_OPEN((buf, O_CREAT | O_RDWR | O_BINARY, 0600)); - if (data->fd != -1) - flock(data->fd, LOCK_EX); #endif + if (data->fd != -1) + flock(data->fd, LOCK_EX); if (data->fd == -1) - php_error(E_WARNING, "open(%s, O_RDWR) failed: %m (%d)", buf, errno); + php_error(E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf, + strerror(errno), errno); } } @@ -171,7 +169,7 @@ dir = opendir(dirname); if (!dir) { - php_error(E_NOTICE, "ps_files_cleanup_dir: opendir(%s) failed: %m (%d)\n", dirname, errno); + php_error(E_NOTICE, "ps_files_cleanup_dir: opendir(%s) failed: %s (%d)\n", dirname, strerror(errno), errno); return (0); } @@ -248,7 +246,7 @@ PS_READ_FUNC(files) { - int n; + ssize_t n; struct stat sbuf; PS_FILES_DATA; @@ -259,12 +257,15 @@ if (fstat(data->fd, &sbuf)) return FAILURE; - lseek(data->fd, 0, SEEK_SET); - - *vallen = sbuf.st_size; + data->st_size = *vallen = sbuf.st_size; *val = emalloc(sbuf.st_size); +#ifdef HAVE_PREAD + n = pread(data->fd, *val, sbuf.st_size, 0); +#else + lseek(data->fd, 0, SEEK_SET); n = read(data->fd, *val, sbuf.st_size); +#endif if (n != sbuf.st_size) { efree(*val); return FAILURE; @@ -275,16 +276,30 @@ PS_WRITE_FUNC(files) { + ssize_t n; PS_FILES_DATA; ps_files_open(data, key); if (data->fd < 0) return FAILURE; + + /* + * truncate file, if the amount of new data is smaller than + * the existing data set. + */ + + if (vallen < data->st_size) + ftruncate(data->fd, 0); - ftruncate(data->fd, 0); +#ifdef HAVE_PWRITE + n = pwrite(data->fd, val, vallen, 0); +#else lseek(data->fd, 0, SEEK_SET); - if (write(data->fd, val, vallen) != vallen) { - php_error(E_WARNING, "write failed: %m (%d)", errno); + n = write(data->fd, val, vallen); +#endif + + if (n != vallen) { + php_error(E_WARNING, "write failed: %s (%d)", strerror(errno), errno); return FAILURE; }

« previous php.cvs (#5663) next »