Before you cvs commit, you must make test. Two tests are broken... We're strugeling for tests, but tclresp.c is one file that does have a reasonably complete set. Can you add some for the new commands? Also, the cut 'n paste comment for Ns_ObjvByteArray is no longer correct.
I was wondering, is ns_returnbinary necessary? What if ns_return was modified to check the type of it's data arg, and if it's byterray, send using Ns_ConnReturnData. Would this work? On 6/8/05, Vlad Seryakov <[EMAIL PROTECTED]> wrote: > Update of /cvsroot/naviserver/naviserver/nsd > In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15813/nsd > > Modified Files: > tclobjv.c tclresp.c > Log Message: > Added -binary flag to ns_respond to return binary data without encoding > conversion > > > Index: tclobjv.c > =================================================================== > RCS file: /cvsroot/naviserver/naviserver/nsd/tclobjv.c,v > retrieving revision 1.7 > retrieving revision 1.8 > diff -C2 -d -r1.7 -r1.8 > *** tclobjv.c 15 May 2005 07:47:21 -0000 1.7 > --- tclobjv.c 8 Jun 2005 20:27:12 -0000 1.8 > *************** > *** 310,313 **** > --- 310,352 ---- > *---------------------------------------------------------------------- > * > + * Ns_ObjvByteArray -- > + * > + * Consume exactly one argument, returning a pointer to it's > + * cstring into *spec->dest. > + * > + * If spec->arg is != NULL it is assumed to be a pointer to an > + * int and the returned string length will be left in it. > + * > + * Results: > + * TCL_OK or TCL_ERROR. > + * > + * Side effects: > + * None. > + * > + *---------------------------------------------------------------------- > + */ > + > + int > + Ns_ObjvByteArray(Ns_ObjvSpec *spec, Tcl_Interp *interp, int *objcPtr, > + Tcl_Obj *CONST objv[]) > + { > + unsigned char **dest = spec->dest; > + > + if (*objcPtr > 0) { > + if (spec->arg == NULL) { > + *dest = Tcl_GetByteArrayFromObj(objv[0],0); > + } else { > + *dest = Tcl_GetByteArrayFromObj(objv[0], (int *) spec->arg); > + } > + *objcPtr -= 1; > + return TCL_OK; > + } > + return TCL_ERROR; > + } > + > + > + /* > + *---------------------------------------------------------------------- > + * > * Ns_ObjvObj -- > * > > Index: tclresp.c > =================================================================== > RCS file: /cvsroot/naviserver/naviserver/nsd/tclresp.c,v > retrieving revision 1.4 > retrieving revision 1.5 > diff -C2 -d -r1.4 -r1.5 > *** tclresp.c 8 Jun 2005 20:13:12 -0000 1.4 > --- tclresp.c 8 Jun 2005 20:27:12 -0000 1.5 > *************** > *** 252,256 **** > Ns_Conn *conn; > int status = 200, length = -1; > ! char *type = "*/*", *setid = NULL; > char *string = NULL, *filename = NULL, *chanid = NULL; > Ns_Set *set = NULL; > --- 252,256 ---- > Ns_Conn *conn; > int status = 200, length = -1; > ! char *type = "*/*", *setid = NULL, *binary = NULL; > char *string = NULL, *filename = NULL, *chanid = NULL; > Ns_Set *set = NULL; > *************** > *** 259,269 **** > > Ns_ObjvSpec opts[] = { > ! {"-status", Ns_ObjvInt, &status, NULL}, > ! {"-type", Ns_ObjvString, &type, NULL}, > ! {"-length", Ns_ObjvInt, &length, NULL}, > ! {"-headers", Ns_ObjvString, &setid, NULL}, > ! {"-string", Ns_ObjvString, &string, NULL}, > ! {"-file", Ns_ObjvString, &filename, NULL}, > ! {"-fileid", Ns_ObjvString, &chanid, NULL}, > {NULL, NULL, NULL, NULL} > }; > --- 259,270 ---- > > Ns_ObjvSpec opts[] = { > ! {"-status", Ns_ObjvInt, &status, NULL}, > ! {"-type", Ns_ObjvString, &type, NULL}, > ! {"-length", Ns_ObjvInt, &length, NULL}, > ! {"-headers", Ns_ObjvString, &setid, NULL}, > ! {"-string", Ns_ObjvString, &string, NULL}, > ! {"-file", Ns_ObjvString, &filename, NULL}, > ! {"-fileid", Ns_ObjvString, &chanid, NULL}, > ! {"-binary", Ns_ObjvByteArray, &binary, &length}, > {NULL, NULL, NULL, NULL} > }; > *************** > *** 277,282 **** > return TCL_ERROR; > } > ! if ((string != NULL) + (filename != NULL) + (chanid != NULL) != 1) { > ! Tcl_SetResult(interp, "must specify only one of -string, -file " > "or -fileid", TCL_STATIC); > return TCL_ERROR; > --- 278,283 ---- > return TCL_ERROR; > } > ! if ((binary != NULL) + (string != NULL) + (filename != NULL) + (chanid > != NULL) != 1) { > ! Tcl_SetResult(interp, "must specify only one of -string, -file, > -binary " > "or -fileid", TCL_STATIC); > return TCL_ERROR; > *************** > *** 313,316 **** > --- 314,324 ---- > retval = Ns_ConnReturnFile(conn, status, type, filename); > > + } else if (binary != NULL) { > + /* > + * We'll be returning a binary data > + */ > + > + retval = Ns_ConnReturnData(conn, status, binary, length, type); > + > } else { > /*