There are few outdated things. Firstly, we don't need to undergo the torture of fopen, fscanf and fclose when we have nice wrapper over that: virFileReadAll. Secondly, we can use dynamically allocated buffer for the interface index. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- src/util/virnetdevmacvlan.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c index 9384b9f..c1a5f0f 100644 --- a/src/util/virnetdevmacvlan.c +++ b/src/util/virnetdevmacvlan.c @@ -237,40 +237,28 @@ int virNetDevMacVLanTapOpen(const char *ifname, int retries) { int ret = -1; - FILE *file = NULL; char *path; int ifindex; - char tapname[50]; + char *tapname = NULL; + char *buf = NULL; + char *c; int tapfd; if (virNetDevSysfsFile(&path, ifname, "ifindex") < 0) return -1; - file = fopen(path, "r"); - - if (!file) { - virReportSystemError(errno, - _("cannot open macvtap file %s to determine " - "interface index"), path); + if (virFileReadAll(path, sizeof(buf), &buf) < 0) goto cleanup; - } - if (fscanf(file, "%d", &ifindex) != 1) { + if (virStrToLong_i(buf, &c, 10, &ifindex) < 0 || *c != '\n') { virReportSystemError(errno, "%s", _("cannot determine macvtap's tap device " - "interface index")); + "interface index")); goto cleanup; } - VIR_FORCE_FCLOSE(file); - - if (snprintf(tapname, sizeof(tapname), - "/dev/tap%d", ifindex) >= sizeof(tapname)) { - virReportSystemError(errno, - "%s", - _("internal buffer for tap device is too small")); + if (virAsprintf(&tapname, "/dev/tap%d", ifindex) < 0) goto cleanup; - } while (1) { /* may need to wait for udev to be done */ @@ -292,7 +280,8 @@ int virNetDevMacVLanTapOpen(const char *ifname, ret = tapfd; cleanup: VIR_FREE(path); - VIR_FORCE_FCLOSE(file); + VIR_FREE(tapname); + VIR_FREE(buf); return ret; } -- 2.4.10 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list