summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2010-09-27 17:53:37 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2010-09-27 17:53:37 (GMT)
commitbb87e6bac6a2d31ab70792eee8ca065860a979f6 (patch)
tree3e97bbfd0ab686c6e09c2e69e4b31116d320f79b /src
parent84540ce6d1708e98c152276f524c938435da804c (diff)
downloadhdf5-bb87e6bac6a2d31ab70792eee8ca065860a979f6.zip
hdf5-bb87e6bac6a2d31ab70792eee8ca065860a979f6.tar.gz
hdf5-bb87e6bac6a2d31ab70792eee8ca065860a979f6.tar.bz2
[svn-r19479] I'm backing out my fix for bug 1707 because there're some unresolved issues - r19441 and 19466.
Bug 1707 is that H5Eset_auto causes a seg fault when an application uses -DH5_USE_16_API with the 1.8 library to compile. Tested on jam - backing out, simple.
Diffstat (limited to 'src')
-rw-r--r--src/H5.c9
-rw-r--r--src/H5E.c24
-rw-r--r--src/H5Edeprec.c9
-rw-r--r--src/H5Eint.c8
-rw-r--r--src/H5Epkg.h19
5 files changed, 23 insertions, 46 deletions
diff --git a/src/H5.c b/src/H5.c
index ca4402b..045c65b 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -210,7 +210,7 @@ H5_term_library(void)
int pending, ntries = 0, n;
size_t at = 0;
char loop[1024];
- H5E_auto_t func;
+ H5E_auto2_t func;
#ifdef H5_HAVE_THREADSAFE
/* explicit locking of the API */
@@ -223,11 +223,8 @@ H5_term_library(void)
goto done;
/* Check if we should display error output */
-#ifdef H5_USE_16_API_DEFAULT
- (void)H5Eget_auto(&func, NULL);
-#else
- (void)H5Eget_auto(H5E_DEFAULT, &func, NULL);
-#endif
+ (void)H5Eget_auto2(H5E_DEFAULT, &func, NULL);
+
/*
* Terminate each interface. The termination functions return a positive
* value if they do something that might affect some other interface in a
diff --git a/src/H5E.c b/src/H5E.c
index 51cf606..1a260a2 100644
--- a/src/H5E.c
+++ b/src/H5E.c
@@ -170,18 +170,13 @@ H5E_set_default_auto(H5E_t *stk)
{
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5E_set_default_auto)
-#ifdef H5_USE_16_API_DEFAULT
+#ifdef H5_USE_16_API
stk->auto_op.vers = 1;
-#else /* H5_USE_16_API_DEFAULT */
+ stk->auto_op.u.func1 = (H5E_auto1_t)H5Eprint1;
+#else /* H5_USE_16_API */
stk->auto_op.vers = 2;
-#endif /* H5_USE_16_API_DEFAULT */
-#ifdef H5_NO_DEPRECATED_SYMBOLS
- stk->auto_op.vers = 2;
-#else
- stk->auto_op.func1 = (H5E_auto1_t)H5Eprint1;
-#endif
- stk->auto_op.func2 = (H5E_auto2_t)H5Eprint2;
- stk->auto_op.user_set = FALSE;
+ stk->auto_op.u.func2 = (H5E_auto2_t)H5Eprint2;
+#endif /* H5_USE_16_API */
stk->auto_data = NULL;
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -1578,12 +1573,8 @@ H5Eget_auto2(hid_t estack_id, H5E_auto2_t *func, void **client_data)
/* Get the automatic error reporting information */
if(H5E_get_auto(estack, &op, client_data) < 0)
HGOTO_ERROR(H5E_ERROR, H5E_CANTGET, FAIL, "can't get automatic error info")
-
- if(op.user_set && op.vers == 1)
- HGOTO_ERROR(H5E_ERROR, H5E_CANTGET, FAIL, "wrong API function, H5Eset_auto1 has been called")
-
if(func)
- *func = op.func2;
+ *func = op.u.func2;
done:
FUNC_LEAVE_API(ret_value)
@@ -1633,8 +1624,7 @@ H5Eset_auto2(hid_t estack_id, H5E_auto2_t func, void *client_data)
/* Set the automatic error reporting information */
op.vers = 2;
- op.user_set = TRUE;
- op.func2 = func;
+ op.u.func2 = func;
if(H5E_set_auto(estack, &op, client_data) < 0)
HGOTO_ERROR(H5E_ERROR, H5E_CANTSET, FAIL, "can't set automatic error info")
diff --git a/src/H5Edeprec.c b/src/H5Edeprec.c
index 9f6d869..30f3ae9 100644
--- a/src/H5Edeprec.c
+++ b/src/H5Edeprec.c
@@ -389,12 +389,8 @@ H5Eget_auto1(H5E_auto1_t *func, void **client_data)
/* Get the automatic error reporting information */
if(H5E_get_auto(estack, &auto_op, client_data) < 0)
HGOTO_ERROR(H5E_ERROR, H5E_CANTGET, FAIL, "can't get automatic error info")
-
- if(auto_op.user_set && auto_op.vers == 2)
- HGOTO_ERROR(H5E_ERROR, H5E_CANTGET, FAIL, "wrong API function, H5Eset_auto2 has been called")
-
if(func)
- *func = auto_op.func1;
+ *func = auto_op.u.func1;
done:
FUNC_LEAVE_API(ret_value)
@@ -440,8 +436,7 @@ H5Eset_auto1(H5E_auto1_t func, void *client_data)
/* Set the automatic error reporting information */
auto_op.vers = 1;
- auto_op.user_set = TRUE;
- auto_op.func1 = func;
+ auto_op.u.func1 = func;
if(H5E_set_auto(estack, &auto_op, client_data) < 0)
HGOTO_ERROR(H5E_ERROR, H5E_CANTSET, FAIL, "can't set automatic error info")
diff --git a/src/H5Eint.c b/src/H5Eint.c
index eb8c140..3cdf549 100644
--- a/src/H5Eint.c
+++ b/src/H5Eint.c
@@ -1013,15 +1013,15 @@ H5E_dump_api_stack(int is_api)
HDassert(estack);
if(estack->auto_op.vers == 1) {
#ifndef H5_NO_DEPRECATED_SYMBOLS
- if(estack->auto_op.func1)
- (void)((estack->auto_op.func1)(estack->auto_data));
+ if(estack->auto_op.u.func1)
+ (void)((estack->auto_op.u.func1)(estack->auto_data));
#else /* H5_NO_DEPRECATED_SYMBOLS */
HDassert(0 && "version 1 error stack dump without deprecated symbols!");
#endif /* H5_NO_DEPRECATED_SYMBOLS */
} /* end if */
else {
- if(estack->auto_op.func2)
- (void)((estack->auto_op.func2)(H5E_DEFAULT, estack->auto_data));
+ if(estack->auto_op.u.func2)
+ (void)((estack->auto_op.u.func2)(H5E_DEFAULT, estack->auto_data));
} /* end else */
} /* end if */
diff --git a/src/H5Epkg.h b/src/H5Epkg.h
index b9688d2..a85ddc9 100644
--- a/src/H5Epkg.h
+++ b/src/H5Epkg.h
@@ -68,20 +68,15 @@
/****************************/
/* Some syntactic sugar to make the compiler happy with two different kinds of callbacks */
-#ifndef H5_NO_DEPRECATED_SYMBOLS
-typedef struct {
- unsigned vers; /* Which version callback to use */
- hbool_t user_set; /* If the printing function has been set. */
- H5E_auto1_t func1; /* Old-style callback, NO error stack param. */
- H5E_auto2_t func2; /* New-style callback, with error stack param. */
-} H5E_auto_op_t;
-#else
typedef struct {
- unsigned vers; /* Which version callback to use */
- hbool_t user_set; /* If the printing function has been set. */
- H5E_auto_t func2; /* Only the new style callback function is available. */
+ unsigned vers; /* Which version callback to use */
+ union {
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+ H5E_auto1_t func1; /* Old-style callback, NO error stack param. */
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+ H5E_auto2_t func2; /* New-style callback, with error stack param. */
+ }u;
} H5E_auto_op_t;
-#endif
/* Some syntactic sugar to make the compiler happy with two different kinds of callbacks */
typedef struct {