diff options
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; } |