1
0
Fork 0
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:
akr 2011-10-27 15:11:06 +00:00
parent c1de566071
commit f8751046b8
2 changed files with 25 additions and 17 deletions

View file

@ -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

View file

@ -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;
}