mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
regedit: add padding to fit REG_MULTI_SZ to the text field
This fixes a bug loading REG_MULTI_SZ values into the editor dialog, since ncurses fields don't handle newline characters. Signed-off-by: Chris Davis <cd.rattan@gmail.com> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
This commit is contained in:
parent
c94c765f01
commit
42df2e643f
@ -642,22 +642,35 @@ static WERROR fill_value_buffer(struct edit_dialog *edit,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case REG_MULTI_SZ: {
|
case REG_MULTI_SZ: {
|
||||||
const char **p, **a;
|
int rows, cols, max;
|
||||||
|
size_t padding, length, index;
|
||||||
|
const char **array, **arrayp;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
|
|
||||||
if (!pull_reg_multi_sz(edit, &vitem->data, &a)) {
|
dynamic_field_info(edit->field[FLD_DATA], &rows, &cols, &max);
|
||||||
|
if (!pull_reg_multi_sz(edit, &vitem->data, &array)) {
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
}
|
}
|
||||||
for (p = a; *p != NULL; ++p) {
|
|
||||||
if (buf == NULL) {
|
/* try to fit each string on it's own line. each line
|
||||||
buf = talloc_asprintf(edit, "%s\n", *p);
|
needs to be padded with whitespace manually, since
|
||||||
} else {
|
ncurses fields do not have newlines. */
|
||||||
buf = talloc_asprintf_append(buf, "%s\n", *p);
|
for (index = 0, arrayp = array; *arrayp != NULL; ++arrayp) {
|
||||||
}
|
length = MIN(strlen(*arrayp), cols);
|
||||||
|
padding = cols - length;
|
||||||
|
buf = talloc_realloc(edit, buf, char,
|
||||||
|
talloc_array_length(buf) +
|
||||||
|
length + padding + 1);
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
return WERR_NOMEM;
|
return WERR_NOMEM;
|
||||||
}
|
}
|
||||||
|
memcpy(&buf[index], *arrayp, length);
|
||||||
|
index += length;
|
||||||
|
memset(&buf[index], ' ', padding);
|
||||||
|
index += padding;
|
||||||
|
buf[index] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
set_field_buffer(edit->field[FLD_DATA], 0, buf);
|
set_field_buffer(edit->field[FLD_DATA], 0, buf);
|
||||||
talloc_free(buf);
|
talloc_free(buf);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user