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>
This commit is contained in:
Christian Franke 2023-11-08 17:03:57 +01:00 committed by Corinna Vinschen
parent 7236f22f71
commit 7863c07a92
1 changed files with 20 additions and 14 deletions

View File

@ -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.