Commit ad20d34e authored by Andrzej Puzdrowski's avatar Andrzej Puzdrowski Committed by Anas Nashif
Browse files

settings: fix fcb record size for unaligned sizes



settings_line_len_calc() is used to determine key-value record size.
It unnecessary aligned this size to write-block-size.

Record size in flash layout is actually adjusted independently by
fcb itself and setting settings_line_write().

Patch fixes this behavior.

fixes #12967

Signed-off-by: default avatarAndrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
parent e31c77dc
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -263,7 +263,7 @@ int settings_next_line_ctx(struct line_entry_ctx *entry_ctx)

int settings_line_len_calc(const char *name, size_t val_len)
{
	int len, mod;
	int len;

#ifdef CONFIG_SETTINGS_USE_BASE64
	/* <enc(value)> */
@@ -274,11 +274,7 @@ int settings_line_len_calc(const char *name, size_t val_len)
#endif
	/* <name>=<enc(value)> */
	len += strlen(name) + 1;
	mod = len % settings_io_cb.rwbs;
	if (mod) {
		 /*additional \0 for meet flash alignment */
		len += settings_io_cb.rwbs - mod;
	}

	return len;
}

+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ void settings_line_io_init(int (*read_cb)(void *ctx, off_t off, char *buf,
int settings_line_write(const char *name, const char *value, size_t val_len,
			off_t w_loc, void *cb_arg);

/* Get len of record without alignment to write-block-size */
int settings_line_len_calc(const char *name, size_t val_len);

#ifdef CONFIG_SETTINGS_ENCODE_LEN