-const char actions_rcs[] = "$Id: actions.c,v 1.16 2001/10/23 21:30:30 jongfoster Exp $";
+const char actions_rcs[] = "$Id: actions.c,v 1.19 2001/11/13 00:14:07 jongfoster Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/actions.c,v $
*
* Revisions :
* $Log: actions.c,v $
+ * Revision 1.19 2001/11/13 00:14:07 jongfoster
+ * Fixing stupid bug now I've figured out what || means.
+ * (It always returns 0 or 1, not one of it's paramaters.)
+ *
+ * Revision 1.18 2001/11/07 00:06:06 steudten
+ * Add line number in error output for lineparsing for
+ * actionsfile.
+ *
+ * Revision 1.17 2001/10/25 03:40:47 david__schmidt
+ * Change in porting tactics: OS/2's EMX porting layer doesn't allow multiple
+ * threads to call select() simultaneously. So, it's time to do a real, live,
+ * native OS/2 port. See defines for __EMX__ (the porting layer) vs. __OS2__
+ * (native). Both versions will work, but using __OS2__ offers multi-threading.
+ *
* Revision 1.16 2001/10/23 21:30:30 jongfoster
* Adding error-checking to selected functions.
*
#include <stdio.h>
#include <string.h>
#include <assert.h>
+#include <stdlib.h>
#include "project.h"
#include "jcc.h"
#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{*} */
+#define AV_REM_MULTI 4 /* -multiopt{string} -multiopt */
/*
* We need a structure to hold the name, flag changes,
/* No "remove all"s to worry about. */
list_remove_list(dest->multi_add[i], src->multi_remove[i]);
err = list_append_list_unique(dest->multi_remove[i], src->multi_remove[i]);
- err = err || list_append_list_unique(dest->multi_add[i], src->multi_add[i]);
+ if (!err) err = list_append_list_unique(dest->multi_add[i], src->multi_add[i]);
}
if (err)
for (i = 0; i < ACTION_MULTI_COUNT; i++)
{
dest->multi_remove_all[i] = src->multi_remove_all[i];
- err = list_duplicate(dest->multi_remove[i], src->multi_remove[i]);
- err = err || list_duplicate(dest->multi_add[i], src->multi_add[i]);
+ err = list_duplicate(dest->multi_remove[i], src->multi_remove[i]);
+ if (err)
+ {
+ return err;
+ }
+ err = list_duplicate(dest->multi_add[i], src->multi_add[i]);
if (err)
{
return err;
#define DEFINE_ACTION_MULTI(__name, __index) \
if (action->multi_remove_all[__index]) \
{ \
- string_append(&result, " -" __name "{*}"); \
+ string_append(&result, " -" __name); \
} \
else \
{ \
#define DEFINE_ACTION_MULTI(__name, __index) \
if (action->multi_remove_all[__index]) \
{ \
- string_append(&result, "\n<br>-" __name "{*}"); \
+ string_append(&result, "\n<br>-" __name); \
} \
else \
{ \
*********************************************************************/
char * current_action_to_text(struct current_action_spec *action)
{
- unsigned flags = action->flags;
+ unsigned long flags = action->flags;
char * result = strdup("");
struct list_entry * lst;
struct action_spec * cur_action = NULL;
int cur_action_used = 0;
struct action_alias * alias_list = NULL;
+ unsigned long linenum = 0;
if (!check_file_changed(current_actions_file, csp->config->actions_file, &fs))
{
return 1; /* never get here */
}
- while (read_config_line(buf, sizeof(buf), fp) != NULL)
+ while (read_config_line(buf, sizeof(buf), fp, &linenum) != NULL)
{
if (*buf == '{')
{
/* too short */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid line: %s",
- csp->config->actions_file, buf);
+ "can't load actions file '%s': invalid line (%lu): %s",
+ csp->config->actions_file, linenum, buf);
return 1; /* never get here */
}
/* too short */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid line: {{ }}",
- csp->config->actions_file);
+ "can't load actions file '%s': invalid line (%lu): {{ }}",
+ csp->config->actions_file, linenum);
return 1; /* never get here */
}
*/
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': {{settings}} must only appear once, and it must be before anything else.",
- csp->config->actions_file);
+ "can't load actions file '%s': line %lu: {{settings}} must only appear once, and it must be before anything else.",
+ csp->config->actions_file, linenum);
}
mode = MODE_SETTINGS;
}
*/
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': {{description}} must only appear once, and only a {{settings}} block may be above it.",
- csp->config->actions_file);
+ "can't load actions file '%s': line %lu: {{description}} must only appear once, and only a {{settings}} block may be above it.",
+ csp->config->actions_file, linenum);
}
mode = MODE_DESCRIPTION;
}
*/
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': {{alias}} must only appear once, and it must be before all actions.",
- csp->config->actions_file, start);
+ "can't load actions file '%s': line %lu: {{alias}} must only appear once, and it must be before all actions.",
+ csp->config->actions_file, linenum);
}
mode = MODE_ALIAS;
}
/* invalid {{something}} block */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid line: {{%s}}",
- csp->config->actions_file, start);
+ "can't load actions file '%s': invalid line (%lu): {{%s}}",
+ csp->config->actions_file, linenum, start);
return 1; /* never get here */
}
}
/* No closing } */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid line: %s",
- csp->config->actions_file, buf);
+ "can't load actions file '%s': invalid line (%lu): %s",
+ csp->config->actions_file, linenum, buf);
return 1; /* never get here */
}
*end = '\0';
/* error */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid line: %s",
- csp->config->actions_file, buf);
+ "can't load actions file '%s': invalid line (%lu): %s",
+ csp->config->actions_file, linenum, buf);
return 1; /* never get here */
}
}
if ((start == NULL) || (start == buf))
{
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid alias line: %s",
- csp->config->actions_file, buf);
+ "can't load actions file '%s': invalid alias line (%lu): %s",
+ csp->config->actions_file, linenum, buf);
return 1; /* never get here */
}
if (*start == '\0')
{
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid alias line: %s",
- csp->config->actions_file, buf);
+ "can't load actions file '%s': invalid alias line (%lu): %s",
+ csp->config->actions_file, linenum, buf);
return 1; /* never get here */
}
/* error */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': invalid alias line: %s = %s",
- csp->config->actions_file, buf, start);
+ "can't load actions file '%s': invalid alias line (%lu): %s = %s",
+ csp->config->actions_file, linenum, buf, start);
return 1; /* never get here */
}
{
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': cannot create URL pattern from: %s",
- csp->config->actions_file, buf);
+ "can't load actions file '%s': line %lu: cannot create URL pattern from: %s",
+ csp->config->actions_file, linenum, buf);
return 1; /* never get here */
}
/* oops - please have a {} line as 1st line in file. */
fclose(fp);
log_error(LOG_LEVEL_FATAL,
- "can't load actions file '%s': first line is invalid: %s",
- csp->config->actions_file, buf);
+ "can't load actions file '%s': first needed line (%lu) is invalid: %s",
+ csp->config->actions_file, linenum, buf);
return 1; /* never get here */
}
else