summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cleopatre/application/libspid/inc/path.h2
-rw-r--r--cleopatre/application/libspid/src/image.c18
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/image_utests.c34
3 files changed, 54 insertions, 0 deletions
diff --git a/cleopatre/application/libspid/inc/path.h b/cleopatre/application/libspid/inc/path.h
index 2f27017c3d..ed75052b2d 100644
--- a/cleopatre/application/libspid/inc/path.h
+++ b/cleopatre/application/libspid/inc/path.h
@@ -34,6 +34,7 @@
#define LIBSPID_SYSTEM_MTD_PATH "/proc/mtd"
#define LIBSPID_FACTORY_PATH "/factory"
#define LIBSPID_DEV_PATH "/dev"
+ #define LIBSPID_CUR_IMG_PROC_PATH "/proc/spidimg/current_img_slot"
#else /* unitary tests paths */
@@ -53,6 +54,7 @@
#define LIBSPID_SYSTEM_MTD_PATH "/tmp/utests/proc/mtd"
#define LIBSPID_FACTORY_PATH "/tmp/utests/factory"
#define LIBSPID_DEV_PATH "/tmp/utests/dev"
+ #define LIBSPID_CUR_IMG_PROC_PATH "/tmp/utests/proc/spidimg/current_img_slot"
#endif
diff --git a/cleopatre/application/libspid/src/image.c b/cleopatre/application/libspid/src/image.c
index 4970a21983..e6dc0e3a65 100644
--- a/cleopatre/application/libspid/src/image.c
+++ b/cleopatre/application/libspid/src/image.c
@@ -151,6 +151,24 @@ libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_i
case LIBSPID_IMAGE_DESC_TYPE_CURRENT:
case LIBSPID_IMAGE_DESC_TYPE_ALTERNATE:
+ if ((fp = fopen (LIBSPID_CUR_IMG_PROC_PATH, "r")) != NULL)
+ {
+ memset (line_buffer, 0, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (fgets (line_buffer, LIBSPID_CONFIG_LINE_MAX_LEN - 1, fp) != NULL)
+ {
+ found_index = atoi (line_buffer);
+ if (found_index >= 0 && found_index <= 1)
+ {
+ /* give alternate index if asked */
+ if (type == LIBSPID_IMAGE_DESC_TYPE_ALTERNATE)
+ {
+ found_index = (found_index + 1) % 2;
+ }
+ break;
+ }
+ }
+ }
+
/* check image validity */
if ( nvram.nb_images == 1 )
{
diff --git a/cleopatre/devkit/tests/libspid/utests/src/image_utests.c b/cleopatre/devkit/tests/libspid/utests/src/image_utests.c
index 906afa5a60..dca2ea55b2 100644
--- a/cleopatre/devkit/tests/libspid/utests/src/image_utests.c
+++ b/cleopatre/devkit/tests/libspid/utests/src/image_utests.c
@@ -101,6 +101,14 @@ void setup(void)
exit(EXIT_FAILURE);
}
+ sprintf(buf, "%s/proc/spidimg", UTESTS_TMP_DIR);
+ ret = mkdir(buf, 0770);
+ if (ret < 0 && errno != EEXIST)
+ {
+ perror("mkdir(UTESTS_TMP_DIR/proc/spidimg, 0770)");
+ exit(EXIT_FAILURE);
+ }
+
sprintf(buf, "%s/local", UTESTS_TMP_DIR);
ret = mkdir(buf, 0770);
if (ret < 0 && errno != EEXIST)
@@ -267,6 +275,32 @@ START_TEST (test_libspid_image_get_desc)
fail_if(ret != LIBSPID_SUCCESS, "libspid_image_get_desc fail");
fail_if(image_desc.index != 1, "libspid_image_get_desc gets wrong index");
fail_if( strcmp(image_desc.description, "SPiDCOM image") != 0, "libspid_image_get_desc gets wrong description");
+
+ /* Image slot read from /proc */
+ system ("echo -1 > " LIBSPID_CUR_IMG_PROC_PATH);
+ type = LIBSPID_IMAGE_DESC_TYPE_CURRENT;
+ ret = libspid_image_get_desc(type, &image_desc, mtd_name);
+ fail_if(ret != LIBSPID_SUCCESS, "libspid_image_get_desc fail");
+ fail_if(image_desc.index != 2, "libspid_image_get_desc gets wrong index");
+
+ system ("echo 0 > " LIBSPID_CUR_IMG_PROC_PATH);
+ type = LIBSPID_IMAGE_DESC_TYPE_CURRENT;
+ ret = libspid_image_get_desc(type, &image_desc, mtd_name);
+ fail_if(ret != LIBSPID_SUCCESS, "libspid_image_get_desc fail");
+ fail_if(image_desc.index != 1, "libspid_image_get_desc gets wrong index");
+
+ system ("echo 1 > " LIBSPID_CUR_IMG_PROC_PATH);
+ type = LIBSPID_IMAGE_DESC_TYPE_CURRENT;
+ ret = libspid_image_get_desc(type, &image_desc, mtd_name);
+ fail_if(ret != LIBSPID_SUCCESS, "libspid_image_get_desc fail");
+ fail_if(image_desc.index != 2, "libspid_image_get_desc gets wrong index");
+
+ system ("echo 2 > " LIBSPID_CUR_IMG_PROC_PATH);
+ type = LIBSPID_IMAGE_DESC_TYPE_CURRENT;
+ ret = libspid_image_get_desc(type, &image_desc, mtd_name);
+ fail_if(ret != LIBSPID_SUCCESS, "libspid_image_get_desc fail");
+ fail_if(image_desc.index != 2, "libspid_image_get_desc gets wrong index");
+
}
END_TEST