aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile17
-rw-r--r--lib/Makefile6
-rw-r--r--lib/i386-ports.c20
-rw-r--r--lib/win32-cfgmgr32.c18
-rw-r--r--lib/winrsrc.rc.in (renamed from lib/dllrsrc.rc.in)12
5 files changed, 54 insertions, 19 deletions
diff --git a/Makefile b/Makefile
index e2e3bd7..11f15f1 100644
--- a/Makefile
+++ b/Makefile
@@ -112,6 +112,21 @@ example.o: example.c $(PCIINC)
%$(EXEEXT): %.o
$(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o $@
+ifdef PCI_OS_WINDOWS
+comma := ,
+%-rsrc.rc: lib/winrsrc.rc.in
+ sed <$< >$@ -e 's,@PCILIB_VERSION@,$(PCILIB_VERSION),' \
+ -e 's,@PCILIB_VERSION_WINRC@,$(subst .,\$(comma),$(PCILIB_VERSION).0),' \
+ -e 's,@FILENAME@,$(subst -rsrc.rc,$(EXEEXT),$@),' \
+ -e 's,@DESCRIPTION@,$(subst -rsrc.rc,,$@),' \
+ -e 's,@LIBRARY_BUILD@,0,' \
+ -e 's,@DEBUG_BUILD@,$(if $(findstring -g,$(CFLAGS)),1,0),'
+%-rsrc.o: %-rsrc.rc
+ $(WINDRES) --input=$< --output=$@ --input-format=rc --output-format=coff
+lspci$(EXEEXT): lspci-rsrc.o
+setpci$(EXEEXT): setpci-rsrc.o
+endif
+
%.8 %.7 %.5: %.man
M=`echo $(DATE) | sed 's/-01-/-January-/;s/-02-/-February-/;s/-03-/-March-/;s/-04-/-April-/;s/-05-/-May-/;s/-06-/-June-/;s/-07-/-July-/;s/-08-/-August-/;s/-09-/-September-/;s/-10-/-October-/;s/-11-/-November-/;s/-12-/-December-/;s/\(.*\)-\(.*\)-\(.*\)/\3 \2 \1/'` ; sed <$< >$@ "s/@TODAY@/$$M/;s/@VERSION@/pciutils-$(VERSION)/;s#@IDSDIR@#$(IDSDIR)#;s#@PCI_IDS@#$(PCI_IDS)#"
@@ -125,7 +140,7 @@ TAGS:
clean:
rm -f `find . -name "*~" -o -name "*.[oa]" -o -name "\#*\#" -o -name TAGS -o -name core -o -name "*.orig"`
- rm -f update-pciids lspci$(EXEEXT) setpci$(EXEEXT) example$(EXEEXT) lib/config.* *.[578] pci.ids.gz lib/*.pc lib/*.so lib/*.so.* lib/*.dll lib/*.def lib/dllrsrc.rc tags
+ rm -f update-pciids lspci$(EXEEXT) setpci$(EXEEXT) example$(EXEEXT) lib/config.* *.[578] pci.ids.gz lib/*.pc lib/*.so lib/*.so.* lib/*.dll lib/*.def lib/dllrsrc.rc *-rsrc.rc tags
rm -rf maint/dist
distclean: clean
diff --git a/lib/Makefile b/lib/Makefile
index 13c2a19..05db1ec 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -79,10 +79,12 @@ $(PCIIMPDEF): libpci.ver ver2def.pl
$(PCIIMPLIB): $(PCIIMPDEF)
$(DLLTOOL) --input-def $< --output-lib $@
comma := ,
-dllrsrc.rc: dllrsrc.rc.in
+dllrsrc.rc: winrsrc.rc.in
sed <$< >$@ -e 's,@PCILIB_VERSION@,$(PCILIB_VERSION),' \
-e 's,@PCILIB_VERSION_WINRC@,$(subst .,\$(comma),$(PCILIB_VERSION).0),' \
- -e 's,@PCILIB@,$(PCILIB),' \
+ -e 's,@FILENAME@,$(PCILIB),' \
+ -e 's,@DESCRIPTION@,libpci,' \
+ -e 's,@LIBRARY_BUILD@,1,' \
-e 's,@DEBUG_BUILD@,$(if $(findstring -g,$(CFLAGS)),1,0),'
dllrsrc.o: dllrsrc.rc
$(WINDRES) --input=$< --output=$@ --input-format=rc --output-format=coff
diff --git a/lib/i386-ports.c b/lib/i386-ports.c
index 2e64fe4..0ca87dd 100644
--- a/lib/i386-ports.c
+++ b/lib/i386-ports.c
@@ -136,6 +136,9 @@ conf1_read(struct pci_dev *d, int pos, byte *buf, int len)
if (d->domain || pos >= 256)
return 0;
+ if (len != 1 && len != 2 && len != 4)
+ return pci_generic_block_read(d, pos, buf, len);
+
intel_io_lock();
outl(0x80000000 | ((d->bus & 0xff) << 16) | (PCI_DEVFN(d->dev, d->func) << 8) | (pos&~3), 0xcf8);
@@ -150,8 +153,6 @@ conf1_read(struct pci_dev *d, int pos, byte *buf, int len)
case 4:
((u32 *) buf)[0] = cpu_to_le32(inl(addr));
break;
- default:
- res = pci_generic_block_read(d, pos, buf, len);
}
intel_io_unlock();
@@ -167,6 +168,9 @@ conf1_write(struct pci_dev *d, int pos, byte *buf, int len)
if (d->domain || pos >= 256)
return 0;
+ if (len != 1 && len != 2 && len != 4)
+ return pci_generic_block_write(d, pos, buf, len);
+
intel_io_lock();
outl(0x80000000 | ((d->bus & 0xff) << 16) | (PCI_DEVFN(d->dev, d->func) << 8) | (pos&~3), 0xcf8);
@@ -181,8 +185,6 @@ conf1_write(struct pci_dev *d, int pos, byte *buf, int len)
case 4:
outl(le32_to_cpu(((u32 *) buf)[0]), addr);
break;
- default:
- res = pci_generic_block_write(d, pos, buf, len);
}
intel_io_unlock();
return res;
@@ -228,6 +230,9 @@ conf2_read(struct pci_dev *d, int pos, byte *buf, int len)
/* conf2 supports only 16 devices per bus */
return 0;
+ if (len != 1 && len != 2 && len != 4)
+ return pci_generic_block_read(d, pos, buf, len);
+
intel_io_lock();
outb((d->func << 1) | 0xf0, 0xcf8);
outb(d->bus, 0xcfa);
@@ -242,8 +247,6 @@ conf2_read(struct pci_dev *d, int pos, byte *buf, int len)
case 4:
((u32 *) buf)[0] = cpu_to_le32(inl(addr));
break;
- default:
- res = pci_generic_block_read(d, pos, buf, len);
}
outb(0, 0xcf8);
intel_io_unlock();
@@ -263,6 +266,9 @@ conf2_write(struct pci_dev *d, int pos, byte *buf, int len)
/* conf2 supports only 16 devices per bus */
return 0;
+ if (len != 1 && len != 2 && len != 4)
+ return pci_generic_block_write(d, pos, buf, len);
+
intel_io_lock();
outb((d->func << 1) | 0xf0, 0xcf8);
outb(d->bus, 0xcfa);
@@ -277,8 +283,6 @@ conf2_write(struct pci_dev *d, int pos, byte *buf, int len)
case 4:
outl(le32_to_cpu(* (u32 *) buf), addr);
break;
- default:
- res = pci_generic_block_write(d, pos, buf, len);
}
outb(0, 0xcf8);
diff --git a/lib/win32-cfgmgr32.c b/lib/win32-cfgmgr32.c
index 004f95f..a3404d1 100644
--- a/lib/win32-cfgmgr32.c
+++ b/lib/win32-cfgmgr32.c
@@ -126,7 +126,7 @@ resolve_cfgmgr32_functions(void)
* cfgmgr32.dll uses custom non-Win32 error numbers which are unsupported by
* Win32 APIs like GetLastError() and FormatMessage() functions.
*
- * Windows 7 instroduced new cfgmgr32.dll function CM_MapCrToWin32Err() for
+ * Windows 7 introduced new cfgmgr32.dll function CM_MapCrToWin32Err() for
* translating mapping CR_* errors to Win32 errors but most error codes are
* not mapped. So this function is unusable.
*
@@ -498,18 +498,28 @@ retry_service_config:
service_image_path[systemroot_len++] = L'\\';
wcscpy(service_image_path + systemroot_len, service_config->lpBinaryPathName + sizeof("\\SystemRoot\\")-1);
}
- else if (wcsncmp(service_config->lpBinaryPathName, L"\\??\\UNC\\", sizeof("\\??\\UNC\\")-1) == 0)
+ else if (wcsncmp(service_config->lpBinaryPathName, L"\\??\\UNC\\", sizeof("\\??\\UNC\\")-1) == 0 ||
+ wcsncmp(service_config->lpBinaryPathName, L"\\??\\\\UNC\\", sizeof("\\??\\\\UNC\\")-1) == 0)
{
/* ImagePath is in NT UNC namespace, convert to Win32 UNC path via "\\\\" prefix. */
service_image_path = pci_malloc(a, sizeof(WCHAR) * (sizeof("\\\\") + wcslen(service_config->lpBinaryPathName) - (sizeof("\\??\\UNC\\")-1)));
+ /* Namespace separator may be single or double backslash. */
+ driver_path_len = sizeof("\\??\\")-1;
+ if (service_config->lpBinaryPathName[driver_path_len] == L'\\')
+ driver_path_len++;
+ driver_path_len += sizeof("UNC\\")-1;
wcscpy(service_image_path, L"\\\\");
- wcscpy(service_image_path + sizeof("\\\\")-1, service_config->lpBinaryPathName + sizeof("\\??\\UNC\\")-1);
+ wcscpy(service_image_path + sizeof("\\\\")-1, service_config->lpBinaryPathName + driver_path_len);
}
else if (wcsncmp(service_config->lpBinaryPathName, L"\\??\\", sizeof("\\??\\")-1) == 0)
{
/* ImagePath is in NT Global?? namespace, root of the Win32 file namespace, so just remove "\\??\\" prefix to get Win32 path. */
service_image_path = pci_malloc(a, sizeof(WCHAR) * (wcslen(service_config->lpBinaryPathName) - (sizeof("\\??\\")-1)));
- wcscpy(service_image_path, service_config->lpBinaryPathName + sizeof("\\??\\")-1);
+ /* Namespace separator may be single or double backslash. */
+ driver_path_len = sizeof("\\??\\")-1;
+ if (service_config->lpBinaryPathName[driver_path_len] == L'\\')
+ driver_path_len++;
+ wcscpy(service_image_path, service_config->lpBinaryPathName + driver_path_len);
}
else if (service_config->lpBinaryPathName[0] != L'\\')
{
diff --git a/lib/dllrsrc.rc.in b/lib/winrsrc.rc.in
index 519772b..e061bff 100644
--- a/lib/dllrsrc.rc.in
+++ b/lib/winrsrc.rc.in
@@ -9,7 +9,11 @@ FILEFLAGS VS_FF_DEBUG
FILEFLAGS 0
#endif
FILEOS VOS_NT_WINDOWS32
+#if @LIBRARY_BUILD@
FILETYPE VFT_DLL
+#else
+FILETYPE VFT_APP
+#endif
FILESUBTYPE 0
BEGIN
BLOCK "StringFileInfo"
@@ -20,16 +24,16 @@ BEGIN
*/
BLOCK "040904B0" /* Default U.S. English language, UNICODE/UTF-16 codepage */
BEGIN
- VALUE "FileDescription", "libpci"
+ VALUE "FileDescription", "@DESCRIPTION@"
VALUE "FileVersion", "@PCILIB_VERSION@"
- VALUE "InternalName", "@PCILIB@"
- VALUE "OriginalFilename", "@PCILIB@"
+ VALUE "InternalName", "@FILENAME@"
+ VALUE "OriginalFilename", "@FILENAME@"
VALUE "ProductName", "pciutils"
VALUE "ProductVersion", "@PCILIB_VERSION@"
END
END
BLOCK "VarFileInfo"
BEGIN
- VALUE "Translation", 0x0409, 0x004B0 /* Default U.S. English language, UNICODE/UTF-16 codepage */
+ VALUE "Translation", 0x0409, 0x04B0 /* Default U.S. English language, UNICODE/UTF-16 codepage */
END
END