gpt: generalize validator for GPT partition labels
This adds a proper validator function. No change in behaviour, just some minor refactoring (this should be useful elsewhere later on though)
This commit is contained in:
committed by
Yu Watanabe
parent
30cdcd628b
commit
22a0a36efa
@@ -960,7 +960,6 @@ static int config_parse_label(
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
_cleanup_free_ char16_t *recoded = NULL;
|
||||
_cleanup_free_ char *resolved = NULL;
|
||||
char **label = data;
|
||||
int r;
|
||||
@@ -981,11 +980,14 @@ static int config_parse_label(
|
||||
return 0;
|
||||
}
|
||||
|
||||
recoded = utf8_to_utf16(resolved, strlen(resolved));
|
||||
if (!recoded)
|
||||
return log_oom();
|
||||
|
||||
if (char16_strlen(recoded) > 36) {
|
||||
r = gpt_partition_label_valid(resolved);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, r,
|
||||
"Failed to check if string is valid as GPT partition label, ignoring: \"%s\" (from \"%s\")",
|
||||
resolved, rvalue);
|
||||
return 0;
|
||||
}
|
||||
if (!r) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
"Partition label too long for GPT table, ignoring: \"%s\" (from \"%s\")",
|
||||
resolved, rvalue);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "gpt.h"
|
||||
#include "string-util.h"
|
||||
#include "utf8.h"
|
||||
|
||||
const GptPartitionType gpt_partition_type_table[] = {
|
||||
{ GPT_ROOT_X86, "root-x86" },
|
||||
@@ -95,3 +96,13 @@ int gpt_partition_type_uuid_from_string(const char *s, sd_id128_t *ret) {
|
||||
|
||||
return sd_id128_from_string(s, ret);
|
||||
}
|
||||
|
||||
int gpt_partition_label_valid(const char *s) {
|
||||
_cleanup_free_ char16_t *recoded = NULL;
|
||||
|
||||
recoded = utf8_to_utf16(s, strlen(s));
|
||||
if (!recoded)
|
||||
return -ENOMEM;
|
||||
|
||||
return char16_strlen(recoded) <= 36;
|
||||
}
|
||||
|
||||
@@ -126,3 +126,5 @@ typedef struct GptPartitionType {
|
||||
} GptPartitionType;
|
||||
|
||||
extern const GptPartitionType gpt_partition_type_table[];
|
||||
|
||||
int gpt_partition_label_valid(const char *s);
|
||||
|
||||
Reference in New Issue
Block a user