Note the following issues related to memory management:
Use the same allocation flags for ea_free_object() and ea_unpack_object().
For string objects, an ea_set_item() results in allocation, and should be followed by ea_free_item(obj, EUP_ALLOC) to free internal storage.
ea_pack_object() and getacct() use zero size. To get size. getacct() should be called twice: first time with NULL buffer to size buffer to be passed in the second call. See Example 3-1 in C Code Examples for Accessing exacct Files.
In order to be robust in the face of changes to exacct file content, applications should skip unknown exacct records in exacct files produced by the system.
Use EXC_LOCAL for customized accounting to create application-specific records. Use libexacct as general tracing or debugging facility.
See <sys/exacct_catalog.h>.
You can customize the data id field of ea_catalog_t.