diff options
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r-- | winsup/cygwin/path.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index c9f9b4af4..15194e937 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -436,6 +436,7 @@ const char *windows_device_names[] = "\\dev\\st%d", "nul", "\\dev\\zero", + "\\dev\\%srandom", }; static int @@ -500,6 +501,11 @@ get_device_number (const char *name, int &unit, BOOL from_conv) devn = FH_NULL; else if (deveq ("zero")) devn = FH_ZERO; + else if (deveq ("random") || deveq ("urandom")) + { + devn = FH_RANDOM; + unit = 8 + (deveqn ("u", 1) ? 1 : 0); /* Keep unit Linux conformant */ + } else if (deveqn ("com", 3) && (unit = digits (name + 3)) >= 0) devn = FH_SERIAL; else if (deveq ("pipe") || deveq ("piper") || deveq ("pipew")) @@ -535,7 +541,10 @@ win32_device_name (const char *src_path, char *win32_path, if ((devfmt = windows_device_names[FHDEVN (devn)]) == NULL) return FALSE; - __small_sprintf (win32_path, devfmt, unit); + if (devn == FH_RANDOM) + __small_sprintf (win32_path, devfmt, unit == 8 ? "" : "u"); + else + __small_sprintf (win32_path, devfmt, unit); return TRUE; } |