Update of /cvsroot/naviserver/naviserver/nsd
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24426/nsd
Modified Files:
tclcache.c tclcmds.c
Log Message:
Added 2 new cache commands ns_cache_get and ns_cache_set for easier cache
manipulation
Index: tclcmds.c
===================================================================
RCS file: /cvsroot/naviserver/naviserver/nsd/tclcmds.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** tclcmds.c 28 Feb 2006 20:02:37 -0000 1.34
--- tclcmds.c 5 Apr 2006 17:52:31 -0000 1.35
***************
*** 73,76 ****
--- 73,78 ----
NsTclCacheCreateObjCmd,
NsTclCacheEvalObjCmd,
+ NsTclCacheGetObjCmd,
+ NsTclCacheSetObjCmd,
NsTclCacheFlushObjCmd,
NsTclCacheIncrObjCmd,
***************
*** 259,262 ****
--- 261,266 ----
{"ns_cache_create", NULL, NsTclCacheCreateObjCmd},
{"ns_cache_eval", NULL, NsTclCacheEvalObjCmd},
+ {"ns_cache_get", NULL, NsTclCacheGetObjCmd},
+ {"ns_cache_set", NULL, NsTclCacheSetObjCmd},
{"ns_cache_flush", NULL, NsTclCacheFlushObjCmd},
{"ns_cache_incr", NULL, NsTclCacheIncrObjCmd},
Index: tclcache.c
===================================================================
RCS file: /cvsroot/naviserver/naviserver/nsd/tclcache.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** tclcache.c 23 Jan 2006 15:57:33 -0000 1.2
--- tclcache.c 5 Apr 2006 17:52:31 -0000 1.3
***************
*** 285,288 ****
--- 285,378 ----
}
+ /*
+ *----------------------------------------------------------------------
+ *
+ * NsTclCacheGetObjCmd --
+ *
+ * Returns entry value if entry exists in the cache and not expired yet
+ *
+ * Results:
+ * TCL result with entry value or empty result
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+ int
+ NsTclCacheGetObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj
*CONST objv[])
+ {
+ Ns_Cache *cache;
+ Ns_Entry *entry;
+ char *key;
+
+ Ns_ObjvSpec args[] = {
+ {"cache", ObjvCache, &cache, arg},
+ {"key", Ns_ObjvString, &key, NULL},
+ {NULL, NULL, NULL, NULL}
+ };
+ if (Ns_ParseObjv(NULL, args, interp, 1, objc, objv) != NS_OK) {
+ return TCL_ERROR;
+ }
+ Ns_CacheLock(cache);
+ if ((entry = Ns_CacheFindEntry(cache, key)) != NULL) {
+ Tcl_SetStringObj(Tcl_GetObjResult(interp),
+ Ns_CacheGetValue(entry), Ns_CacheGetSize(entry));
+ }
+ Ns_CacheUnlock(cache);
+ return TCL_OK;
+ }
+
+ /*
+ *----------------------------------------------------------------------
+ *
+ * NsTclCacheSetObjCmd --
+ *
+ * Set new value of the cache entry
+ *
+ * Results:
+ * TCL result.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+ int
+ NsTclCacheSetObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj
*CONST objv[])
+ {
+ NsInterp *itPtr = arg;
+ Ns_Cache *cache;
+ Ns_Entry *entry;
+ char *key, *value = 0;
+ int new, timeout = -1, ttl = 0;
+
+ Ns_ObjvSpec opts[] = {
+ {"-timeout", Ns_ObjvInt, &timeout, NULL},
+ {"-ttl", Ns_ObjvInt, &ttl, NULL},
+ {"--", Ns_ObjvBreak, NULL, NULL},
+ {NULL, NULL, NULL, NULL}
+ };
+ Ns_ObjvSpec args[] = {
+ {"cache", ObjvCache, &cache, arg},
+ {"key", Ns_ObjvString, &key, NULL},
+ {"value", Ns_ObjvString, &value, NULL},
+ {NULL, NULL, NULL, NULL}
+ };
+ if (Ns_ParseObjv(opts, args, interp, 1, objc, objv) != NS_OK) {
+ return TCL_ERROR;
+ }
+ if ((entry = CreateEntry(itPtr, cache, key, &new, timeout)) == NULL) {
+ return TCL_ERROR;
+ }
+ Tcl_SetStringObj(Tcl_GetObjResult(interp), value, -1);
+ SetEntry(interp, entry, NULL, ttl);
+ Ns_CacheUnlock(cache);
+
+ return TCL_OK;
+ }
+
/*
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
naviserver-commits mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/naviserver-commits