mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04:00
media-session: escape and unescape keys when saving
So that we can allow space in the keys.
This commit is contained in:
parent
de71618b99
commit
d337abf690
1 changed files with 22 additions and 9 deletions
|
|
@ -1799,16 +1799,22 @@ int sm_media_session_load_state(struct sm_media_session *sess,
|
||||||
}
|
}
|
||||||
f = fdopen(fd, "r");
|
f = fdopen(fd, "r");
|
||||||
while (fgets(line, sizeof(line)-1, f)) {
|
while (fgets(line, sizeof(line)-1, f)) {
|
||||||
char *val, *k;
|
char *val, *key, *k, *p;
|
||||||
val = strrchr(line, '\n');
|
val = strrchr(line, '\n');
|
||||||
if (val)
|
if (val)
|
||||||
*val = '\0';
|
*val = '\0';
|
||||||
val = strchr(line, ' ');
|
|
||||||
if (val == NULL)
|
key = k = p = line;
|
||||||
continue;
|
while (*p) {
|
||||||
k = val + 1;
|
if (*p == ' ')
|
||||||
*val = '\0';
|
break;
|
||||||
count += pw_properties_set(props, line, k);
|
if (*p == '\\')
|
||||||
|
p++;
|
||||||
|
*k++ = *p++;
|
||||||
|
}
|
||||||
|
*k = '\0';
|
||||||
|
val = ++p;
|
||||||
|
count += pw_properties_set(props, key, val);
|
||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return count;
|
return count;
|
||||||
|
|
@ -1834,8 +1840,15 @@ int sm_media_session_save_state(struct sm_media_session *sess,
|
||||||
}
|
}
|
||||||
|
|
||||||
f = fdopen(fd, "w");
|
f = fdopen(fd, "w");
|
||||||
spa_dict_for_each(it, &props->dict)
|
spa_dict_for_each(it, &props->dict) {
|
||||||
fprintf(f, "%s %s\n", it->key, it->value);
|
const char *p = it->key;
|
||||||
|
while (*p) {
|
||||||
|
if (*p == ' ' || *p == '\\')
|
||||||
|
fputc('\\', f);
|
||||||
|
fprintf(f, "%c", *p++);
|
||||||
|
}
|
||||||
|
fprintf(f, " %s\n", it->value);
|
||||||
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
if (renameat(sfd, tmp_name, sfd, name) < 0) {
|
if (renameat(sfd, tmp_name, sfd, name) < 0) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue