Tue Sep 2 12:28:54 CEST 2008 Jim Meyering <meyering@redhat.com>
+ qemu_conf.c: use new function, virFileReadLimFD
+ * src/qemu_conf.c (qemudExtractVersionInfo): Use virFileReadLimFD
+ and VIR_FREE in place of an open-coded loop and a static buffer.
+
util.c: add a file-descriptor-based wrapper for fread_file_lim
* src/util.c (virFileReadLimFP): New function.
(__virFileReadLimFD): New function.
const char *const qemuenv[] = { "LC_ALL=C", NULL };
pid_t child;
int newstdout = -1;
- char help[8192]; /* Ought to be enough to hold QEMU help screen */
- int got = 0, ret = -1, status;
+ int ret = -1, status;
unsigned int major, minor, micro;
unsigned int version;
unsigned int flags = 0;
&child, -1, &newstdout, NULL, VIR_EXEC_NONE) < 0)
return -1;
-
- while (got < (sizeof(help)-1)) {
- int len;
- if ((len = saferead(newstdout, help+got, sizeof(help)-got-1)) < 0)
- goto cleanup2;
- if (!len)
- break;
- got += len;
- }
- help[got] = '\0';
+ char *help = NULL;
+ enum { MAX_HELP_OUTPUT_SIZE = 8192 };
+ int len = virFileReadLimFD(newstdout, MAX_HELP_OUTPUT_SIZE, &help);
+ if (len < 0)
+ goto cleanup2;
if (sscanf(help, "QEMU PC emulator version %u.%u.%u",
&major, &minor, µ) != 3) {
if (version >= 9000)
flags |= QEMUD_CMD_FLAG_VNC_COLON;
-
if (retversion)
*retversion = version;
if (retflags)
major, minor, micro, version, flags);
cleanup2:
+ VIR_FREE(help);
if (close(newstdout) < 0)
ret = -1;
#undef ADD_ARG_LIT
#undef ADD_ARG_SPACE
}
-