mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/sdbm/_sdbm.c (sdbm_prep): refactored for less nesting.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33538 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c1de566071
commit
f8751046b8
2 changed files with 25 additions and 17 deletions
|
@ -1,3 +1,7 @@
|
|||
Fri Oct 28 00:09:31 2011 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* ext/sdbm/_sdbm.c (sdbm_prep): refactored for less nesting.
|
||||
|
||||
Thu Oct 27 18:28:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* configure.in (RUBY_DEFINE_IF): revert r33534 partially to get
|
||||
|
|
|
@ -187,6 +187,8 @@ sdbm_prep(char *dirname, char *pagname, int flags, int mode)
|
|||
if ((db = (DBM *) malloc(sizeof(DBM))) == NULL)
|
||||
return errno = ENOMEM, (DBM *) NULL;
|
||||
|
||||
db->pagf = -1;
|
||||
db->dirf = -1;
|
||||
db->flags = 0;
|
||||
db->hmask = 0;
|
||||
db->blkptr = 0;
|
||||
|
@ -205,31 +207,33 @@ sdbm_prep(char *dirname, char *pagname, int flags, int mode)
|
|||
* If we fail anywhere, undo everything, return NULL.
|
||||
*/
|
||||
flags |= O_BINARY;
|
||||
if ((db->pagf = open(pagname, flags, mode)) > -1) {
|
||||
if ((db->dirf = open(dirname, flags, mode)) > -1) {
|
||||
|
||||
if ((db->pagf = open(pagname, flags, mode)) == -1) goto err;
|
||||
if ((db->dirf = open(dirname, flags, mode)) == -1) goto err;
|
||||
/*
|
||||
* need the dirfile size to establish max bit number.
|
||||
*/
|
||||
if (fstat(db->dirf, &dstat) == 0) {
|
||||
if (fstat(db->dirf, &dstat) == -1) goto err;
|
||||
/*
|
||||
* zero size: either a fresh database, or one with a single,
|
||||
* unsplit data page: dirpage is all zeros.
|
||||
*/
|
||||
db->dirbno = (!dstat.st_size) ? 0 : -1;
|
||||
db->pagbno = -1;
|
||||
db->maxbno = dstat.st_size * (long) BYTESIZ;
|
||||
db->dirbno = (!dstat.st_size) ? 0 : -1;
|
||||
db->pagbno = -1;
|
||||
db->maxbno = dstat.st_size * (long) BYTESIZ;
|
||||
|
||||
(void) memset(db->pagbuf, 0, PBLKSIZ);
|
||||
(void) memset(db->dirbuf, 0, DBLKSIZ);
|
||||
/*
|
||||
* success
|
||||
*/
|
||||
return db;
|
||||
}
|
||||
(void) close(db->dirf);
|
||||
}
|
||||
(void) close(db->pagf);
|
||||
}
|
||||
(void) memset(db->pagbuf, 0, PBLKSIZ);
|
||||
(void) memset(db->dirbuf, 0, DBLKSIZ);
|
||||
/*
|
||||
* success
|
||||
*/
|
||||
return db;
|
||||
|
||||
err:
|
||||
if (db->pagf != -1)
|
||||
(void) close(db->pagf);
|
||||
if (db->dirf != -1)
|
||||
(void) close(db->dirf);
|
||||
free((char *) db);
|
||||
return (DBM *) NULL;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue