Don't just assume everything is a Dos Device, or mirc will not get any
DCC sends.
diff --git a/files/dos_fs.c b/files/dos_fs.c
index 6c5ac79..0d8e794 100644
--- a/files/dos_fs.c
+++ b/files/dos_fs.c
@@ -2183,11 +2183,28 @@
memcpy( target, devices, min(bufsize,sizeof(devices)) );
return min(bufsize,sizeof(devices));
}
- strcpy(buffer,"\\DEV\\");
- strcat(buffer,devname);
- if ((s=strchr(buffer,':'))) *s='\0';
- lstrcpynA(target,buffer,bufsize);
- return strlen(buffer)+1;
+ /* In theory all that are possible and have been defined.
+ * Now just those below, since mirc uses it to check for special files.
+ *
+ * (It is more complex, and supports netmounted stuff, and \\.\ stuff,
+ * but currently we just ignore that.)
+ */
+#define CHECK(x) (strstr(devname,#x)==devname)
+ if (CHECK(con) || CHECK(com) || CHECK(lpt) || CHECK(nul)) {
+ strcpy(buffer,"\\DEV\\");
+ strcat(buffer,devname);
+ if ((s=strchr(buffer,':'))) *s='\0';
+ lstrcpynA(target,buffer,bufsize);
+ return strlen(buffer)+1;
+ } else {
+ if (strchr(devname,':') || devname[0]=='\\') {
+ /* This might be a DOS device we do not handle yet ... */
+ FIXME("(%s) not detected as DOS device!\n",devname);
+ }
+ SetLastError(ERROR_DEV_NOT_EXIST);
+ return 0;
+ }
+
}