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;