Could you not call NsTclVSetCmd() yourself? Look in nsd/tclvar.c ... -- Dossy
On 2002.05.03, Andrew Piskorski <[EMAIL PROTECTED]> wrote: > Folks, has anyone implemented a C NSV API, or does anyone plan to? > > Clearly the right thing to do would be to move the functinality in > aolserver/nsd/tclvar.c into C API functions, and re-implement the nsv > Tcl commands to that C API. > > But since I needed to use some nsv commands from C, and I was in a > hurry, I just kludged up my own C NSV functions using Ns_TclEval, like > the example below. > > So has anybody done this in a less kludgy fashion? Also, any guesses > as to what sort of performance hit I'm taking by using Ns_TclEval? > > > static int > BB_NsvSet(const char *nsvString, > const char *keyString, const char *valueString) > { > static const char func_name[] = "BB_NsvSet"; > Ns_DString dsScript; > Ns_DString dsResult; > int rc; > > Ns_DStringInit(&dsScript); > Ns_DStringInit(&dsResult); > > /* > * The key and value may each have embedded whitespace, as we are > * surronding them with double quotes. But we asumme that the nsv > * array name will always be one word. > */ > > Ns_DStringVarAppend(&dsScript, "nsv_set ", nsvString, " ", > "\"", keyString, "\"", " ", > "\"", valueString, "\"", NULL); > > rc = Ns_TclEval(&dsResult, NULL, dsScript.string); > > Ns_DStringFree(&dsScript); > Ns_DStringFree(&dsResult); > > return rc; > } > > -- > Andrew Piskorski <[EMAIL PROTECTED]> > http://www.piskorski.com -- Dossy Shiobara mail: [EMAIL PROTECTED] Panoptic Computer Network web: http://www.panoptic.com/ "He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on." (p. 70)