summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2004-06-10 18:48:09 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2004-06-10 18:48:09 (GMT)
commit7ce626721c33d1ce3e33cbac963a98a1f42098be (patch)
treee6460970dda5b41652407357cf8fb041efac11d0 /src
parent52fa2f94ca927b2da1478e5cc48d92cd22aca15e (diff)
downloadhdf5-7ce626721c33d1ce3e33cbac963a98a1f42098be.zip
hdf5-7ce626721c33d1ce3e33cbac963a98a1f42098be.tar.gz
hdf5-7ce626721c33d1ce3e33cbac963a98a1f42098be.tar.bz2
[svn-r8646] *** empty log message ***
Diffstat (limited to 'src')
-rw-r--r--src/H5Odtype.c4
-rw-r--r--src/H5T.c10
-rw-r--r--src/H5Tcommit.c15
3 files changed, 24 insertions, 5 deletions
diff --git a/src/H5Odtype.c b/src/H5Odtype.c
index 4d44075..1d7ce7c 100644
--- a/src/H5Odtype.c
+++ b/src/H5Odtype.c
@@ -1122,7 +1122,9 @@ H5O_dtype_get_share(H5F_t UNUSED *f, const void *_mesg,
assert (sh);
if (H5F_addr_defined (dt->ent.header)) {
- assert (H5T_STATE_NAMED==dt->state || H5T_STATE_OPEN==dt->state);
+ if(H5T_STATE_NAMED!=dt->state && H5T_STATE_OPEN!=dt->state && H5T_STATE_TRANSIENT!=dt->state)
+ HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "datatype state is not valid");
+
sh->in_gh = FALSE;
sh->u.ent = dt->ent;
} else
diff --git a/src/H5T.c b/src/H5T.c
index e3379ec..304536b 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -2727,6 +2727,14 @@ H5T_open (H5G_entry_t *loc, const char *name, hid_t dxpl_id)
/* Open the datatype object */
if ((dt=H5T_open_oid(&ent, dxpl_id)) ==NULL)
HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "not found");
+
+ /* Mark any datatypes as being in memory now */
+ if (H5T_set_loc(dt, NULL, H5T_LOC_MEMORY)<0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid datatype location")
+
+ /* Unlock data type */
+ if (H5T_lock (dt, FALSE)<0)
+ HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to lock transient data type")
/* Set return value */
ret_value=dt;
@@ -4347,7 +4355,7 @@ done:
USAGE
htri_t H5T_set_loc(dt,f,loc)
H5T_t *dt; IN/OUT: Pointer to the datatype to mark
- H5F_t *dt; IN: Pointer to the file the datatype is in
+ H5F_t *f; IN: Pointer to the file the datatype is in
H5T_vlen_type_t loc IN: location of type
RETURNS
diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c
index fccb313..3a3b7a1 100644
--- a/src/H5Tcommit.c
+++ b/src/H5Tcommit.c
@@ -140,13 +140,17 @@ H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type, hid_t dxpl_id)
if (H5T_STATE_IMMUTABLE==type->state)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "data type is immutable");
+ /* Find the insertion file */
+ if (NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to find insertion point");
+
/* Check for a "sensible" datatype to store on disk */
if(H5T_is_sensible(type)!=TRUE)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "datatype is not sensible");
- /* Find the insertion file */
- if (NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to find insertion point");
+ /* Mark datatype as being on disk now */
+ if(H5T_set_loc(type, file, H5T_LOC_DISK)<0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "cannot mark datatype on disk")
/*
* Create the object header and open it for write access. Insert the data
@@ -160,6 +164,10 @@ H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type, hid_t dxpl_id)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to name data type");
type->state = H5T_STATE_OPEN;
+ /* Mark datatype as being on memory now */
+ if(H5T_set_loc(type, NULL, H5T_LOC_MEMORY)<0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "cannot mark datatype in memory")
+
done:
if (ret_value<0) {
if ((type->state==H5T_STATE_TRANSIENT || type->state==H5T_STATE_RDONLY) && H5F_addr_defined(type->ent.header)) {
@@ -170,6 +178,7 @@ done:
type->ent.header = HADDR_UNDEF;
}
}
+
FUNC_LEAVE_NOAPI(ret_value);
}