-const char actions_rcs[] = "$Id: actions.c,v 1.69 2011/05/22 10:21:54 fabiankeil Exp $";
+const char actions_rcs[] = "$Id: actions.c,v 1.82 2012/06/08 15:09:06 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/actions.c,v $
*
* Purpose : Declares functions to work with actions files
- * Functions declared include: FIXME
*
* Copyright : Written by and Copyright (C) 2001-2011 the
* Privoxy team. http://www.privoxy.org/
* an enumerated type (well, the preprocessor equivalent). Here are
* the values:
*/
-#define AV_NONE 0 /* +opt -opt */
-#define AV_ADD_STRING 1 /* +stropt{string} */
-#define AV_REM_STRING 2 /* -stropt */
-#define AV_ADD_MULTI 3 /* +multiopt{string} +multiopt{string2} */
-#define AV_REM_MULTI 4 /* -multiopt{string} -multiopt */
+enum action_value_type {
+ AV_NONE = 0, /* +opt -opt */
+ AV_ADD_STRING = 1, /* +stropt{string} */
+ AV_REM_STRING = 2, /* -stropt */
+ AV_ADD_MULTI = 3, /* +multiopt{string} +multiopt{string2} */
+ AV_REM_MULTI = 4 /* -multiopt{string} -multiopt */
+};
/*
* We need a structure to hold the name, flag changes,
struct action_name
{
const char * name;
- unsigned long mask; /* a bit set to "0" = remove action */
- unsigned long add; /* a bit set to "1" = add action */
- int takes_value; /* an AV_... constant */
- int index; /* index into strings[] or multi[] */
+ unsigned long mask; /* a bit set to "0" = remove action */
+ unsigned long add; /* a bit set to "1" = add action */
+ enum action_value_type value_type; /* an AV_... constant */
+ int index; /* index into strings[] or multi[] */
};
/*
* Function : get_action_token
*
* Description : Parses a line for the first action.
- * Modifies it's input array, doesn't allocate memory.
+ * Modifies its input array, doesn't allocate memory.
* e.g. given:
* *line=" +abc{def} -ghi "
* Returns:
*********************************************************************/
static int action_used_to_be_valid(const char *action)
{
- static const char *formerly_valid_actions[] = {
+ static const char * const formerly_valid_actions[] = {
"inspect-jpegs",
"kill-popups",
"send-vanilla-wafer",
/* Check for standard action name */
const struct action_name * action = action_names;
- while ( (action->name != NULL) && (0 != strcmpic(action->name, option)) )
+ while ((action->name != NULL) && (0 != strcmpic(action->name, option)))
{
action++;
}
cur_action->add &= action->mask;
cur_action->add |= action->add;
- switch (action->takes_value)
+ switch (action->value_type)
{
case AV_NONE:
/* ignore any option. */
struct list * remove_p = cur_action->multi_remove[action->index];
struct list * add_p = cur_action->multi_add[action->index];
- if ( (value == NULL) || (*value == '\0')
- || ((*value == '*') && (value[1] == '\0')) )
+ if ((value == NULL) || (*value == '\0')
+ || ((*value == '*') && (value[1] == '\0')))
{
/*
* no option, or option == "*".
{
/* Valid option - remove only 1 option */
- if ( !cur_action->multi_remove_all[action->index] )
+ if (!cur_action->multi_remove_all[action->index])
{
/* there isn't a catch-all in the remove list already */
err = enlist_unique(remove_p, value, 0);
/* try user aliases. */
const struct action_alias * alias = alias_list;
- while ( (alias != NULL) && (0 != strcmpic(alias->name, option)) )
+ while ((alias != NULL) && (0 != strcmpic(alias->name, option)))
{
alias = alias->next;
}
return err;
}
-#if 0
-/*********************************************************************
- *
- * Function : update_action_bits_for_all_tags
- *
- * Description : Updates the action bits based on all matching tags.
- *
- * Parameters :
- * 1 : csp = Current client state (buffers, headers, etc...)
- *
- * Returns : 0 if no tag matched, or
- * 1 otherwise
- *
- *********************************************************************/
-int update_action_bits_for_all_tags(struct client_state *csp)
-{
- struct list_entry *tag;
- int updated = 0;
-
- for (tag = csp->tags->first; tag != NULL; tag = tag->next)
- {
- if (update_action_bits_for_tag(csp, tag->str))
- {
- updated = 1;
- }
- }
-
- return updated;
-}
-#endif
/*********************************************************************
*
/* too short */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid line (%lu): %s",
+ "can't load actions file '%s': invalid line (%lu): %s",
csp->config->actions_file[fileid], linenum, buf);
return 1; /* never get here */
}
csp->config->actions_file[fileid]);
return 1; /* never get here */
}
-
- num_fields = ssplit(version_string, ".", fields, SZ(fields), TRUE, FALSE);
+
+ num_fields = ssplit(version_string, ".", fields, SZ(fields));
if (num_fields < 1 || atoi(fields[0]) == 0)
{
"While loading actions file '%s': invalid line (%lu): %s",
csp->config->actions_file[fileid], linenum, buf);
}
- else if ( atoi(fields[0]) > VERSION_MAJOR
- || (num_fields > 1 && atoi(fields[1]) > VERSION_MINOR)
- || (num_fields > 2 && atoi(fields[2]) > VERSION_POINT))
+ else if ( (atoi(fields[0]) > VERSION_MAJOR)
+ || ((num_fields > 1) && (atoi(fields[1]) > VERSION_MINOR))
+ || ((num_fields > 2) && (atoi(fields[2]) > VERSION_POINT)))
{
fclose(fp);
log_error(LOG_LEVEL_FATAL,
"Actions file '%s', line %lu requires newer Privoxy version: %s",
- csp->config->actions_file[fileid], linenum, buf );
+ csp->config->actions_file[fileid], linenum, buf);
return 1; /* never get here */
}
free(version_string);
/* oops - please have a {} line as 1st line in file. */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': first needed line (%lu) is invalid: %s",
+ "can't load actions file '%s': line %lu should begin with a '{': %s",
csp->config->actions_file[fileid], linenum, buf);
return 1; /* never get here */
}
*
* Description : Converts a actionsfile entry from the internal
* structure into a text line. The output is split
- * into one line for each action with line continuation.
+ * into one line for each action with line continuation.
*
* Parameters :
* 1 : action = The action to format.
* the user manual.
*
* Parameters :
- * 1 : csp = Client state (for config)
+ * 1 : csp = Client state (for config)
* 2 : action = Current action spec to be converted
*
* Returns : A string. Caller must free it.