static const UnicodeString& _fieldString(UDebugEnumType type, int32_t field, UnicodeString& fillin) { const char *str = udbg_enumName(type, field); if(str == NULL) { return fillin.remove(); } else { return fillin = UnicodeString(str, ""); // optimize? } }
U_CAPI UPlugTokenReturn U_EXPORT2 myPluginLow ( UPlugData *data, UPlugReason reason, UErrorCode *status) { fprintf(stderr,"MyPluginLow: data=%p, reason=%s, status=%s\n", (void*)data, udbg_enumName(UDBG_UPlugReason,(int32_t)reason), u_errorName(*status)); if(reason==UPLUG_REASON_QUERY) { uplug_setPlugName(data, "Low Plugin"); uplug_setPlugLevel(data, UPLUG_LEVEL_LOW); } return UPLUG_TOKEN; }
U_CAPI UPlugTokenReturn U_EXPORT2 myPlugin ( UPlugData *data, UPlugReason reason, UErrorCode *status) { /* Just print this for debugging */ fprintf(stderr,"MyPlugin: data=%p, reason=%s, status=%s\n", (void*)data, udbg_enumName(UDBG_UPlugReason,(int32_t)reason), u_errorName(*status)); if(reason==UPLUG_REASON_QUERY) { uplug_setPlugName(data, "Just a Test High-Level Plugin"); /* This call is optional in response to UPLUG_REASON_QUERY, but is a good idea. */ uplug_setPlugLevel(data, UPLUG_LEVEL_HIGH); /* This call is Mandatory in response to UPLUG_REASON_QUERY */ } return UPLUG_TOKEN; /* This must always be returned, to indicate that the entrypoint was actually a plugin. */ }
/** * Says it's low, but isn't. */ U_CAPI UPlugTokenReturn U_EXPORT2 myPluginBad ( UPlugData *data, UPlugReason reason, UErrorCode *status) { fprintf(stderr,"MyPluginLow: data=%p, reason=%s, status=%s\n", (void*)data, udbg_enumName(UDBG_UPlugReason,(int32_t)reason), u_errorName(*status)); if(reason==UPLUG_REASON_QUERY) { uplug_setPlugName(data, "Bad Plugin"); uplug_setPlugLevel(data, UPLUG_LEVEL_LOW); } else if(reason == UPLUG_REASON_LOAD) { void *ctx = uprv_malloc(12345); uplug_setContext(data, ctx); fprintf(stderr,"I'm %p and I did a bad thing and malloced %p\n", (void*)data, (void*)ctx); } else if(reason == UPLUG_REASON_UNLOAD) { void * ctx = uplug_getContext(data); uprv_free(ctx); } return UPLUG_TOKEN; }
void FieldsSet::parseValueDefault(const FieldsSet* inheritFrom, int32_t field, const UnicodeString& substr, UErrorCode& status) { int32_t value = -1; if(substr.length()==0) { // inherit requested // inherit if((inheritFrom == NULL) || !inheritFrom->isSet((UCalendarDateFields)field)) { // couldn't inherit from field it_errln(UnicodeString("Parse Failed: Couldn't inherit field ") + field + UnicodeString(" [") + UnicodeString(udbg_enumName(fEnum, field)) + UnicodeString("]")); status = U_ILLEGAL_ARGUMENT_ERROR; return; } value = inheritFrom->get((UCalendarDateFields)field); } else { value = udbg_stoi(substr); } set(field, value); }
void cmd_listplugins() { int32_t i; UPlugData *plug; do_init(); printf("ICU Initialized: u_init() returned %s\n", u_errorName(initStatus)); printf("Plugins: \n"); printf( "# %6s %s \n", "Level", "Name" ); printf( " %10s:%-10s\n", "Library", "Symbol" ); printf( " config| (configuration string)\n"); printf( " >>> Error | Explanation \n"); printf( "-----------------------------------\n"); for(i=0;(plug=uplug_getPlugInternal(i))!=NULL;i++) { UErrorCode libStatus = U_ZERO_ERROR; const char *name = uplug_getPlugName(plug); const char *sym = uplug_getSymbolName(plug); const char *lib = uplug_getLibraryName(plug, &libStatus); const char *config = uplug_getConfiguration(plug); UErrorCode loadStatus = uplug_getPlugLoadStatus(plug); const char *message = NULL; printf("\n#%d %-6s %s \n", i+1, udbg_enumName(UDBG_UPlugLevel,(int32_t)uplug_getPlugLevel(plug)), name!=NULL?(*name?name:"this plugin did not call uplug_setPlugName()"):"(null)" ); printf(" plugin| %10s:%-10s\n", (U_SUCCESS(libStatus)?(lib!=NULL?lib:"(null)"):u_errorName(libStatus)), sym!=NULL?sym:"(null)" ); if(config!=NULL&&*config) { printf(" config| %s\n", config); } switch(loadStatus) { case U_PLUGIN_CHANGED_LEVEL_WARNING: message = "Note: This plugin changed the system level (by allocating memory or calling something which does). Later plugins may not load."; break; case U_PLUGIN_DIDNT_SET_LEVEL: message = "Error: This plugin did not call uplug_setPlugLevel during QUERY."; break; case U_PLUGIN_TOO_HIGH: message = "Error: This plugin couldn't load because the system level was too high. Try loading this plugin earlier."; break; case U_ZERO_ERROR: message = NULL; /* no message */ break; default: if(U_FAILURE(loadStatus)) { message = "error loading:"; } else { message = "warning during load:"; } } if(message!=NULL) { printf("\\\\\\ status| %s\n" "/// %s\n", u_errorName(loadStatus), message); } } if(i==0) { printf("No plugins loaded.\n"); } }
/** * Doesn't respond to QUERY properly. */ U_CAPI UPlugTokenReturn U_EXPORT2 myPluginFailQuery ( UPlugData *data, UPlugReason reason, UErrorCode *status) { fprintf(stderr,"MyPluginFailQuery: data=%p, reason=%s, status=%s\n", (void*)data, udbg_enumName(UDBG_UPlugReason,(int32_t)reason), u_errorName(*status)); /* Should respond to UPLUG_REASON_QUERY here. */ return UPLUG_TOKEN; }
U_CAPI UPlugTokenReturn U_EXPORT2 debugMemoryPlugin ( UPlugData *data, UPlugReason reason, UErrorCode *status) { fprintf(stderr,"debugMemoryPlugin: data=%p, reason=%s, status=%s\n", (void*)data, udbg_enumName(UDBG_UPlugReason,(int32_t)reason), u_errorName(*status)); if(reason==UPLUG_REASON_QUERY) { uplug_setPlugLevel(data, UPLUG_LEVEL_LOW); uplug_setPlugName(data, "Memory Plugin"); } else if(reason==UPLUG_REASON_LOAD) { u_setMemoryFunctions(uplug_getContext(data), &myMemAlloc, &myMemRealloc, &myMemFree, status); fprintf(stderr, "MEM: status now %s\n", u_errorName(*status)); } else if(reason==UPLUG_REASON_UNLOAD) { fprintf(stderr, "MEM: not possible to unload this plugin (no way to reset memory functions)...\n"); uplug_setPlugNoUnload(data, TRUE); } return UPLUG_TOKEN; }