mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Add uuid support to extfs.
This commit is contained in:
parent
f6b1056de8
commit
572481098a
1 changed files with 76 additions and 1 deletions
|
@ -1202,6 +1202,66 @@ int ext2_fuse_utimens(const char* path, const struct timespec tv[2])
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool is_hex_digit(char c)
|
||||||
|
{
|
||||||
|
return ('0' <= c && c <= '9') ||
|
||||||
|
('a' <= c && c <= 'f') ||
|
||||||
|
('A' <= c && c <= 'F');
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool is_valid_uuid(const char* uuid)
|
||||||
|
{
|
||||||
|
if ( strlen(uuid) != 36 )
|
||||||
|
return false;
|
||||||
|
// Format: 01234567-0123-0123-0123-0123456789AB
|
||||||
|
for ( size_t i = 0; i < 36; i++ )
|
||||||
|
{
|
||||||
|
if ( i == 8 || i == 13 || i == 18 || i == 23 )
|
||||||
|
{
|
||||||
|
if ( uuid[i] != '-' )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( !is_hex_digit(uuid[i]) )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned char debase(char c)
|
||||||
|
{
|
||||||
|
if ( '0' <= c && c <= '9' )
|
||||||
|
return (unsigned char) (c - '0');
|
||||||
|
if ( 'a' <= c && c <= 'f' )
|
||||||
|
return (unsigned char) (c - 'a' + 10);
|
||||||
|
if ( 'A' <= c && c <= 'F' )
|
||||||
|
return (unsigned char) (c - 'A' + 10);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void uuid_from_string(uint8_t uuid[16], const char* string)
|
||||||
|
{
|
||||||
|
assert(is_valid_uuid(string));
|
||||||
|
size_t output_index = 0;
|
||||||
|
size_t i = 0;
|
||||||
|
while ( i < 36 )
|
||||||
|
{
|
||||||
|
assert(string[i + 0] != '\0');
|
||||||
|
if ( i == 8 || i == 13 || i == 18 || i == 23 )
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
assert(string[i + 1] != '\0');
|
||||||
|
uuid[output_index++] = debase(string[i + 0]) << 4 |
|
||||||
|
debase(string[i + 1]) << 0;
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
assert(string[i] == '\0');
|
||||||
|
}
|
||||||
|
|
||||||
void compact_arguments(int* argc, char*** argv)
|
void compact_arguments(int* argc, char*** argv)
|
||||||
{
|
{
|
||||||
for ( int i = 0; i < *argc; i++ )
|
for ( int i = 0; i < *argc; i++ )
|
||||||
|
@ -1332,7 +1392,22 @@ int main(int argc, char* argv[])
|
||||||
// Test whether this was the filesystem the user was looking for.
|
// Test whether this was the filesystem the user was looking for.
|
||||||
if ( test_uuid )
|
if ( test_uuid )
|
||||||
{
|
{
|
||||||
// TODO: Test uuid!
|
if ( !is_valid_uuid(test_uuid) )
|
||||||
|
{
|
||||||
|
if ( !probe )
|
||||||
|
error(1, 0, "`%s' isn't a valid uuid", test_uuid);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t uuid[16];
|
||||||
|
uuid_from_string(uuid, test_uuid);
|
||||||
|
|
||||||
|
if ( memcmp(sb.s_uuid, uuid, 16) != 0 )
|
||||||
|
{
|
||||||
|
if ( !probe )
|
||||||
|
error(1, 0, "uuid `%s' did not match the ext2 filesystem at `%s'", test_uuid, device_path);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test whether this revision of the extended filesystem is supported.
|
// Test whether this revision of the extended filesystem is supported.
|
||||||
|
|
Loading…
Reference in a new issue