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 {
> /*