summaryrefslogtreecommitdiffstats
path: root/src/H5E.c
Commit message (Collapse)AuthorAgeFilesLines
* [svn-r18159] Description:Quincey Koziol2010-01-231-16/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bring Coverity fixes from 1/22/10 session to trunk: r18137: 219: Initialized hid_t to -1 and added close to error block. 189-191: Initialized line to NULL and added free line, and close fp to error block. r18138: 19: Moved code block for printing that the number of enums is empty to the error block. (Would never have been executed otherwise) r18139: Fix coverity item 58. Moved code related to displaying the parent of a repeated group to the else(isRoot) section, as the root group has no parent. r18140: 218: Initialized ret_value variable to -1. Because of throw Exception in default case of switch, the coverity problem would not have executed anyway. Good pratice is to initialize variables. r18141: Fix coverity item 92. Added code to H5E_register_class to free cls in case of an error. r18142: Fix coverity item 91. Added code to H5E_create_msg to free msg in case of an error. r18143: fixed issue 14, took away "if" and used #ifndef_xxx. r18144: Fix coverity item 110. Added code to H5Eget_minor to free msg_str in case of an error. r18145: fixed coverity #18 removed "aligned", it is always NULL. r18146: Fix coverity item 109. Added code to H5Eget_major to free msg_str in case of an error. r18147: Fixed coverity #81 and #82, Check for bad pointer(s), but can't issue error, just leave r18148: Fix coverity item 97. Added code to H5FD_fapl_open to free copied_driver_info in case of an error. r18149: Fix coverity item 96. Added code to H5FD_dxpl_open to free copied_driver_info in case of an error. r18150: Fix Coverity issue #29: Protected cache_ptr dereferences with "if(pass)" block r18151: Fix coverity item 93. Added code to H5FL_fac_init to free factory and new_node in case of an error. r18152: Fix coverity items 98 and 99. Added code free allocated space in case of error. r18155: 124: Freed head pointer before jumping to done. There was no error handling block and normal exit used same path out. 120-123: Freed list of lists in error handling block. r18156: Fix coverity issues 179, 180, 181, 182, 183, 184, 186, 320, 407. These were resource leak issues where allocated memory was not freed, generally in the case of tests that failed. Tested on: Mac OS X/32 10.6.2 (amazon) debug & production
* [svn-r17313] Description:Quincey Koziol2009-08-101-1/+1
| | | | | | | | | | | | | | | | | | | | | Bring back various minor code cleanups from the file free space branch Tested on: FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode Mac OS X/32 10.5.8 (amazon) in debug mode Mac OS X/32 10.5.8 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode
* [svn-r17276] Description:Quincey Koziol2009-07-301-1/+0
| | | | | | | | Clean up compiler warnings Tested on: Mac OS X/32 10.5.7 (amazon) Too minor to require h5committest
* [svn-r16955] Lifted the restrictions that major and minor errors must be in ↵Raymond Lu2009-05-151-8/+0
| | | | | | the same class. Tested on jam - simple change.
* [svn-r16006] Modify the commit of r15943 for H5_USE_16_API. Let H5version.h ↵Raymond Lu2008-10-301-3/+3
| | | | | | check if H5_USE_16_API_DEFAULT is defined by the configure. Then define H5_USE_16_API and use it throughout. Tested on kagiso - supposed to be simple.
* [svn-r15943] Changed the library's macros H5_USE_16_API to ↵Raymond Lu2008-10-241-3/+3
| | | | | | | | | H5_USE_16_API_DEFAULT avoid possible conflict wi th user's definition of H5_USE_16_API. The H5_USE_16_API_DEFAULT is defined through configure with the flag --with-default-api-version=v16. Tested with h5committest.
* [svn-r15796] Purpose: Close bug #1322Neil Fortner2008-10-071-1/+1
| | | | | | | | | Description: Fixes a possible datatype id leak that could occur during compound datatype conversion, or more precisely, when unregistering those conversions. Datatype ids normally registered by the library are no longer visible to the application via H5Fget_obj_ids and H5Fget_obj_count. Tested: kagiso, linew, smirom (h5committest)
* [svn-r15609] Description:Quincey Koziol2008-09-101-4/+4
| | | | | | | | Omnibus compiler warning cleanup & some reformatting also. Tested on: Mac OS X/32 10.5.4 (amazon) Too minor to require h5committest
* [svn-r15552] Fix potential memory leak in H5E_close_msg_cb.Neil Fortner2008-08-281-1/+4
| | | | Tested: kagiso
* [svn-r15549] Description:Quincey Koziol2008-08-281-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | Initial checkin of extensible array data structure prototype code and regression tests. Initial definitions for revised FUNC_ENTER/LEAVE and error reporting macros, which are being vetted in the extensible array code. Minor warning and formatting cleanups in other sections of code. Tested on: Mac OS X/32 10.5.4 (amazon) in debug mode Mac OS X/32 10.5.4 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
* [svn-r15515] Fix faulty error checking in call to H5I_remove().Neil Fortner2008-08-211-1/+1
| | | | | | Add prototype to the top of app_ref.c to suppress warning. Tested: kagiso
* [svn-r15510] Description:Quincey Koziol2008-08-211-16/+16
| | | | | | | | Clean up warnings & formatting Tested on: Mac OS X/32 10.5.4 (amazon) More tests forthcoming
* [svn-r15485] Purpose: Allow library to shut down properly when objects have ↵Neil Fortner2008-08-191-22/+22
| | | | | | | | | | | | | | | | reference count > 1. Description: Added a new field 'app_count' to H5I_id_info_t struct, to track the reference count on an id due to the application. the old 'count' field tracks the total. Generally any id visible to the application gets placed in app_count. Added app_ref boolean parameter to H5I_inc_ref, H5I_dec_ref, H5I_register, H5I_clear_type, and a few other functions, to specify whether the operation(s) being performed on the id(s) are due to the application (TRUE) or not (FALSE). Test added for this case. Tested: kagiso, smirom, linew (h5committest)
* [svn-r14230] Description:Quincey Koziol2007-11-011-17/+75
| | | | | | | | | | | | | | | | | | | Add H5Ecreate_stack() API routine, to fill a minor gap in the error routines. Tested on: FreeBSD/32 6.2 (duty) in debug mode FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Mac OS X/32 10.4.10 (amazon) in debug mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
* [svn-r14199] Description:Quincey Koziol2007-10-111-0/+5
| | | | | | | | | | | | | | | | | | | | | Add H5Dcreate to API versioned routines, replacing internal usage with H5Dcreate2 Fix thread-safe error stack initialization for API versioned error stack printing routines. Tested on: FreeBSD/32 6.2 (duty) in debug mode FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Mac OS X/32 10.4.10 (amazon) in debug mode
* [svn-r14097] Description:Quincey Koziol2007-08-211-63/+29
| | | | | | | | | | | | | First real use of API versioning code, H5E routines switched to use new API versioning scheme. Tested on: Mac OS X/32 10.4.10 (amazon) FreeBSD/32 6.2 (duty) FreeBSD/64 6.2 (liberty) Linux/32 2.6 (kagiso) Linux/64 2.6 (smirom) Solaris/32 5.10 (linew)
* [svn-r13650] Description:Quincey Koziol2007-04-121-2/+2
| | | | | | | | Clean up problems from error handling API changes in parallel and threadsafe builds. Tested on: FreeBSD/64 6.2 (liberty) w/parallel & threadsafe
* [svn-r13648] Description:Quincey Koziol2007-04-121-1432/+239
| | | | | | | | | | Rename new error handling API routines from H5E<foo>_stack() to H5E<foo>2(). Tested on: Mac OS X/32 10.4.9 (amazon) FreeBSD/32 6.2 (duty) FreeBSD/64 6.2 (liberty)
* [svn-r13475] There's a configure issue linking szip's shared libraries when ↵Mike McGreevy2007-03-081-9/+9
| | | | | | | | | | | | running on kagiso. The static szip libraries are working as intended, but when shared szip libraries are present and intended for use they cannot be opened. A check has been implemented to test if shared szip libraries are functional on current platform. If they are not, and the user is trying to use them, szip is now disbaled and the user is informed. This issue occurs on kagiso, and the resolution was tested on kagiso.
* [svn-r13253] Updated all C and C++ style source code files with the THG ↵Albert Cheng2007-02-071-2/+3
| | | | | | | | | copyright notice. Tested platform: Kagiso only since it is only a comment block change. If it works in one machine, it should work in all, I hope. Still need to check the parallel build on copper.
* [svn-r13068] Ran bin/reconfigure. Some of the scripts have been changed or ↵James Laird2006-12-181-17/+17
| | | | | | | | | haven't been run in a while, so many of the source files were updated with tracing macros, etc. No code changes by me. Tested on kagiso and smirom.
* [svn-r12803] Description:Quincey Koziol2006-10-231-114/+116
| | | | | | | | | | | | | | Finish new version of the I/O pipeline message, which is much smaller than the previous version. This version is used with the "use the latest version of the format" flag. Closed several memory leaks/overruns (found with valgrind). Also, lots of compiler & formatting cleanups. Tested on: Linux/32 2.6 (chicago) Linux/64 2.6 (chicago2)
* [svn-r12706] Description:Quincey Koziol2006-10-021-8/+8
| | | | | | | | | Clean up some of the warnings on 64-bit Linux... Tested on: Linux/32 2.6 (chicago) Linux/64 2.6 (chicago2) Too minor to require h5committest
* [svn-r12440] Purpose:Quincey Koziol2006-06-271-13/+13
| | | | | | | | | | | Code cleanup Description: Trim trailing whitespace in Makefile.am and C/C++ source files to make diffing changes easier. Platforms tested: None necessary, whitespace only change
* [svn-r12345] Purpose: Codes for backward compatibility.Raymond Lu2006-05-121-27/+200
| | | | | | | | | | Description: Function prototype H5E_walk_t and structure H5E_error_t wasn't backward compatible. Solution: Make them compatible with v1.6 and provide new definitions of H5E_walk_stack_t and H5E_error_stack_t. Platforms tested: fuss and h5committest.
* [svn-r11742] Purpose: Minor correction.Raymond Lu2005-11-181-2/+4
| | | | | | | | | Description: H5Eset_auto_stack() and H5Eset_auto() used FUNC_ENTER_API. It would clear the error stack from the previous API call. It's better to use FUNC_ENTER_API_NOCLEAR to avoid clearing the stack. Platforms tested: fuss - simple change.
* [svn-r11738] Purpose:James Laird2005-11-181-1/+1
| | | | | | | | | | | | | | | | | | | Configure feature Description: Added 'make trace' target. Solution: Added tracing to 1.7. This was done automatically in 1.6, but left out of 1.7 until now (oops!). Tracing in 1.7 only happens manually, when the user types 'make trace.' Tracing automatically requires more framework than it's worth. I also fixed a couple of tracing bugs and ran trace. Platforms tested: mir, sleipnir, modi4 Misc. update:
* [svn-r11733] Purpose:Quincey Koziol2005-11-161-0/+8
| | | | | | | | | | | | | | | | | | Code cleanup Description: Added some comments about the thread-specific memory for the error and function stacks. Changed H5close() to not use the function stack (since it causes it to be re-enabled after shutting it down) Changed thread-safe semaphore code to not use dynamicly allocated memory. Platforms tested: FreeBSD 4.11 (sleipnir) Linux 2.4 Too minor to require h5committest
* [svn-r11245] Purpose:Quincey Koziol2005-08-131-148/+148
| | | | | | | | | | | | | | | | | | | | Code cleanup Description: Trim trailing whitespace, which is making 'diff'ing the two branches difficult. Solution: Ran this script in each directory: foreach f (*.[ch] *.cpp) sed 's/[[:blank:]]*$//' $f > sed.out && mv sed.out $f end Platforms tested: FreeBSD 4.11 (sleipnir) Too minor to require h5committest
* [svn-r11228] Purpose:Quincey Koziol2005-08-101-0/+4
| | | | | | | | | | | Code cleanup Description: Add a check for the correct type of ID for H5Eclose_stack() Platforms tested: FreeBSD 4.11 (sleipnir) Too minor to require h5committest
* [svn-r11107] Purpose:Quincey Koziol2005-07-221-8/+18
| | | | | | | | | | | | | Optimization Description: Switch some internal error API data structures over to using H5FL* routines for memory management (instead of malloc/free), in order to reduce abuse of operating system's memory allocation code. Platforms tested: FreeBSD 4.11 (sleipnir) Too minor to require h5committest
* [svn-r11088] Purpose:MuQun Yang2005-07-191-0/+4
| | | | | | | | | | | | | | | | | | support thread-safe on windows Description: pthread on windows won't return a numeric value from pthread_safe. An error message applying on linux won't apply on windows, Print some other message. Solution: Platforms tested: windows xp, too minor to test at other platforms. Misc. update:
* [svn-r10847] Purpose: Bug fixRaymond Lu2005-06-021-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Description: See details from Bug #213. Family member file size wasn't saved anywhere in file. When family file is opened, the first member size determine the member size. Solution: This is the fourth step of checkin. A test suit is added for h5repart, including a program to generate the test files, a script file to run h5repart, and a program to verify repartitioned files can be opened by the library. There's a change from the first step of checkin. Family name template is no longer saved in the superblock because different pathname can make the name different. In the third step of checkin, h5repart has been modified. If h5repart is used to change the size of family member file, the new size(actual member size) is saved in the superblock. In the second step of checkin, multi driver is checked against the driver name saved in superblock. Wrong driver will result in a failure with an error message indicating multi driver should be used. This change includes split driver because it's a special case for multi driver. In the first step of checkin. Family member size and name template(unused at this stage) are saved in file superblock. When file is reopened,the size passed in thrin superblock. A different size will trigger a failure with an error message indicating the right size. Wrong driver to open family file will cause a failure, too. Platforms tested: h5committest and fuss. Misc. update: MANIFEST
* [svn-r10749] Purpose:Quincey Koziol2005-05-171-64/+33
| | | | | | | | | | | | | | | Code cleanup Description: Convert H5Eget_num from 'size_t' to 'ssize_t' to allow for correct error reporting (eventually). Also, convert a bunch of static routines from "FUNC_ENTER_NOAPI" to "FUNC_ENTER_NOAPI_NOINIT" or "FUNC_ENTER_NOAPI_NOINIT_NOFUNC" Platforms tested: FreeBSD 4.11 (sleipnir) w/pthreads Too minor to require h5committest
* [svn-r10746] Purpose: Minor correctionRaymond Lu2005-05-161-7/+13
| | | | | | | | | Description: H5Eget_num used to return an INT type. That's not consistent with the parameter of H5Epop. Solution: Changed it to SIZE_T type. Platforms tested: fuss - very simple change.
* [svn-r10736] Purpose:Quincey Koziol2005-05-071-2/+2
| | | | | | | | | | | Code cleanup Description: Clean up some compiler warnings Platforms tested: FreeBSD 4.11 (sleipnir) h5committest
* [svn-r10705] Purpose:Quincey Koziol2005-04-301-0/+2
| | | | | | | | | | | Code cleanup Description: Clean up a few compiler warnings of various sorts... Platforms tested: FreeBSD 4.11 (sleipnir) Too minor to require h5committest
* [svn-r9865] Purpose:Quincey Koziol2005-01-241-5/+9
| | | | | | | | | | | | Bug fix Description: Catch another way that vsnprintf() can fail (this time on the HP) and deal with that. Platforms tested: HP/UX 11.x (kelgia) Doesn't affect other platforms
* [svn-r9861] Purpose:Quincey Koziol2005-01-241-1/+17
| | | | | | | | | | | | | | | | | | | | Bug fix Description: Add detect vasprintf() routine and use it instead of vsnprintf() when formatting error descriptions if it's available. Added configure test to detect "broken" vsnprintf() implementations which don't return the correct number of character for strings that are too long to fit into the buffer provided (currently a problem on the SGIs and probably the HP). Re-wrote error formatting code in H5Epush_stack() to handle broken vsnprintf() implementations, etc. Platforms tested: IRIX64 6.5 (modi4) h5committest
* [svn-r9857] Purpose: MaintenanceElena Pourmal2005-01-221-3/+0
| | | | | | | | | | | | | | Description: Removed PABLO from the source Solution: Platforms tested: arabica with 64-bit, copper with parallel, heping with GNU C and C++ and PGI fortran (but I disabled hl, there is some weird problem only on heping: F9XMODFLAG is not propagated to the Makefile files Misc. update:
* [svn-r9837] Purpose:Quincey Koziol2005-01-191-0/+7
| | | | | | | | | | | | | | | Bug fix Description: Calling HDvsnprintf() several times (should be twice) is incorrect without calling va_end() and va_start() again. Solution: Call va_end() and va_start() before calling HDvsnprintf() again. Platforms tested: Linux 2.4/x86_64 (mir) Too minor to require h5committest
* [svn-r9825] Purpose:Quincey Koziol2005-01-141-2/+20
| | | | | | | | | | | | Bug fix Description: Fix possible overrun in error description string by allocating large enough string on the fly. Platforms tested: FreeBSD 4.10 (sleipnir) Too minor to require h5committest
* [svn-r9780] Purpose:Quincey Koziol2005-01-081-1/+1
| | | | | | | | | | | | Bug fix Description: Print the thread ID in a little more portable of a fashion, disallowing negative thread IDs. Platforms tested: Linux 2.4 (heping) w/threadsafe Too Minor to require h5committest
* [svn-r9727] Purpose:Quincey Koziol2004-12-291-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug Fix/Code Cleanup/Doc Cleanup/Optimization/Branch Sync :-) Description: Generally speaking, this is the "signed->unsigned" change to selections. However, in the process of merging code back, things got stickier and stickier until I ended up doing a big "sync the two branches up" operation. So... I brought back all the "infrastructure" fixes from the development branch to the release branch (which I think were actually making some improvement in performance) as well as fixed several bugs which had been fixed in one branch, but not the other. I've also tagged the repository before making this checkin with the label "before_signed_unsigned_changes". Platforms tested: FreeBSD 4.10 (sleipnir) w/parallel & fphdf5 FreeBSD 4.10 (sleipnir) w/threadsafe FreeBSD 4.10 (sleipnir) w/backward compatibility Solaris 2.7 (arabica) w/"purify options" Solaris 2.8 (sol) w/FORTRAN & C++ AIX 5.x (copper) w/parallel & FORTRAN IRIX64 6.5 (modi4) w/FORTRAN Linux 2.4 (heping) w/FORTRAN & C++ Misc. update:
* [svn-r9243] Snapshot version 1.7 release 37HDF Admin2004-09-121-1/+1
|
* [svn-r9234] Purpose:Quincey Koziol2004-09-091-18/+76
| | | | | | | | | | | | | | | | | | | | | | | Code cleanup Description: Tweak recent "forward compatibility" changes to the H5E* API (which allowed for the old H5E API functions to remain unchanged) by allowing for the error stack callback function (H5E_auto_t) to also remain unchanged from the 1.6 branch. This required changing the H5E{get|set}_auto routines to have the old style H5E_auto_t type (which didn't have a stack ID parameter) and the new H5E{get|set}_auto_stack routines to have a newer "H5E_auto_stack_t" type (which has a stack ID parameter). This should make the H5E API changes as forwardly compatible as possible. One side-affect of this change was that it was impossible to determine if the current auto error callback was the old style (H5E_auto_t) or the new style (H5E_auto_stack_t) of callback, so a new API function (H5Eauto_is_stack) was adde to query this. Platforms tested: FreeBSD 4.10 (sleipnir) IRIX64 6.5 (modi4) h5committest
* [svn-r9183] Purpose: New featureRaymond Lu2004-09-011-121/+81
| | | | | | | | | | | | Description: Restore 6 old error API functions back to the library to be backward compatible with v1.6. They are H5Epush, H5Eprint, H5Ewalk, H5Eclear, H5Eset_auto, H5Eget_auto. These functions do not have error stack as parameter. Solution: Internally, these functions use default error stack. Platforms tested: h5committest and fuss. Misc. update: RELEASE.txt
* [svn-r8791] Purpose: Rewrote metadata cache (H5AC.c, etc.) to improve ↵John Mainzer2004-07-021-0/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | performance. Description: Replaced the old metadata cache with a cache with a modified LRU replacement policy. This should improve the hit rate. Solution: Since we want to flush cache entries in increasing address order, I used the threaded binary B-tree code to store the cache entries. There is a fair bit of overhead here, so we may want to consider other options. While the code is designed to allow the support of other replacement algorithms, at present, only a modified version of LRU is supported. The modified LRU algorithm requires that a user selectable portion of the cache entries be clean. The clean entries are evicted first when writes are not permitted. If the pool of clean entries is used up, the cache grows beyond its user specified maximum size. The cache can also exceed its maximum size if the combined size of the protected (or locked) entries exceeds the maximum size of the cache. Platforms tested: eirene (serial, parallel, fp), h5committested Misc. update:
* [svn-r8731] Purpose:Quincey Koziol2004-06-231-7/+5
| | | | | | | | | | | | | | | Code cleanup & minor optimization Description: Re-work the way interface initialization routines are specified in the library to avoid the overhead of checking for them in routines where there is no interface initialization routine. This cleans up warnings with gcc 3.4, reduces the library binary size a bit (about 2-3%) and should speedup the library's execution slightly. Platforms tested: FreeBSD 4.10 (sleipnir) w/gcc34 h5committest
* [svn-r8707] Changed the way HDF5 handles hid_t's and added API functions to ↵James Laird2004-06-181-9/+9
| | | | allow users to register IDs and ID types at runtime.