mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-11-26 10:29:27 +08:00
Improve mdb_open's error handling
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
|
Wed Jun 2 07:31:04 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
|
||||||
|
* src/libmdb/file.c: Improve mdb_open's error handling
|
||||||
|
|
||||||
Mon May 31 12:19:05 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
|
Mon May 31 12:19:05 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
|
||||||
* src/libmdb/file.c: Make better use of glib functions
|
* src/libmdb/file.c: Make better use of glib functions
|
||||||
|
|
||||||
|
|||||||
@@ -103,13 +103,12 @@ MdbHandle *mdb_open(char *filename, MdbFileFlags flags)
|
|||||||
/* need something to bootstrap with, reassign after page 0 is read */
|
/* need something to bootstrap with, reassign after page 0 is read */
|
||||||
mdb->fmt = &MdbJet3Constants;
|
mdb->fmt = &MdbJet3Constants;
|
||||||
mdb->f = (MdbFile *) g_malloc0(sizeof(MdbFile));
|
mdb->f = (MdbFile *) g_malloc0(sizeof(MdbFile));
|
||||||
|
mdb->f->refs = 1;
|
||||||
|
mdb->f->fd = -1;
|
||||||
mdb->f->filename = (char *) mdb_find_file(filename);
|
mdb->f->filename = (char *) mdb_find_file(filename);
|
||||||
if (!mdb->f->filename) {
|
if (!mdb->f->filename) {
|
||||||
fprintf(stderr, "Can't alloc filename\n");
|
fprintf(stderr, "Can't alloc filename\n");
|
||||||
g_free(mdb->f->filename);
|
mdb_close(mdb);
|
||||||
g_free(mdb->f);
|
|
||||||
g_free(mdb->backend_name);
|
|
||||||
g_free(mdb);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (flags & MDB_WRITABLE) {
|
if (flags & MDB_WRITABLE) {
|
||||||
@@ -121,14 +120,16 @@ MdbHandle *mdb_open(char *filename, MdbFileFlags flags)
|
|||||||
|
|
||||||
if (mdb->f->fd==-1) {
|
if (mdb->f->fd==-1) {
|
||||||
fprintf(stderr,"Couldn't open file %s\n",mdb->f->filename);
|
fprintf(stderr,"Couldn't open file %s\n",mdb->f->filename);
|
||||||
|
mdb_close(mdb);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!mdb_read_pg(mdb, 0)) {
|
if (!mdb_read_pg(mdb, 0)) {
|
||||||
fprintf(stderr,"Couldn't read first page.\n");
|
fprintf(stderr,"Couldn't read first page.\n");
|
||||||
|
mdb_close(mdb);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (mdb->pg_buf[0] != 0) {
|
if (mdb->pg_buf[0] != 0) {
|
||||||
close(mdb->f->fd);
|
mdb_close(mdb);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
mdb->f->jet_version = mdb_pg_get_int32(mdb, 0x14);
|
mdb->f->jet_version = mdb_pg_get_int32(mdb, 0x14);
|
||||||
@@ -138,10 +139,10 @@ MdbHandle *mdb_open(char *filename, MdbFileFlags flags)
|
|||||||
mdb->fmt = &MdbJet3Constants;
|
mdb->fmt = &MdbJet3Constants;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"Unknown Jet version.\n");
|
fprintf(stderr,"Unknown Jet version.\n");
|
||||||
|
mdb_close(mdb);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mdb->f->refs++;
|
|
||||||
return mdb;
|
return mdb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,7 +165,7 @@ mdb_close(MdbHandle *mdb)
|
|||||||
if (mdb->f->refs > 1) {
|
if (mdb->f->refs > 1) {
|
||||||
mdb->f->refs--;
|
mdb->f->refs--;
|
||||||
} else {
|
} else {
|
||||||
if (mdb->f->fd) close(mdb->f->fd);
|
if (mdb->f->fd != -1) close(mdb->f->fd);
|
||||||
g_free(mdb->f->filename);
|
g_free(mdb->f->filename);
|
||||||
g_free(mdb->f);
|
g_free(mdb->f);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user