else if (*cp == '\0') condExpr = cp;
do_compare:		if (*rhs == '"') {		    /*		     * Doing a string comparison. Only allow == and != for		     * operators.		     */		    char    *string;		    char    *cp, *cp2;		    int	    qt;		    Buffer  buf;do_string_compare:		    if (((*op != '!') && (*op != '=')) || (op[1] != '=')) {			Parse_Error(PARSE_WARNING,		"String comparison operator should be either == or !=");			goto error;		    }		    buf = Buf_Init(0);		    qt = *rhs == '"' ? 1 : 0;		    for (cp = &rhs[qt];			 ((qt && (*cp != '"')) ||			  (!qt && strchr(" \t)", *cp) == NULL)) &&			 (*cp != '\0'); cp++) {			if ((*cp == '\\') && (cp[1] != '\0')) {			    /*			     * Backslash escapes things -- skip over next			     * character, if it exists.			     */			    cp++;			    Buf_AddChar(buf, *cp);			} else if (*cp == '$') {			    int	len;			    Boolean freeIt;			    cp2 = Var_Parse(cp, VAR_CMD, doEval,&len, &freeIt);			    if (cp2 != var_Error) {				Buf_AddString(buf, cp2);				if (freeIt) {				    free(cp2);				}				cp += len - 1;			    } else {				Buf_AddChar(buf, *cp);			    }			} else {			    Buf_AddChar(buf, *cp);			}		    }		    string = Buf_Retrieve(buf);		    Buf_Destroy(buf, FALSE);		    if (DEBUG(COND)) {			printf("lhs = \"%s\", rhs = \"%s\", op = %.2s\n",			       lhs, string, op);		    }		    /*		     * Null-terminate rhs and perform the comparison.		     * t is set to the result.		     */		    if (*op == '=') {			t = strcmp(lhs, string) ? False : True;		    } else {			t = strcmp(lhs, string) ? True : False;		    }		    free(string);		    if (rhs == condExpr) {		    	if (!qt && *cp == ')')			    condExpr = cp;			else			    condExpr = cp + 1;		    }		} else {