diff options
author | Christian Franke <christian.franke@t-online.de> | 2023-11-08 17:03:57 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2023-11-08 20:28:44 +0100 |
commit | 7863c07a9282b7aed358c5783976296adfa63505 (patch) | |
tree | 09ceae7e206f7eba8c89ef98cf98b539b443829e | |
parent | 7236f22f713a923759ec7a98b4572c1910beb730 (diff) | |
download | newlib-7863c07a9282b7aed358c5783976296adfa63505.zip newlib-7863c07a9282b7aed358c5783976296adfa63505.tar.gz newlib-7863c07a9282b7aed358c5783976296adfa63505.tar.bz2 |
Cygwin: /dev/disk/by-id: Remove leading spaces from identify fields
Various drives align the serial number to the right of the fixed
length field.
Signed-off-by: Christian Franke <christian.franke@t-online.de>
-rw-r--r-- | winsup/cygwin/fhandler/dev_disk.cc | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/winsup/cygwin/fhandler/dev_disk.cc b/winsup/cygwin/fhandler/dev_disk.cc index fcd0de6..11b2404 100644 --- a/winsup/cygwin/fhandler/dev_disk.cc +++ b/winsup/cygwin/fhandler/dev_disk.cc @@ -14,27 +14,33 @@ details. */ #include <wctype.h> #include <winioctl.h> -/* Replace non-printing and unexpected characters, remove trailing spaces, - return remaining string length. */ +/* Replace spaces, non-printing and unexpected characters. Remove + leading and trailing spaces. Return remaining string length. */ static int sanitize_id_string (char *s) { - int lastspace = -1, i; - for (i = 0; s[i]; i++) + int first = 0; + while (s[first] == ' ') + first++; + int last = -1, i; + for (i = 0; s[first + i]; i++) { - char c = s[i]; + char c = s[first + i]; if (c != ' ') - lastspace = -1; - else if (lastspace < 0) - lastspace = i; - if (('0' <= c && c <= '9') || c == '.' || c == '-' - || ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) + last = -1; + else if (last < 0) + last = i; + if (!(('0' <= c && c <= '9') || c == '.' || c == '-' + || ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'))) + c = '_'; + else if (!first) continue; - s[i] = '_'; + s[i] = c; } - if (lastspace >= 0) - s[(i = lastspace)] = '\0'; - return i; + if (last < 0) + last = i; + s[last] = '\0'; + return last; } /* Fetch storage properties and create the ID string. |