diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-08-05 11:29:26 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-08-05 11:29:26 +0000 |
commit | 39cc2512acbcf56ffbf87e3d26afc0450ca37de9 (patch) | |
tree | 69bde184c07add3dfd3ad7479bf72b5bdcb584d6 /compat/dbminit.c | |
parent | ff788884bcaeeb59579ff88f51b90e57c1f8c3be (diff) | |
download | gdbm-39cc2512acbcf56ffbf87e3d26afc0450ca37de9.tar.gz gdbm-39cc2512acbcf56ffbf87e3d26afc0450ca37de9.tar.bz2 |
Rewrite using ndbm interface.
Diffstat (limited to 'compat/dbminit.c')
-rw-r--r-- | compat/dbminit.c | 72 |
1 files changed, 7 insertions, 65 deletions
diff --git a/compat/dbminit.c b/compat/dbminit.c index eb21292..94ddc22 100644 --- a/compat/dbminit.c +++ b/compat/dbminit.c @@ -20,9 +20,9 @@ /* Include system configuration before all else. */ #include "autoconf.h" +#include "dbm-priv.h" -#include "gdbmdefs.h" -#include "extern.h" +DBM *_gdbm_file; /* Initialize dbm system. FILE is a pointer to the file name. In standard dbm, the database is found in files called FILE.pag and @@ -37,78 +37,20 @@ int dbminit (char *file) { - char* pag_file; /* Used to construct "file.pag". */ - char* dir_file; /* Used to construct "file.dir". */ - struct stat dir_stat; /* Stat information for "file.dir". */ - int ret; - - - ret = 0; /* Default return value. */ - - /* Prepare the correct names of "file.pag" and "file.dir". */ - pag_file = (char *) malloc (strlen (file)+5); - dir_file = (char *) malloc (strlen (file)+5); - if ((pag_file == NULL) || (dir_file == NULL)) - { - gdbm_errno = GDBM_MALLOC_ERROR; /* For the hell of it. */ - return -1; - } - - strcpy (pag_file, file); - strcat (pag_file, ".pag"); - strcpy (dir_file, file); - strcat (dir_file, ".dir"); - if (_gdbm_file != NULL) - gdbm_close (_gdbm_file); - + dbm_close (_gdbm_file); /* Try to open the file as a writer. DBM never created a file. */ - _gdbm_file = gdbm_open (pag_file, 0, GDBM_WRITER, 0, NULL); - + _gdbm_file = dbm_open (file, O_RDWR, 0644); /* If it was not opened, try opening it as a reader. */ if (_gdbm_file == NULL) { - _gdbm_file = gdbm_open (pag_file, 0, GDBM_READER, 0, NULL); - + _gdbm_file = dbm_open (file, O_RDONLY, 0644); /* Did we successfully open the file? */ if (_gdbm_file == NULL) { gdbm_errno = GDBM_FILE_OPEN_ERROR; - ret = -1; - goto done; + return -1; } } - - /* If the database is new, link "file.dir" to "file.pag". This is done - so the time stamp on both files is the same. */ - if (stat (dir_file, &dir_stat) == 0) - { - if (dir_stat.st_size == 0) - if (unlink (dir_file) != 0 || link (pag_file, dir_file) != 0) - { - gdbm_errno = GDBM_FILE_OPEN_ERROR; - gdbm_close (_gdbm_file); - ret = -1; - goto done; - } - } - else - { - /* Since we can't stat it, we assume it is not there and try - to link the dir_file to the pag_file. */ - if (link (pag_file, dir_file) != 0) - { - gdbm_errno = GDBM_FILE_OPEN_ERROR; - gdbm_close (_gdbm_file); - ret = -1; - goto done; - } - } - - ret = 0; - -done: - free (dir_file); - free (pag_file); - return ret; + return 0; } |