Fixed typo in usage text of ns_atclose
/*
* The contents of this file are subject to the AOLserver Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://aolserver.com/.
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is AOLserver Code and related documentation
* distributed by AOL.
*
* The Initial Developer of the Original Code is America Online,
* Inc. Portions created by AOL are Copyright (C) 1999 America Online,
* Inc. All Rights Reserved.
*
* Alternatively, the contents of this file may be used under the terms
* of the GNU General Public License (the "GPL"), in which case the
* provisions of GPL are applicable instead of those above. If you wish
* to allow use of your version of this file only under the terms of the
* GPL and not to allow others to use your version of this file under the
* License, indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by the GPL.
* If you do not delete the provisions above, a recipient may use your
* version of this file under either the License or the GPL.
*/
/*
* tclatclose --
*
* Routines for the ns_atclose command.
*/
static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/tclatclose.c,v 1.8 2003/10/28 08:29:29 vasiljevic Exp $, compiled: " __DATE__ " " __TIME__;
#include "nsd.h"
/*
* The following structure maintains script to execute when the
* connection is closed.
*/
typedef struct AtClose {
struct AtClose *nextPtr;
char script[1];
} AtClose;
static void RunAtClose(NsInterp *itPtr, int run);
/*
*----------------------------------------------------------------------
*
* NsTclAtCloseCmd --
*
* Implements ns_atclose.
*
* Results:
* Tcl result.
*
* Side effects:
* See docs.
*
*----------------------------------------------------------------------
*/
int
NsTclAtCloseCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv)
{
NsInterp *itPtr = arg;
char *script;
AtClose *atPtr;
if (argc < 2 || argc > 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"",
argv[0], " script ?arg?\"", NULL);
return TCL_ERROR;
}
if (argc == 2) {
script = (char*)argv[1];
} else {
script = (char*)Tcl_Concat(2, (CONST char**)(argv+1));
}
/*
* Push the script onto the head of the atclose list so scripts
* will be called in reversed order when invoked.
*/
atPtr = ns_malloc(sizeof(AtClose) + strlen(script));
strcpy(atPtr->script, script);
atPtr->nextPtr = itPtr->firstAtClosePtr;
itPtr->firstAtClosePtr = atPtr;
if (script != argv[1]) {
ckfree(script);
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* NsRunAtClose, NsFreeAtClose --
*
* Run and/or free the registered at-close scripts.
*
* Results:
* None.
*
* Side effects:
* Will free the atclose scripts after execution.
*
*----------------------------------------------------------------------
*/
void
NsFreeAtClose(NsInterp *itPtr)
{
RunAtClose(itPtr, 0);
}
void
NsRunAtClose(Tcl_Interp *interp)
{
NsInterp *itPtr = NsGetInterp(interp);
RunAtClose(itPtr, 1);
}
static void
RunAtClose(NsInterp *itPtr, int run)
{
Tcl_Interp *interp = itPtr->interp;
AtClose *atPtr;
while ((atPtr = itPtr->firstAtClosePtr) != NULL) {
itPtr->firstAtClosePtr = atPtr->nextPtr;
if (run && Tcl_GlobalEval(interp, atPtr->script) != TCL_OK) {
Ns_TclLogError(interp);
}
ns_free(atPtr);
}
}
|
Back to SourceForge.net Powered by ViewCVS 1.0-dev |