Index: generic/nsf.c =================================================================== diff -u -re1c25b411ed784b0f32610f04d2d7188f9cca418 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/nsf.c (.../nsf.c) (revision e1c25b411ed784b0f32610f04d2d7188f9cca418) +++ generic/nsf.c (.../nsf.c) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -561,7 +561,7 @@ Tcl_DStringInit(&ds); va_start(ap, fmt); - NsfDStringPrintf(&ds, fmt, ap); + NsfDStringVPrintf(&ds, fmt, ap); va_end(ap); Tcl_DStringInit(&cmdString); @@ -16188,10 +16188,7 @@ #if defined(NSF_PROFILE) if (rst->doTrace) { - NsfProfile *profilePtr = &RUNTIME_STATE(interp)->profile; - - profilePtr->depth ++; - NsfLog(interp, NSF_LOG_NOTICE, "call(%d): %s", profilePtr->depth, fullMethodName); + NsfProfileTraceCallAppend(interp, fullMethodName); } #endif @@ -19901,7 +19898,7 @@ Tcl_DStringInit(&ds); va_start(ap, fmt); - NsfDStringPrintf(&ds, fmt, ap); + NsfDStringVPrintf(&ds, fmt, ap); va_end(ap); if (tcd->onerror != NULL) { Index: generic/nsf.decls =================================================================== diff -u -r9e8610ba86e16a518747bd25907d04b2aaf19dd5 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/nsf.decls (.../nsf.decls) (revision 9e8610ba86e16a518747bd25907d04b2aaf19dd5) +++ generic/nsf.decls (.../nsf.decls) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -92,7 +92,7 @@ CONST char *name1, CONST char *name2, unsigned int flags) } declare 11 generic { - void NsfDStringPrintf(Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc) + void NsfDStringVPrintf(Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc) } declare 12 generic { int NsfPrintError(Tcl_Interp *interp, CONST char *fmt, ...) @@ -205,3 +205,6 @@ int NsfArgumentError(Tcl_Interp *interp, CONST char *errorMsg, Nsf_Param CONST *paramPtr, Tcl_Obj *cmdNameObj, Tcl_Obj *methodPathObj) } +declare 41 generic { + void Nsf_DStringPrintf(Tcl_DString *dsPtr, const char *fmt, ...) +} Index: generic/nsfError.c =================================================================== diff -u -rdbd95b0155c23213b81125e318b0691cb75f66f5 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/nsfError.c (.../nsfError.c) (revision dbd95b0155c23213b81125e318b0691cb75f66f5) +++ generic/nsfError.c (.../nsfError.c) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -48,10 +48,11 @@ NsfObject *contextObject, const char *pattern) nonnull(1) nonnull(2) returns_nonnull; + /* *---------------------------------------------------------------------- * - * NsfDStringPrintf -- + * NsfDStringVPrintf -- * * Appends to a Tcl_DString a formatted value. This function * iterates until it has sufficiently memory allocated. @@ -66,7 +67,7 @@ */ void -NsfDStringPrintf(Tcl_DString *dsPtr, const char *fmt, va_list vargs) { +NsfDStringVPrintf(Tcl_DString *dsPtr, const char *fmt, va_list vargs) { int result, failure, offset = dsPtr->length, avail = dsPtr->spaceAvl; va_list vargsCopy; @@ -127,7 +128,34 @@ } } +/* + *---------------------------------------------------------------------- + * Nsf_DStringPrintf -- + * + * Append a sequence of values using a format string. + * + * Results: + * Pointer to the current string value. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ +void +Nsf_DStringPrintf(Tcl_DString *dsPtr, const char *fmt, ...) +{ + va_list ap; + + assert(dsPtr != NULL); + assert(fmt != NULL); + + va_start(ap, fmt); + NsfDStringVPrintf(dsPtr, fmt, ap); + va_end(ap); +} + /* *---------------------------------------------------------------------- * @@ -182,7 +210,7 @@ Tcl_DStringInit(&ds); va_start(ap, fmt); - NsfDStringPrintf(&ds, fmt, ap); + NsfDStringVPrintf(&ds, fmt, ap); va_end(ap); Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_DStringValue(&ds), -1)); Index: generic/nsfInt.h =================================================================== diff -u -re1c25b411ed784b0f32610f04d2d7188f9cca418 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/nsfInt.h (.../nsfInt.h) (revision e1c25b411ed784b0f32610f04d2d7188f9cca418) +++ generic/nsfInt.h (.../nsfInt.h) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -844,30 +844,12 @@ Tcl_HashTable objectData; Tcl_HashTable methodData; Tcl_HashTable procData; + Tcl_DString traceDs; int depth; } NsfProfile; -# define NSF_PROFILE_CALL(interp, object, methodName) \ - if (RUNTIME_STATE(interp)->doTrace) { \ - Tcl_DString objectLabel; \ - NsfProfile *profilePtr = &RUNTIME_STATE(interp)->profile; \ -\ - profilePtr->depth ++; \ - NsfProfileObjectLabel(&objectLabel, (object), methodName); \ - NsfLog(interp, NSF_LOG_NOTICE, "call(%d): %s", profilePtr->depth, Tcl_DStringValue(&objectLabel));\ - Tcl_DStringFree(&objectLabel);\ - } -# define NSF_PROFILE_EXIT(interp, object, methodName) \ - if (RUNTIME_STATE(interp)->doTrace) { \ - Tcl_DString objectLabel; \ - NsfProfile *profilePtr = &RUNTIME_STATE(interp)->profile; \ - Tcl_Obj *resultObj = Tcl_GetObjResult(interp); INCR_REF_COUNT(resultObj); \ - profilePtr->depth --; \ - NsfProfileObjectLabel(&objectLabel, (object), methodName); \ - NsfLog(interp, NSF_LOG_NOTICE, "exit(%d): %s 0", profilePtr->depth, Tcl_DStringValue(&objectLabel));\ - Tcl_SetObjResult(interp, resultObj); DECR_REF_COUNT(resultObj); \ - Tcl_DStringFree(&objectLabel);\ - } +# define NSF_PROFILE_CALL(interp, object, methodName) NsfProfileTraceCall(interp, object, methodName) +# define NSF_PROFILE_EXIT(interp, object, methodName) NsfProfileTraceExit(interp, object, methodName) #else # define NSF_PROFILE_CALL(interp, object, methodName) # define NSF_PROFILE_EXIT(interp, object, methodName) @@ -1002,8 +984,17 @@ EXTERN void NsfProfileFree(Tcl_Interp *interp) nonnull(1); EXTERN void NsfProfileClearData(Tcl_Interp *interp) nonnull(1); EXTERN void NsfProfileGetData(Tcl_Interp *interp) nonnull(1); + EXTERN void NsfProfileObjectLabel(Tcl_DString *dsPtr, NsfObject *obj, const char *methodName) nonnull(1) nonnull(2) nonnull(3); +EXTERN void NsfProfileTraceCall(Tcl_Interp *interp, NsfObject *object, const char *methodName) + nonnull(1) nonnull(2) nonnull(3); +EXTERN void NsfProfileTraceExit(Tcl_Interp *interp, NsfObject *object, const char *methodName) + nonnull(1) nonnull(2) nonnull(3); +EXTERN void NsfProfileTraceCallAppend(Tcl_Interp *interp, const char *label) + nonnull(1) nonnull(2); +EXTERN void NsfProfileTraceExitAppend(Tcl_Interp *interp, const char *label, double duration) + nonnull(1) nonnull(2); EXTERN NsfCallStackContent *NsfCallStackGetTopFrame(Tcl_Interp *interp, Tcl_CallFrame **framePtrPtr) nonnull(1); Index: generic/nsfProfile.c =================================================================== diff -u -re1c25b411ed784b0f32610f04d2d7188f9cca418 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/nsfProfile.c (.../nsfProfile.c) (revision e1c25b411ed784b0f32610f04d2d7188f9cca418) +++ generic/nsfProfile.c (.../nsfProfile.c) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -85,6 +85,93 @@ /* *---------------------------------------------------------------------- + * NsfProfileTraceCallAppend, NsfProfileTraceExitAppend -- + * + * Low level function to add entries to the trace dstring when functions ar + * called or exited. + * + * Results: + * None + * + * Side effects: + * update profilePtr->depth and profilePtr->traceDs + * + *---------------------------------------------------------------------- + */ +void +NsfProfileTraceCallAppend(Tcl_Interp *interp, const char *label) { + NsfRuntimeState *rst = RUNTIME_STATE(interp); + NsfProfile *profilePtr = &rst->profile; + Tcl_DString ds; + + profilePtr->depth ++; + + Tcl_DStringInit(&ds); + Nsf_DStringPrintf(&ds, "call(%d): %s\n", profilePtr->depth, label); + Tcl_DStringAppend(&profilePtr->traceDs, ds.string, ds.length); + Tcl_DStringFree(&ds); +} + +void +NsfProfileTraceExitAppend(Tcl_Interp *interp, const char *label, double duration) { + NsfRuntimeState *rst = RUNTIME_STATE(interp); + NsfProfile *profilePtr = &rst->profile; + Tcl_DString ds; + + profilePtr->depth --; + + Tcl_DStringInit(&ds); + Nsf_DStringPrintf(&ds, "exit(%d): %s %.0f\n", profilePtr->depth, label, duration); + Tcl_DStringAppend(&profilePtr->traceDs, ds.string, ds.length); + Tcl_DStringFree(&ds); +} + +/* + *---------------------------------------------------------------------- + * NsfProfileTraceCall, NsfProfileTraceExit -- + * + * Add entries to the trace dstring when methods/procs are called or + * exited. This function builds the labels for invocation strings in the + * same way as for profiling and calls the lower level function, which does + * the recording. + * + * Results: + * None + * + * Side effects: + * update profilePtr->depth and profilePtr->traceDs + * + *---------------------------------------------------------------------- + */ + +void +NsfProfileTraceCall(Tcl_Interp *interp, NsfObject *object, const char *methodName) { + NsfRuntimeState *rst = RUNTIME_STATE(interp); + + if (rst->doTrace) { + Tcl_DString objectLabel; + + NsfProfileObjectLabel(&objectLabel, (object), methodName); + NsfProfileTraceCallAppend(interp, Tcl_DStringValue(&objectLabel)); + Tcl_DStringFree(&objectLabel); + } +} + +void +NsfProfileTraceExit(Tcl_Interp *interp, NsfObject *object, const char *methodName) { + NsfRuntimeState *rst = RUNTIME_STATE(interp); + + if (rst->doTrace) { + Tcl_DString objectLabel; + + NsfProfileObjectLabel(&objectLabel, (object), methodName); + NsfProfileTraceExitAppend(interp, Tcl_DStringValue(&objectLabel), 0.0); + Tcl_DStringFree(&objectLabel); + } +} + +/* + *---------------------------------------------------------------------- * NsfProfileRecordMethodData -- * * This function is invoked, when a call of a method ends. It @@ -118,11 +205,11 @@ void NsfProfileRecordMethodData(Tcl_Interp *interp, NsfCallStackContent *cscPtr) { + NsfRuntimeState *rst = RUNTIME_STATE(interp); double totalMicroSec; NsfObject *obj = cscPtr->self; NsfClass *cl = cscPtr->cl; Tcl_DString methodKey, objectKey; - NsfRuntimeState *rst = RUNTIME_STATE(interp); NsfProfile *profilePtr = &rst->profile; struct timeval trt; @@ -169,11 +256,9 @@ Tcl_DStringAppend(&methodKey, " - - -", 6); } } - + if (rst->doTrace) { - NsfLog(interp, NSF_LOG_NOTICE, "exit(%d): %s %.0f", profilePtr->depth, Tcl_DStringValue(&objectKey), totalMicroSec); - profilePtr->depth --; - //fprintf(stderr, "methodData-data: %s %.2f\n", Tcl_DStringValue(&methodKey), totalMicroSec); + NsfProfileTraceExitAppend(interp, Tcl_DStringValue(&objectKey), totalMicroSec); } NsfProfileFillTable(&profilePtr->objectData, Tcl_DStringValue(&objectKey), totalMicroSec); @@ -182,6 +267,8 @@ Tcl_DStringFree(&methodKey); } + + /* *---------------------------------------------------------------------- * NsfProfileRecordProcData -- @@ -213,8 +300,7 @@ profilePtr->overallTime += totalMicroSec; if (rst->doTrace) { - NsfLog(interp, NSF_LOG_NOTICE, "exit(%d): %s %.0f", profilePtr->depth, methodName, totalMicroSec); - profilePtr->depth --; + NsfProfileTraceExitAppend(interp, methodName, totalMicroSec); } NsfProfileFillTable(&profilePtr->procData, methodName, totalMicroSec); @@ -285,6 +371,8 @@ profilePtr->startUSec = trt.tv_usec; profilePtr->overallTime = 0; profilePtr->depth = 0; + + Tcl_DStringTrunc(&profilePtr->traceDs, 0); } /* @@ -362,6 +450,7 @@ Tcl_ListObjAppendElement(interp, list, NsfProfileGetTable(interp, &profilePtr->objectData)); Tcl_ListObjAppendElement(interp, list, NsfProfileGetTable(interp, &profilePtr->methodData)); Tcl_ListObjAppendElement(interp, list, NsfProfileGetTable(interp, &profilePtr->procData)); + Tcl_ListObjAppendElement(interp, list, Tcl_NewStringObj(profilePtr->traceDs.string, profilePtr->traceDs.length)); Tcl_SetObjResult(interp, list); } @@ -398,6 +487,7 @@ profilePtr->startUSec = trt.tv_usec; profilePtr->overallTime = 0; profilePtr->depth = 0; + Tcl_DStringInit(&profilePtr->traceDs); } /* @@ -425,6 +515,7 @@ Tcl_DeleteHashTable(&profilePtr->objectData); Tcl_DeleteHashTable(&profilePtr->methodData); Tcl_DeleteHashTable(&profilePtr->procData); + Tcl_DStringFree(&profilePtr->traceDs); } #endif Index: generic/stubs8.5/nsfDecls.h =================================================================== diff -u -r9e8610ba86e16a518747bd25907d04b2aaf19dd5 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/stubs8.5/nsfDecls.h (.../nsfDecls.h) (revision 9e8610ba86e16a518747bd25907d04b2aaf19dd5) +++ generic/stubs8.5/nsfDecls.h (.../nsfDecls.h) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -122,11 +122,11 @@ Tcl_Interp *interp, CONST char *name1, CONST char *name2, unsigned int flags); #endif -#ifndef NsfDStringPrintf_TCL_DECLARED -#define NsfDStringPrintf_TCL_DECLARED +#ifndef NsfDStringVPrintf_TCL_DECLARED +#define NsfDStringVPrintf_TCL_DECLARED /* 11 */ -EXTERN void NsfDStringPrintf(Tcl_DString *dsPtr, CONST char *fmt, - va_list apSrc); +EXTERN void NsfDStringVPrintf(Tcl_DString *dsPtr, + CONST char *fmt, va_list apSrc); #endif #ifndef NsfPrintError_TCL_DECLARED #define NsfPrintError_TCL_DECLARED @@ -322,6 +322,12 @@ Nsf_Param CONST *paramPtr, Tcl_Obj *cmdNameObj, Tcl_Obj *methodPathObj); #endif +#ifndef Nsf_DStringPrintf_TCL_DECLARED +#define Nsf_DStringPrintf_TCL_DECLARED +/* 41 */ +EXTERN void Nsf_DStringPrintf(Tcl_DString *dsPtr, + CONST char *fmt, ...); +#endif typedef struct NsfStubHooks { struct NsfIntStubs *nsfIntStubs; @@ -342,7 +348,7 @@ Tcl_Obj * (*nsf_ObjSetVar2) (struct Nsf_Object *object, Tcl_Interp *interp, Tcl_Obj *name1, Tcl_Obj *name2, Tcl_Obj *value, unsigned int flags); /* 8 */ Tcl_Obj * (*nsf_ObjGetVar2) (struct Nsf_Object *object, Tcl_Interp *interp, Tcl_Obj *name1, Tcl_Obj *name2, unsigned int flags); /* 9 */ int (*nsf_UnsetVar2) (struct Nsf_Object *object, Tcl_Interp *interp, CONST char *name1, CONST char *name2, unsigned int flags); /* 10 */ - void (*nsfDStringPrintf) (Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc); /* 11 */ + void (*nsfDStringVPrintf) (Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc); /* 11 */ int (*nsfPrintError) (Tcl_Interp *interp, CONST char *fmt, ...); /* 12 */ int (*nsfErrInProc) (Tcl_Interp *interp, Tcl_Obj *objName, Tcl_Obj *clName, CONST char *procName); /* 13 */ int (*nsfObjErrType) (Tcl_Interp *interp, CONST char *context, Tcl_Obj *value, CONST char *type, Nsf_Param CONST *pPtr); /* 14 */ @@ -372,6 +378,7 @@ int (*nsf_EnumerationTypeRegister) (Tcl_Interp *interp, Nsf_EnumeratorConverterEntry *typeRecords); /* 38 */ int (*nsf_CmdDefinitionRegister) (Tcl_Interp *interp, Nsf_methodDefinition *definitionRecords); /* 39 */ int (*nsfArgumentError) (Tcl_Interp *interp, CONST char *errorMsg, Nsf_Param CONST *paramPtr, Tcl_Obj *cmdNameObj, Tcl_Obj *methodPathObj); /* 40 */ + void (*nsf_DStringPrintf) (Tcl_DString *dsPtr, CONST char *fmt, ...); /* 41 */ } NsfStubs; extern NsfStubs *nsfStubsPtr; @@ -427,9 +434,9 @@ #define Nsf_UnsetVar2 \ (nsfStubsPtr->nsf_UnsetVar2) /* 10 */ #endif -#ifndef NsfDStringPrintf -#define NsfDStringPrintf \ - (nsfStubsPtr->nsfDStringPrintf) /* 11 */ +#ifndef NsfDStringVPrintf +#define NsfDStringVPrintf \ + (nsfStubsPtr->nsfDStringVPrintf) /* 11 */ #endif #ifndef NsfPrintError #define NsfPrintError \ @@ -547,6 +554,10 @@ #define NsfArgumentError \ (nsfStubsPtr->nsfArgumentError) /* 40 */ #endif +#ifndef Nsf_DStringPrintf +#define Nsf_DStringPrintf \ + (nsfStubsPtr->nsf_DStringPrintf) /* 41 */ +#endif #endif /* defined(USE_NSF_STUBS) && !defined(USE_NSF_STUB_PROCS) */ Index: generic/stubs8.5/nsfStubInit.c =================================================================== diff -u -r9e8610ba86e16a518747bd25907d04b2aaf19dd5 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/stubs8.5/nsfStubInit.c (.../nsfStubInit.c) (revision 9e8610ba86e16a518747bd25907d04b2aaf19dd5) +++ generic/stubs8.5/nsfStubInit.c (.../nsfStubInit.c) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -86,7 +86,7 @@ Nsf_ObjSetVar2, /* 8 */ Nsf_ObjGetVar2, /* 9 */ Nsf_UnsetVar2, /* 10 */ - NsfDStringPrintf, /* 11 */ + NsfDStringVPrintf, /* 11 */ NsfPrintError, /* 12 */ NsfErrInProc, /* 13 */ NsfObjErrType, /* 14 */ @@ -116,6 +116,7 @@ Nsf_EnumerationTypeRegister, /* 38 */ Nsf_CmdDefinitionRegister, /* 39 */ NsfArgumentError, /* 40 */ + Nsf_DStringPrintf, /* 41 */ }; /* !END!: Do not edit above this line. */ Index: generic/stubs8.6/nsfDecls.h =================================================================== diff -u -r9e8610ba86e16a518747bd25907d04b2aaf19dd5 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/stubs8.6/nsfDecls.h (.../nsfDecls.h) (revision 9e8610ba86e16a518747bd25907d04b2aaf19dd5) +++ generic/stubs8.6/nsfDecls.h (.../nsfDecls.h) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -93,8 +93,8 @@ Tcl_Interp *interp, CONST char *name1, CONST char *name2, unsigned int flags); /* 11 */ -EXTERN void NsfDStringPrintf(Tcl_DString *dsPtr, CONST char *fmt, - va_list apSrc); +EXTERN void NsfDStringVPrintf(Tcl_DString *dsPtr, + CONST char *fmt, va_list apSrc); /* 12 */ EXTERN int NsfPrintError(Tcl_Interp *interp, CONST char *fmt, ...); /* 13 */ @@ -202,6 +202,9 @@ CONST char *errorMsg, Nsf_Param CONST *paramPtr, Tcl_Obj *cmdNameObj, Tcl_Obj *methodPathObj); +/* 41 */ +EXTERN void Nsf_DStringPrintf(Tcl_DString *dsPtr, + const char *fmt, ...); typedef struct { const struct NsfIntStubs *nsfIntStubs; @@ -222,7 +225,7 @@ Tcl_Obj * (*nsf_ObjSetVar2) (struct Nsf_Object *object, Tcl_Interp *interp, Tcl_Obj *name1, Tcl_Obj *name2, Tcl_Obj *value, unsigned int flags); /* 8 */ Tcl_Obj * (*nsf_ObjGetVar2) (struct Nsf_Object *object, Tcl_Interp *interp, Tcl_Obj *name1, Tcl_Obj *name2, unsigned int flags); /* 9 */ int (*nsf_UnsetVar2) (struct Nsf_Object *object, Tcl_Interp *interp, CONST char *name1, CONST char *name2, unsigned int flags); /* 10 */ - void (*nsfDStringPrintf) (Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc); /* 11 */ + void (*nsfDStringVPrintf) (Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc); /* 11 */ int (*nsfPrintError) (Tcl_Interp *interp, CONST char *fmt, ...); /* 12 */ int (*nsfErrInProc) (Tcl_Interp *interp, Tcl_Obj *objName, Tcl_Obj *clName, CONST char *procName); /* 13 */ int (*nsfObjErrType) (Tcl_Interp *interp, CONST char *context, Tcl_Obj *value, CONST char *type, Nsf_Param CONST *pPtr); /* 14 */ @@ -252,6 +255,7 @@ int (*nsf_EnumerationTypeRegister) (Tcl_Interp *interp, Nsf_EnumeratorConverterEntry *typeRecords); /* 38 */ int (*nsf_CmdDefinitionRegister) (Tcl_Interp *interp, Nsf_methodDefinition *definitionRecords); /* 39 */ int (*nsfArgumentError) (Tcl_Interp *interp, CONST char *errorMsg, Nsf_Param CONST *paramPtr, Tcl_Obj *cmdNameObj, Tcl_Obj *methodPathObj); /* 40 */ + void (*nsf_DStringPrintf) (Tcl_DString *dsPtr, const char *fmt, ...); /* 41 */ } NsfStubs; extern const NsfStubs *nsfStubsPtr; @@ -287,8 +291,8 @@ (nsfStubsPtr->nsf_ObjGetVar2) /* 9 */ #define Nsf_UnsetVar2 \ (nsfStubsPtr->nsf_UnsetVar2) /* 10 */ -#define NsfDStringPrintf \ - (nsfStubsPtr->nsfDStringPrintf) /* 11 */ +#define NsfDStringVPrintf \ + (nsfStubsPtr->nsfDStringVPrintf) /* 11 */ #define NsfPrintError \ (nsfStubsPtr->nsfPrintError) /* 12 */ #define NsfErrInProc \ @@ -347,6 +351,8 @@ (nsfStubsPtr->nsf_CmdDefinitionRegister) /* 39 */ #define NsfArgumentError \ (nsfStubsPtr->nsfArgumentError) /* 40 */ +#define Nsf_DStringPrintf \ + (nsfStubsPtr->nsf_DStringPrintf) /* 41 */ #endif /* defined(USE_NSF_STUBS) */ Index: generic/stubs8.6/nsfStubInit.c =================================================================== diff -u -r9e8610ba86e16a518747bd25907d04b2aaf19dd5 -r453ad27418d60f0ab744ae4ac911bcd5e2505140 --- generic/stubs8.6/nsfStubInit.c (.../nsfStubInit.c) (revision 9e8610ba86e16a518747bd25907d04b2aaf19dd5) +++ generic/stubs8.6/nsfStubInit.c (.../nsfStubInit.c) (revision 453ad27418d60f0ab744ae4ac911bcd5e2505140) @@ -86,7 +86,7 @@ Nsf_ObjSetVar2, /* 8 */ Nsf_ObjGetVar2, /* 9 */ Nsf_UnsetVar2, /* 10 */ - NsfDStringPrintf, /* 11 */ + NsfDStringVPrintf, /* 11 */ NsfPrintError, /* 12 */ NsfErrInProc, /* 13 */ NsfObjErrType, /* 14 */ @@ -116,6 +116,7 @@ Nsf_EnumerationTypeRegister, /* 38 */ Nsf_CmdDefinitionRegister, /* 39 */ NsfArgumentError, /* 40 */ + Nsf_DStringPrintf, /* 41 */ }; /* !END!: Do not edit above this line. */