On Wed, Jun 25, 2014 at 9:54 AM, Thierry Reding <[email protected]> wrote: > From: Thierry Reding <[email protected]> > > Most of the driver enumeration functions take an array and a maximum > number of entries that they are allowed to fill in. Upon success, they > return the number of entries filled in. This allows them to be easily > used to consecutively. > > One exception is the xf86MatchDriverFromFiles() function, which doesn't > return a value, so callers have to manually search the array for the > first empty entry. > > This commit modifies the xf86MatchDriverFromFiles() to behave the same > way as others, which makes it easier to deal with. > > Reviewed-by: Aaron Plattner <[email protected]> > Tested-By: Aaron Plattner <[email protected]> > Signed-off-by: Thierry Reding <[email protected]>
Tested-by: Rob Clark <[email protected]> (on arm / platform device) > --- > hw/xfree86/common/xf86AutoConfig.c | 2 +- > hw/xfree86/common/xf86pciBus.c | 24 ++++++++++-------------- > hw/xfree86/common/xf86pciBus.h | 5 +++-- > hw/xfree86/common/xf86platformBus.c | 7 ++----- > 4 files changed, 16 insertions(+), 22 deletions(-) > > diff --git a/hw/xfree86/common/xf86AutoConfig.c > b/hw/xfree86/common/xf86AutoConfig.c > index 4eb86de22f8d..2b53b908a591 100644 > --- a/hw/xfree86/common/xf86AutoConfig.c > +++ b/hw/xfree86/common/xf86AutoConfig.c > @@ -265,7 +265,7 @@ listPossibleVideoDrivers(char *matches[], int nmatches) > #endif > #ifdef XSERVER_LIBPCIACCESS > if (i < (nmatches - 1)) > - i = xf86PciMatchDriver(matches, nmatches); > + i += xf86PciMatchDriver(&matches[i], nmatches - i); > #endif > > #if defined(__linux__) > diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c > index 0f76a03ee7e7..c06b04033238 100644 > --- a/hw/xfree86/common/xf86pciBus.c > +++ b/hw/xfree86/common/xf86pciBus.c > @@ -1320,8 +1320,9 @@ xchomp(char *line) > * don't export their PCI ID's properly. If distros don't end up using this > * feature it can and should be removed because the symbol-based resolution > * scheme should be the primary one */ > -void > -xf86MatchDriverFromFiles(char **matches, uint16_t match_vendor, uint16_t > match_chip) > +int > +xf86MatchDriverFromFiles(uint16_t match_vendor, uint16_t match_chip, > + char *matches[], int nmatches) > { > DIR *idsdir; > FILE *fp; > @@ -1331,11 +1332,11 @@ xf86MatchDriverFromFiles(char **matches, uint16_t > match_vendor, uint16_t match_c > ssize_t read; > char path_name[256], vendor_str[5], chip_str[5]; > uint16_t vendor, chip; > - int i, j; > + int i = 0, j; > > idsdir = opendir(PCI_TXT_IDS_PATH); > if (!idsdir) > - return; > + return 0; > > xf86Msg(X_INFO, > "Scanning %s directory for additional PCI ID's supported by the > drivers\n", > @@ -1386,10 +1387,6 @@ xf86MatchDriverFromFiles(char **matches, uint16_t > match_vendor, uint16_t match_c > } > } > if (vendor == match_vendor && chip == match_chip) { > - i = 0; > - while (matches[i]) { > - i++; > - } > matches[i] = > (char *) malloc(sizeof(char) * > strlen(direntry->d_name) - 3); > @@ -1412,6 +1409,7 @@ xf86MatchDriverFromFiles(char **matches, uint16_t > match_vendor, uint16_t match_c > } > xf86Msg(X_INFO, "Matched %s from file name %s\n", > matches[i], direntry->d_name); > + i++; > } > } > else { > @@ -1425,6 +1423,7 @@ xf86MatchDriverFromFiles(char **matches, uint16_t > match_vendor, uint16_t match_c > end: > free(line); > closedir(idsdir); > + return i; > } > #endif /* __linux__ */ > > @@ -1435,7 +1434,7 @@ xf86MatchDriverFromFiles(char **matches, uint16_t > match_vendor, uint16_t match_c > int > xf86PciMatchDriver(char *matches[], int nmatches) > { > - int i; > + int i = 0; > struct pci_device *info = NULL; > struct pci_device_iterator *iter; > > @@ -1450,13 +1449,10 @@ xf86PciMatchDriver(char *matches[], int nmatches) > pci_iterator_destroy(iter); > #ifdef __linux__ > if (info) > - xf86MatchDriverFromFiles(matches, info->vendor_id, info->device_id); > + i += xf86MatchDriverFromFiles(info->vendor_id, info->device_id, > + matches, nmatches); > #endif > > - for (i = 0; (i < nmatches) && (matches[i]); i++) { > - /* find end of matches list */ > - } > - > if ((info != NULL) && (i < nmatches)) { > i += xf86VideoPtrToDriverList(info, &(matches[i]), nmatches - i); > } > diff --git a/hw/xfree86/common/xf86pciBus.h b/hw/xfree86/common/xf86pciBus.h > index b497a7f2df9d..45b5a0feefcc 100644 > --- a/hw/xfree86/common/xf86pciBus.h > +++ b/hw/xfree86/common/xf86pciBus.h > @@ -47,8 +47,9 @@ void xf86PciConfigureNewDev(void *busData, struct > pci_device *pVideo, > ((x)->func == (y)->func) && \ > ((x)->dev == (y)->dev)) > > -void > -xf86MatchDriverFromFiles(char **matches, uint16_t match_vendor, uint16_t > match_chip); > +int > +xf86MatchDriverFromFiles(uint16_t match_vendor, uint16_t match_chip, > + char *matches[], int nmatches); > int > xf86VideoPtrToDriverList(struct pci_device *dev, > char *returnList[], int returnListMax); > diff --git a/hw/xfree86/common/xf86platformBus.c > b/hw/xfree86/common/xf86platformBus.c > index dd118a28565b..672e2e5199ac 100644 > --- a/hw/xfree86/common/xf86platformBus.c > +++ b/hw/xfree86/common/xf86platformBus.c > @@ -221,13 +221,10 @@ xf86PlatformMatchDriver(char *matches[], int nmatches) > info = xf86_platform_devices[i].pdev; > #ifdef __linux__ > if (info) > - xf86MatchDriverFromFiles(matches, info->vendor_id, > info->device_id); > + j += xf86MatchDriverFromFiles(info->vendor_id, > info->device_id, > + &matches[j], nmatches - j); > #endif > > - for (j = 0; (j < nmatches) && (matches[j]); j++) { > - /* find end of matches list */ > - } > - > if ((info != NULL) && (j < nmatches)) { > j += xf86VideoPtrToDriverList(info, &(matches[j]), nmatches > - j); > } > -- > 2.0.0 > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
