From 7863c07a9282b7aed358c5783976296adfa63505 Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Wed, 8 Nov 2023 17:03:57 +0100 Subject: 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 --- winsup/cygwin/fhandler/dev_disk.cc | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'winsup') diff --git a/winsup/cygwin/fhandler/dev_disk.cc b/winsup/cygwin/fhandler/dev_disk.cc index fcd0de651..11b24042f 100644 --- a/winsup/cygwin/fhandler/dev_disk.cc +++ b/winsup/cygwin/fhandler/dev_disk.cc @@ -14,27 +14,33 @@ details. */ #include #include -/* 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. -- cgit v1.2.3