a7ebe0bcfe3c245f91bb882f29c747bc443edcb5
kent
  Tue Jul 23 10:50:13 2013 -0700
Making new edwCorrectFileTags utility to correct file tags after upload.  Moving stuff from edwChangeFormat to library to reuse in this context.
diff --git src/lib/cheapcgi.c src/lib/cheapcgi.c
index c7c2734..b912301 100644
--- src/lib/cheapcgi.c
+++ src/lib/cheapcgi.c
@@ -652,30 +652,56 @@
 boolean ok = TRUE;
 int status = setjmp(cgiParseRecover);
 if (status == 0)    /* Always true except after long jump. */
     {
     pushAbortHandler(cgiParseAbort);
     cgiParseInputAbort(input, retHash, retList);
     }
 else    /* They long jumped here because of an error. */
     {
     ok = FALSE;
     }
 popAbortHandler();
 return ok;
 }
 
+char *cgiStringNewValForVar(char *cgiIn, char *varName, char *newVal)
+/* Return a cgi-encoded string with newVal in place of what was oldVal.
+ * It is an error for var not to exist.   Do a freeMem of this string
+ * when you are through. */
+{
+struct dyString *dy = dyStringNew(strlen(cgiIn) + strlen(newVal));
+struct cgiParsedVars *cpv = cgiParsedVarsNew(cgiIn);
+struct cgiVar *var;
+boolean doneSub = FALSE;
+for (var = cpv->list; var != NULL; var = var->next)
+    {
+    char *val = var->val;
+    if (sameString(var->name, varName))
+	{
+        val = newVal;
+	doneSub = TRUE;
+	}
+    cgiEncodeIntoDy(var->name, val, dy);
+    }
+if (!doneSub)
+    errAbort("Couldn't find %s in %s", varName, cgiIn);
+cgiParsedVarsFree(&cpv);
+return dyStringCannibalize(&dy);
+}
+
+
 static boolean dumpStackOnSignal = FALSE;  // should a stack dump be generated?
 
 static void catchSignal(int sigNum)
 /* handler for various terminal signals for logging purposes */
 {
 char *sig = NULL;
 switch (sigNum)
     {
     case SIGTERM:  // after timing out for not producing any stdout or stderr output for too long,
 		   //  apache gives you 3 seconds to clean up and exit or it then sends SIGKILL.
       sig = "SIGTERM";
       break;
     case SIGHUP:   // apache sends this when it is doing a graceful restart or a log rotate.
       sig = "SIGHUP";
       break;