aboutsummaryrefslogtreecommitdiff
path: root/compat/dbminit.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-08-05 11:29:26 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2011-08-05 11:29:26 +0000
commit39cc2512acbcf56ffbf87e3d26afc0450ca37de9 (patch)
tree69bde184c07add3dfd3ad7479bf72b5bdcb584d6 /compat/dbminit.c
parentff788884bcaeeb59579ff88f51b90e57c1f8c3be (diff)
downloadgdbm-39cc2512acbcf56ffbf87e3d26afc0450ca37de9.tar.gz
gdbm-39cc2512acbcf56ffbf87e3d26afc0450ca37de9.tar.bz2
Rewrite using ndbm interface.
Diffstat (limited to 'compat/dbminit.c')
-rw-r--r--compat/dbminit.c72
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;
}

Return to:

Send suggestions and report system problems to the System administrator.