[PATCH 3/9] state: backend_raw: remove hard coded limit of two copies

Marc Kleine-Budde mkl at pengutronix.de
Tue May 26 04:37:47 PDT 2015


Although there is the define RAW_BACKEND_COPIES, the state_backend_raw_save()
function silently assumes exactly two copies. This patch removes that assumtion
by looping over all copies, but saving the one we're read from at the end.

Signed-off-by: Marc Kleine-Budde <mkl at pengutronix.de>
---
 common/state.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/common/state.c b/common/state.c
index 82a21e912206..79e7f4cc6849 100644
--- a/common/state.c
+++ b/common/state.c
@@ -1167,7 +1167,7 @@ static int state_backend_raw_save(struct state_backend *backend,
 {
 	struct state_backend_raw *backend_raw = container_of(backend,
 			struct state_backend_raw, backend);
-	int ret = 0, size, fd;
+	int ret = 0, size, fd, i;
 	void *buf, *data;
 	struct backend_raw_header *header;
 	struct state_variable *sv;
@@ -1192,10 +1192,17 @@ static int state_backend_raw_save(struct state_backend *backend,
 	if (fd < 0)
 		goto out_free;
 
-	ret = backend_raw_write_one(backend_raw, state, fd,
-				    !backend_raw->num_copy_read, buf, size);
-	if (ret)
-		goto out_close;
+	/* save other slots first */
+	for (i = 0; i < RAW_BACKEND_COPIES; i++) {
+		if (i == backend_raw->num_copy_read)
+			continue;
+
+		ret = backend_raw_write_one(backend_raw, state, fd,
+					    i, buf, size);
+		if (ret)
+			goto out_close;
+
+	}
 
 	ret = backend_raw_write_one(backend_raw, state, fd,
 				    backend_raw->num_copy_read, buf, size);
-- 
2.1.4




More information about the barebox mailing list