*
* Copyright (c) 1997--2008 Martin Mares <mj@ucw.cz>
*
- * Can be freely distributed and used under the terms of the GNU GPL.
+ * Can be freely distributed and used under the terms of the GNU GPL v2+.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <stdio.h>
struct pci_dev *dev = NULL;
int len, mn, bn, dn, fn, i, j;
- if (!a)
+ if (!name)
a->error("dump: File name not given.");
if (!(f = fopen(name, "r")))
a->error("dump: Cannot open %s: %s", name, strerror(errno));
{
char *z = strchr(buf, '\n');
if (!z)
- a->error("dump: line too long or unterminated");
+ {
+ fclose(f);
+ a->error("dump: line too long or unterminated");
+ }
*z-- = 0;
if (z >= buf && *z == '\r')
*z-- = 0;
len = z - buf + 1;
mn = 0;
if (dump_validate(buf, "##:##.# ") && sscanf(buf, "%x:%x.%d", &bn, &dn, &fn) == 3 ||
- dump_validate(buf, "####:##:##.# ") && sscanf(buf, "%x:%x:%x.%d", &mn, &bn, &dn, &fn) == 4)
+ dump_validate(buf, "####:##:##.# ") && sscanf(buf, "%x:%x:%x.%d", &mn, &bn, &dn, &fn) == 4 ||
+ dump_validate(buf, "#####:##:##.# ") && sscanf(buf, "%x:%x:%x.%d", &mn, &bn, &dn, &fn) == 4)
{
dev = pci_get_dev(a, mn, bn, dn, fn);
dump_alloc_data(dev, 256);
else if (!len)
dev = NULL;
else if (dev &&
- (dump_validate(buf, "##: ") || dump_validate(buf, "###: ")) &&
+ (dump_validate(buf, "##: ") || dump_validate(buf, "###: ") || dump_validate(buf, "####: ") ||
+ dump_validate(buf, "#####: ") || dump_validate(buf, "######: ") ||
+ dump_validate(buf, "#######: ") || dump_validate(buf, "########: ")) &&
sscanf(buf, "%x: ", &i) == 1)
{
struct dump_data *dd = dev->aux;
sscanf(z, "%x", &j) == 1 && j < 256)
{
if (i >= 4096)
- a->error("dump: At most 4096 bytes of config space are supported");
+ {
+ fclose(f);
+ a->error("dump: At most 4096 bytes of config space are supported");
+ }
if (i >= dd->allocated) /* Need to re-allocate the buffer */
{
dump_alloc_data(dev, 4096);
z++;
}
if (*z)
- a->error("dump: Malformed line");
+ {
+ fclose(f);
+ a->error("dump: Malformed line");
+ }
}
}
+ fclose(f);
}
static void