From: Bernd Moessner <berndmoessne...@gmail.com> In addition to that update the test case
Updates #4981 --- cpukit/dev/flash/flashdev.c | 12 ++++++++++ cpukit/include/dev/flash/flashdev.h | 14 +++++++++++ testsuites/libtests/flashdev01/init.c | 15 ++++++++++-- .../libtests/flashdev01/test_flashdev.c | 24 +++++++++++++++++++ .../libtests/flashdev01/test_flashdev.h | 2 ++ 5 files changed, 65 insertions(+), 2 deletions(-) diff --git a/cpukit/dev/flash/flashdev.c b/cpukit/dev/flash/flashdev.c index b908e87023..37d42955eb 100644 --- a/cpukit/dev/flash/flashdev.c +++ b/cpukit/dev/flash/flashdev.c @@ -484,6 +484,18 @@ int rtems_flashdev_register( return rv; } +int rtems_flashdev_deregister( + const char *flash_path +) +{ + rtems_filesystem_eval_path_context_t ctx; + int eval_flags = RTEMS_FS_FOLLOW_LINK; + const rtems_filesystem_location_info_t *currentloc = + rtems_filesystem_eval_path_start( &ctx , flash_path, eval_flags ); + + return IMFS_rmnod(NULL, currentloc); +} + static int rtems_flashdev_do_init( rtems_flashdev *flash, void ( *destroy )( rtems_flashdev *flash ) diff --git a/cpukit/include/dev/flash/flashdev.h b/cpukit/include/dev/flash/flashdev.h index 6244d38e3a..51e0486148 100644 --- a/cpukit/include/dev/flash/flashdev.h +++ b/cpukit/include/dev/flash/flashdev.h @@ -441,6 +441,20 @@ int rtems_flashdev_register( const char *flash_path ); +/** + * @brief Deregister the flash device. + * + * This function removes the node allocated for the flash device. + * + * @param[in] flash_path The path to the flash device file. + * + * @retval 0 Successful operation. + * @retval non-zero Failed operation. + */ +int rtems_flashdev_deregister( + const char *flash_path +); + /** * @brief Destroys the flash device. * diff --git a/testsuites/libtests/flashdev01/init.c b/testsuites/libtests/flashdev01/init.c index 30af3f33c1..48cb033c04 100644 --- a/testsuites/libtests/flashdev01/init.c +++ b/testsuites/libtests/flashdev01/init.c @@ -60,17 +60,18 @@ static void run_test(void) { int page_count; int type; size_t wb_size; + const char flash_path[] = "/dev/flashdev0"; /* Initalize the flash device driver and flashdev */ flash = test_flashdev_init(); rtems_test_assert(flash != NULL); /* Register the flashdev as a device */ - status = rtems_flashdev_register(flash, "dev/flashdev0"); + status = rtems_flashdev_register(flash, flash_path); rtems_test_assert(!status); /* Open the flashdev */ - file = fopen("dev/flashdev0", "r+"); + file = fopen(flash_path, "r+"); rtems_test_assert(file != NULL); fd = fileno(file); @@ -159,6 +160,16 @@ static void run_test(void) { fseek(file, 0x400, SEEK_SET); fgets(buff, 11, file); rtems_test_assert(strncmp(buff, "HELLO WORLD", 11)); + + /* Close the file handle */ + status = fclose(file); + rtems_test_assert(!status); + + /* Deregister path */ + status = rtems_flashdev_deregister(flash_path); + rtems_test_assert(!status); + + test_flashdev_deinit(flash); } static void Init(rtems_task_argument arg) diff --git a/testsuites/libtests/flashdev01/test_flashdev.c b/testsuites/libtests/flashdev01/test_flashdev.c index d97f5d8145..9e257863b1 100644 --- a/testsuites/libtests/flashdev01/test_flashdev.c +++ b/testsuites/libtests/flashdev01/test_flashdev.c @@ -273,3 +273,27 @@ rtems_flashdev* test_flashdev_init(void) return flash; } + +/* Free Flashdev and underlying driver. */ +void test_flashdev_deinit( + rtems_flashdev* flash +) +{ + if (NULL != flash) + { + if (NULL != flash->driver) + { + free(flash->region_table); + } + if (NULL != flash->driver) + { + test_flashdev* flash_driver = (test_flashdev*) flash->driver; + if (NULL != flash_driver->data) + { + free( flash_driver->data); + } + free(flash->driver); + } + rtems_flashdev_destroy_and_free(flash); + } +} diff --git a/testsuites/libtests/flashdev01/test_flashdev.h b/testsuites/libtests/flashdev01/test_flashdev.h index 8b03959c42..894c5d3747 100644 --- a/testsuites/libtests/flashdev01/test_flashdev.h +++ b/testsuites/libtests/flashdev01/test_flashdev.h @@ -32,4 +32,6 @@ rtems_flashdev* test_flashdev_init(void); +void test_flashdev_deinit(rtems_flashdev* flash); + #endif /* __TEST_FLASHDEV_H */ -- 2.34.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel