ctxt.filename = filename;
ctxt.base = ctxt.cur = content;
- ctxt.end = content + len - 1;
+ ctxt.end = content + len;
ctxt.line = 1;
ctxt.conf = virConfCreate(filename, flags);
{
char *content;
int len;
- virConfPtr conf = NULL;
+ virConfPtr conf;
VIR_DEBUG("filename=%s", NULLSTR(filename));
if ((len = virFileReadAll(filename, MAX_CONFIG_FILE_SIZE, &content)) < 0)
return NULL;
- if (len && len < MAX_CONFIG_FILE_SIZE && content[len - 1] != '\n') {
- VIR_DEBUG("appending newline to busted config file %s", filename);
- if (VIR_REALLOC_N(content, len + 2) < 0)
- goto cleanup;
- content[len++] = '\n';
- content[len] = '\0';
- }
-
conf = virConfParse(filename, content, len, flags);
- cleanup:
VIR_FREE(content);
return conf;
}
+static int testConfMemoryNoNewline(const void *opaque ATTRIBUTE_UNUSED)
+{
+ const char *srcdata = \
+ "ullong = '123456789'\n" \
+ "string = 'foo'\n" \
+ "uint = 12345";
+
+ virConfPtr conf = virConfReadString(srcdata, 0);
+ int ret = -1;
+ virConfValuePtr val;
+ unsigned long long llvalue;
+ char *str = NULL;
+ int uintvalue;
+
+ if (!conf)
+ return -1;
+
+ if (!(val = virConfGetValue(conf, "ullong")))
+ goto cleanup;
+
+ if (val->type != VIR_CONF_STRING)
+ goto cleanup;
+
+ if (virStrToLong_ull(val->str, NULL, 10, &llvalue) < 0)
+ goto cleanup;
+
+ if (llvalue != 123456789) {
+ fprintf(stderr, "Expected '123' got '%llu'\n", llvalue);
+ goto cleanup;
+ }
+
+ if (virConfGetValueType(conf, "string") !=
+ VIR_CONF_STRING) {
+ fprintf(stderr, "expected a string for 'string'\n");
+ goto cleanup;
+ }
+
+ if (virConfGetValueString(conf, "string", &str) < 0)
+ goto cleanup;
+
+ if (STRNEQ_NULLABLE(str, "foo")) {
+ fprintf(stderr, "Expected 'foo' got '%s'\n", str);
+ goto cleanup;
+ }
+
+ if (virConfGetValueType(conf, "uint") != VIR_CONF_ULLONG) {
+ fprintf(stderr, "expected an unsigned long for 'uint'\n");
+ goto cleanup;
+ }
+
+ if (virConfGetValueInt(conf, "uint", &uintvalue) < 0)
+ goto cleanup;
+
+ if (uintvalue != 12345) {
+ fprintf(stderr, "Expected 12345 got %ud\n", uintvalue);
+ goto cleanup;
+ }
+
+ ret = 0;
+ cleanup:
+ VIR_FREE(str);
+ virConfFree(conf);
+ return ret;
+}
+
+
static int testConfParseInt(const void *opaque ATTRIBUTE_UNUSED)
{
const char *srcdata = \
if (virTestRun("no-newline", testConfRoundTrip, "no-newline") < 0)
ret = -1;
+ if (virTestRun("memory-no-newline", testConfMemoryNoNewline, NULL) < 0)
+ ret = -1;
+
if (virTestRun("int", testConfParseInt, NULL) < 0)
ret = -1;