/**
* virConfError:
- * @conf: the configuration if available
+ * @ctxt: the parser context if available or NULL
* @error: the error number
* @info: extra information string
- * @line: line for the error
*
* Handle an error at the xend daemon interface
*/
static void
-virConfError(virConfPtr conf ATTRIBUTE_UNUSED,
- virErrorNumber error, const char *info, int line)
+virConfError(virConfParserCtxtPtr ctxt,
+ virErrorNumber error, const char *info)
{
- const char *errmsg;
+ const char *format;
if (error == VIR_ERR_OK)
return;
- errmsg = __virErrorMsg(error, info);
- __virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
- errmsg, info, NULL, line, 0, errmsg, info, line);
+ /* Construct the string 'filename:line: info' if we have that. */
+ if (ctxt && ctxt->filename) {
+ __virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
+ info, ctxt->filename, NULL,
+ ctxt->line, 0,
+ "%s:%d: %s", ctxt->filename, ctxt->line, info);
+ } else {
+ format = __virErrorMsg(error, info);
+ __virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
+ info, NULL, NULL,
+ ctxt ? ctxt->line : 0, 0,
+ format, info);
+ }
}
virConfPtr ret;
if (VIR_ALLOC(ret) < 0) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"), 0);
+ virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"));
return(NULL);
}
ret->filename = NULL;
return(NULL);
if (VIR_ALLOC(ret) < 0) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"), 0);
+ virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"));
return(NULL);
}
NEXT;
}
if ((ctxt->cur >= ctxt->end) || (!c_isdigit(CUR))) {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("unterminated number"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("unterminated number"));
return(-1);
}
while ((ctxt->cur < ctxt->end) && (c_isdigit(CUR))) {
while ((ctxt->cur < ctxt->end) && (CUR != '\'') && (!IS_EOL(CUR)))
NEXT;
if (CUR != '\'') {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("unterminated string"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("unterminated string"));
return(NULL);
}
ret = strndup(base, ctxt->cur - base);
}
if ((ctxt->cur[0] != '"') || (ctxt->cur[1] != '"') ||
(ctxt->cur[2] != '"')) {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("unterminated string"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("unterminated string"));
return(NULL);
}
ret = strndup(base, ctxt->cur - base);
while ((ctxt->cur < ctxt->end) && (CUR != '"') && (!IS_EOL(CUR)))
NEXT;
if (CUR != '"') {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("unterminated string"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("unterminated string"));
return(NULL);
}
ret = strndup(base, ctxt->cur - base);
SKIP_BLANKS;
if (ctxt->cur >= ctxt->end) {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("expecting a value"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting a value"));
return(NULL);
}
if ((CUR == '"') || (CUR == '\'')) {
}
while ((ctxt->cur < ctxt->end) && (CUR != ']')) {
if (CUR != ',') {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX,
- _("expecting a separator in list"), ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX,
+ _("expecting a separator in list"));
virConfFreeList(lst);
return(NULL);
}
if (CUR == ']') {
NEXT;
} else {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX,
- _("list is not closed with ]"), ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX,
+ _("list is not closed with ]"));
virConfFreeList(lst);
return(NULL);
}
}
type = VIR_CONF_LONG;
} else {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("expecting a value"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting a value"));
return(NULL);
}
if (VIR_ALLOC(ret) < 0) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"), 0);
+ virConfError(ctxt, VIR_ERR_NO_MEMORY, _("allocating configuration"));
virConfFreeList(lst);
VIR_FREE(str);
return(NULL);
base = ctxt->cur;
/* TODO: probably need encoding support and UTF-8 parsing ! */
if (!c_isalpha(CUR)) {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("expecting a name"), ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting a name"));
return(NULL);
}
while ((ctxt->cur < ctxt->end) && (c_isalnum(CUR) || (CUR == '_')))
NEXT;
ret = strndup(base, ctxt->cur - base);
if (ret == NULL) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_NO_MEMORY, _("allocating configuration"));
return(NULL);
}
return(ret);
while ((ctxt->cur < ctxt->end) && (!IS_EOL(CUR))) NEXT;
comm = strndup(base, ctxt->cur - base);
if (comm == NULL) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_NO_MEMORY, _("allocating configuration"));
return(-1);
}
virConfAddEntry(ctxt->conf, NULL, NULL, comm);
NEXT;
SKIP_BLANKS_AND_EOL;
} else {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("expecting a separator"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting a separator"));
return(-1);
}
return(0);
return(-1);
SKIP_BLANKS;
if (CUR != '=') {
- virConfError(NULL, VIR_ERR_CONF_SYNTAX, _("expecting an assignment"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting an assignment"));
return(-1);
}
NEXT;
while ((ctxt->cur < ctxt->end) && (!IS_EOL(CUR))) NEXT;
comm = strndup(base, ctxt->cur - base);
if (comm == NULL) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocating configuration"),
- ctxt->line);
+ virConfError(ctxt, VIR_ERR_NO_MEMORY, _("allocating configuration"));
VIR_FREE(name);
virConfFreeValue(value);
return(-1);
virConfPtr conf;
if (filename == NULL) {
- virConfError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__, 0);
+ virConfError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
return(NULL);
}
if ((len = virFileReadAll(filename, MAX_CONFIG_FILE_SIZE, &content)) < 0) {
- virConfError(NULL, VIR_ERR_OPEN_FAILED, filename, 0);
+ virConfError(NULL, VIR_ERR_OPEN_FAILED, filename);
return NULL;
}
__virConfReadMem(const char *memory, int len)
{
if ((memory == NULL) || (len < 0)) {
- virConfError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__, 0);
+ virConfError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
return(NULL);
}
if (len == 0)
{
virConfEntryPtr tmp;
if (conf == NULL) {
- virConfError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__, 0);
+ virConfError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
return(-1);
}
}
if (virBufferError(&buf)) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocate buffer"), 0);
+ virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocate buffer"));
return -1;
}
fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR );
if (fd < 0) {
char *tmp = virBufferContentAndReset(&buf);
- virConfError(NULL, VIR_ERR_WRITE_FAILED, _("failed to open file"), 0);
+ virConfError(NULL, VIR_ERR_WRITE_FAILED, _("failed to open file"));
VIR_FREE(tmp);
return -1;
}
VIR_FREE(content);
close(fd);
if (ret != (int)use) {
- virConfError(NULL, VIR_ERR_WRITE_FAILED, _("failed to save content"), 0);
+ virConfError(NULL, VIR_ERR_WRITE_FAILED, _("failed to save content"));
return -1;
}
}
if (virBufferError(&buf)) {
- virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocate buffer"), 0);
+ virConfError(NULL, VIR_ERR_NO_MEMORY, _("allocate buffer"));
return -1;
}