[PATCH 2/9] fsdosfsname01: New test

Joel Sherrill joel.sherrill at OARcorp.com
Fri May 31 14:02:58 UTC 2013


Ralf.. can you follow the pattern of the other filesystem tests?
That way this test can be run on other filesystems as needed
in the future.

Right now, I don't think we will but better to be on top of the
game while you remember what the code is. :)

--joel

On 5/31/2013 8:42 AM, Ralf Kirchner wrote:
> Test handling of file names and directory names according to Microsofts
> specification for the FAT file system. So far tested only for the
> default character set (code page 850).
> ---
>   testsuites/fstests/Makefile.am                     |    1 +
>   testsuites/fstests/configure.ac                    |    1 +
>   testsuites/fstests/fsdosfsname01/Makefile.am       |   33 +
>   testsuites/fstests/fsdosfsname01/fsdosfsname01.doc |   18 +
>   testsuites/fstests/fsdosfsname01/fsdosfsname01.scn |    2 +
>   testsuites/fstests/fsdosfsname01/init.c            |  635 ++++++++++++++++++++
>   6 Dateien geändert, 690 Zeilen hinzugefügt(+)
>   create mode 100644 testsuites/fstests/fsdosfsname01/Makefile.am
>   create mode 100644 testsuites/fstests/fsdosfsname01/fsdosfsname01.doc
>   create mode 100644 testsuites/fstests/fsdosfsname01/fsdosfsname01.scn
>   create mode 100644 testsuites/fstests/fsdosfsname01/init.c
>
> diff --git a/testsuites/fstests/Makefile.am b/testsuites/fstests/Makefile.am
> index f39055e..068bbd4 100644
> --- a/testsuites/fstests/Makefile.am
> +++ b/testsuites/fstests/Makefile.am
> @@ -1,6 +1,7 @@
>   ACLOCAL_AMFLAGS = -I ../aclocal
>
>   SUBDIRS =
> +SUBDIRS += fsdosfsname01
>   SUBDIRS += fsdosfswrite01
>   SUBDIRS += fsdosfsformat01
>   SUBDIRS += fsfseeko01
> diff --git a/testsuites/fstests/configure.ac b/testsuites/fstests/configure.ac
> index 8985464..ec98454 100644
> --- a/testsuites/fstests/configure.ac
> +++ b/testsuites/fstests/configure.ac
> @@ -77,6 +77,7 @@ AC_CHECK_SIZEOF([blkcnt_t])
>
>   # Explicitly list all Makefiles here
>   AC_CONFIG_FILES([Makefile
> +fsdosfsname01/Makefile
>   fsdosfswrite01/Makefile
>   fsdosfsformat01/Makefile
>   fsfseeko01/Makefile
> diff --git a/testsuites/fstests/fsdosfsname01/Makefile.am b/testsuites/fstests/fsdosfsname01/Makefile.am
> new file mode 100644
> index 0000000..623f0e5
> --- /dev/null
> +++ b/testsuites/fstests/fsdosfsname01/Makefile.am
> @@ -0,0 +1,33 @@
> +rtems_tests_PROGRAMS = fsdosfsname01
> +fsdosfsname01_SOURCES = init.c \
> +  ../support/ramdisk_support.c
> +
> +#  ../mdosfs_support/fs_support.c
> +#
> +#  ../support/fstest_support.h
> +#  ../support/ramdisk_support.h
> +
> +dist_rtems_tests_DATA = fsdosfsname01.scn fsdosfsname01.doc
> +
> +#old_path = $(PATH)
> +#export PATH:=/scratch/install-gcc-4.6.3/bin:$(old_path)
> +#export PATH:=/scratch/install-gcc-4.6.3/bin:$(PATH)
> +
> +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
> +include $(top_srcdir)/../automake/compile.am
> +include $(top_srcdir)/../automake/leaf.am
> +
> +AM_CPPFLAGS += -I$(top_srcdir)/../support/include
> +AM_CPPFLAGS += -I$(top_srcdir)/support
> +#AM_CPPFLAGS += -I$(top_srcdir)/../psxtests/include
> +
> +LINK_OBJS = $(fsdosfsname01_OBJECTS)
> +LINK_LIBS = $(fsdosfsname01_LDLIBS)
> +
> +fsdosfsname01$(EXEEXT): $(fsdosfsname01_OBJECTS) $(fsdosfsname01_DEPENDENCIES)
> +       @echo old_path=$(old_path)
> +       @echo PATH=$(PATH)
> +       @rm -f fsdosfsname01$(EXEEXT)
> +       $(make-exe)
> +
> +include $(top_srcdir)/../automake/local.am
> diff --git a/testsuites/fstests/fsdosfsname01/fsdosfsname01.doc b/testsuites/fstests/fsdosfsname01/fsdosfsname01.doc
> new file mode 100644
> index 0000000..adf11d3
> --- /dev/null
> +++ b/testsuites/fstests/fsdosfsname01/fsdosfsname01.doc
> @@ -0,0 +1,18 @@
> +This file describes the directives and concepts tested by this test set.
> +
> +test set name: fsdosfsname01
> +
> +directives:
> +- close ()
> +- closedir ()
> +- mkdir ()
> +- mount ()
> +- open ()
> +- opendir ()
> +- readdir ()
> +- remove ()
> +- rmdir ()
> +- unlink ()
> +
> +concepts:
> +- Make sure short file- and directory names and long file- and directory names are handled correctly for the default character set (code page 850)
> diff --git a/testsuites/fstests/fsdosfsname01/fsdosfsname01.scn b/testsuites/fstests/fsdosfsname01/fsdosfsname01.scn
> new file mode 100644
> index 0000000..218ddf9
> --- /dev/null
> +++ b/testsuites/fstests/fsdosfsname01/fsdosfsname01.scn
> @@ -0,0 +1,2 @@
> +*** TEST fsdosfsname01 ***
> +*** END OF TEST fsdosfsname01 ***
> diff --git a/testsuites/fstests/fsdosfsname01/init.c b/testsuites/fstests/fsdosfsname01/init.c
> new file mode 100644
> index 0000000..260d955
> --- /dev/null
> +++ b/testsuites/fstests/fsdosfsname01/init.c
> @@ -0,0 +1,635 @@
> +/*
> + * Copyright (c) 2012, 2013 embedded brains GmbH.  All rights reserved.
> + *
> + *  embedded brains GmbH
> + *  Dornierstr. 4
> + *  82178 Puchheim
> + *  Germany
> + *  <rtems at embedded-brains.de>
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.com/license/LICENSE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +  #include "config.h"
> +#endif
> +
> +#include "tmacros.h"
> +
> +#include <fcntl.h>
> +#include <dirent.h>
> +
> +#include <bsp.h>
> +#include <rtems/io.h>
> +#include <rtems/libio.h>
> +#include <rtems/dosfs.h>
> +#include <rtems/ramdisk.h>
> +#include <rtems/libcsupport.h>
> +#include "ramdisk_support.h"
> +
> +#define MOUNT_DIR "/mnt"
> +#define MOUNT_DIR_SIZE 4
> +#define START_DIR_SIZE 4
> +
> +#define NUMBER_OF_DIRECTORIES 8
> +#define NUMBER_OF_FILES 13
> +#define NUMBER_OF_DIRECTORIES_INVALID 18
> +#define NUMBER_OF_DIRECTORIES_DUPLICATED 2
> +#define NUMBER_OF_FILES_DUPLICATED 2
> +#define MAX_NAME_LENGTH ( 255 + 1 )
> +#define MAX_NAME_LENGTH_INVALID ( 255 + 2 )
> +#define MAX_DUPLICATES_PER_NAME 3
> +
> +#define BLOCK_SIZE 512
> +
> +#define BLOCK_COUNT ( sizeof( image_bin ) / BLOCK_SIZE )
> +
> +static rtems_resource_snapshot            before_mount;
> +
> +static const msdos_format_request_param_t rqdata = {
> +  .OEMName             = "RTEMS",
> +  .VolLabel            = "RTEMSDisk",
> +  .sectors_per_cluster = 2,
> +  .fat_num             = 0,
> +  .files_per_root_dir  = 0,
> +  .media               = 0,
> +  .quick_format        = true,
> +  .skip_alignment      = 0,
> +  .info_level          = 0
> +};
> +
> +static const char                         DIRECTORY_NAMES[NUMBER_OF_DIRECTORIES]
> +[MAX_NAME_LENGTH] = {
> +  "a dir",
> +  "Shortdir",
> +  "shrtdir",
> +  "shrt.dir",
> +  "long_conventional_dir",
> +  "long_conventional.dir",
> +  "LongConventionalDir",
> +  "This is a directory name with with 255 characters. The following numbers are aligned in that way, that the character 0 is the mentioned one. xxxxxx150xxxxxxx160xxxxxxx170xxxxxxx180xxxxxxx190xxxxxxx200xxxxxxx210xxxxxxx220xxxxxxx230xxxxxxx240xxxxxxx250xxxxx"
> +};
> +
> +static const char DIRECTORY_NAMES_INVALID[
> +  NUMBER_OF_DIRECTORIES_INVALID][MAX_NAME_LENGTH_INVALID] = {
> +  "This is a directory name with with 256 characters. The following numbers are aligned in that way, that the character 0 is the mentioned one. xxxxxx150xxxxxxx160xxxxxxx170xxxxxxx180xxxxxxx190xxxxxxx200xxxxxxx210xxxxxxx220xxxxxxx230xxxxxxx240xxxxxxx250xxxxxx",
> +  ".",
> +  "..",
> +  "...",
> +  " ",
> +  "... ...",
> +  " ... ",
> +  "",
> +  "*",
> +  "/",
> +  ":",
> +  "<",
> +  ">",
> +  "?",
> +  "\\",
> +  "|",
> +  { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
> +    10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
> +    20, 21, 22, 23, 24, 25, 26, 17, 28, 29, 30, 31},
> +  {127}
> +};
> +
> +static const char FILE_NAMES[NUMBER_OF_FILES][
> +  MAX_NAME_LENGTH] = {
> +  "a file",
> +  "shrtfile",
> +  "ShrtFle",
> +  "The quick brown.fox",
> +  "long_conventional_file",
> +  "This is a filename with with 255 characters. The following numbers are aligned in that way, that the character 0 is the mentioned one. xx140xxxxxxx150xxxxxxx160xxxxxxx170xxxxxxx180xxxxxxx190xxxxxxx200xxxxxxx210xxxxxxx220xxxxxxx230xxxxxxx240xxxxxxx250xxxxx",
> +  "+",
> +  ",",
> +  "a.a",
> +  ";",
> +  "=",
> +  "[",
> +  "]"
> +};
> +
> +typedef struct {
> +  char name[MAX_NAME_LENGTH];
> +  unsigned int number_of_duplicates;
> +  char name_duplicates[MAX_DUPLICATES_PER_NAME][MAX_NAME_LENGTH];
> +} name_duplicates;
> +
> +static const name_duplicates DIRECTORY_DUPLICATES[
> +  NUMBER_OF_DIRECTORIES_DUPLICATED] = {
> +  {
> +    "shrtdir",
> +    3,
> +    {
> +      "shrtdir",
> +      "SHRTDIR",
> +      "Shrtdir"
> +    }
> +  },
> +  {
> +    "long_conventional_dir",
> +    3,
> +    {
> +      "long_conventional_dir",
> +      "LONG_CONVENTIONAL_DIR",
> +      "Long_conventional_dir"
> +    }
> +  }
> +};
> +
> +static const name_duplicates MULTIBYTE_DUPLICATES[
> +  NUMBER_OF_MULTIBYTE_NAMES_DUPLICATED] = {
> +  {
> +    /* The angstroem encoded differently. These encodings might become short entries */
> +    {0xc3, 0x85}, /* '̊A' */
> +    2,
> +    {
> +      {0xc3, 0x85}, /* '̊A' */
> +      {0xe2, 0x84, 0xab} /* 'Å' */
> +    }
> +  },
> +
> +  /* Again the angstroem encoded differently,
> +   * but this time with additional characters in order to enforce a long entry. */
> +  {
> +    {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', 0xc3,
> +     0x85},
> +    2,
> +    {
> +      {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', 0xc3,
> +       0x85},
> +      {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', 0xe2,
> +       0x84, 0xab}
> +    }
> +  }
> +};
> +
> +static const name_duplicates FILES_DUPLICATES[NUMBER_OF_FILES_DUPLICATED] = {
> +  {
> +    "shrtfile",
> +    3,
> +    {
> +      "shrtfile",
> +      "SHRTFILE",
> +      "Shrtfile"
> +    }
> +  },
> +  {
> +    "long_conventional_file",
> +    3,
> +    {
> +      "long_conventional_file",
> +      "LONG_CONVENTIONAL_FILE",
> +      "Long_conventional_file"
> +    }
> +  }
> +};
> +
> +static int path_is_directory( const char *path )
> +{
> +  struct stat s_buf;
> +
> +
> +  if ( stat( path, &s_buf ) )
> +    return 0;
> +
> +  return S_ISDIR( s_buf.st_mode );
> +}
> +
> +static void delete_folder_tree( const char *directory_name )
> +{
> +  DIR           *dp;
> +  struct dirent *ep;
> +  char           p_buf[1024] = {0};
> +  int            rc          = 0;
> +
> +
> +  dp = opendir( directory_name );
> +  rtems_test_assert( dp != NULL );
> +
> +  while ( ( ep = readdir( dp ) ) != NULL && rc == 0 ) {
> +    if ( 0 != strcmp( ".", ep->d_name )
> +         && 0 != strcmp( "..", ep->d_name ) ) {
> +      snprintf( p_buf, sizeof( p_buf ), "%s/%s", directory_name, ep->d_name );
> +
> +      if ( path_is_directory( p_buf ) ) {
> +        delete_folder_tree( p_buf );
> +        rc = rmdir( p_buf );
> +        rtems_test_assert( rc == 0 );
> +        rewinddir( dp );
> +      } else {
> +        rc = unlink( p_buf );
> +        rtems_test_assert( rc == 0 );
> +        rewinddir( dp );
> +      }
> +    }
> +  }
> +
> +  rc = closedir( dp );
> +  rtems_test_assert( rc == 0 );
> +}
> +
> +static void mount_device( const char *start_dir,
> +  const rtems_dosfs_mount_options    *mount_opts )
> +{
> +  int rc;
> +
> +  rc = mount(
> +    RAMDISK_PATH,
> +    MOUNT_DIR,
> +    "dosfs",
> +    RTEMS_FILESYSTEM_READ_WRITE,
> +    mount_opts );
> +  rtems_test_assert( rc == 0 );
> +
> +  if ( NULL == opendir( start_dir ) ) {
> +    rc = mkdir( start_dir, S_IRWXU | S_IRWXG | S_IRWXO );
> +    rtems_test_assert( rc == 0 );
> +  }
> +}
> +
> +static void mount_device_with_defaults( const char *start_dir )
> +{
> +  int rc;
> +
> +
> +  rc = msdos_format( RAMDISK_PATH, &rqdata );
> +  rtems_test_assert( rc == 0 );
> +
> +  rtems_resource_snapshot_take( &before_mount );
> +
> +  mount_device( start_dir, NULL );
> +}
> +
> +static void unmount_and_close_device( void )
> +{
> +  int                     rc;
> +  rtems_resource_snapshot now;
> +  bool                    are_resources_freed;
> +
> +
> +  delete_folder_tree( MOUNT_DIR );
> +
> +  rc = unmount( MOUNT_DIR );
> +  rtems_test_assert( rc == 0 );
> +
> +  are_resources_freed = rtems_resource_snapshot_check( &before_mount );
> +
> +  if ( !are_resources_freed )
> +    rtems_resource_snapshot_take( &now );
> +
> +  rtems_test_assert( are_resources_freed );
> +}
> +
> +/*
> + * Simply create a few directories. These tests should all succeed
> + */
> +static void test_creating_directories(
> +  const char        *start_dir,
> +  const char        *directories,
> +  const unsigned int number_of_directories )
> +{
> +  unsigned int   index;
> +  int            rc;
> +  char           dirname[MAX_NAME_LENGTH + strlen( start_dir ) + 1];
> +  DIR           *dirp;
> +  struct dirent *dp;
> +
> +
> +  for ( index = 0; index < number_of_directories; ++index ) {
> +    snprintf( dirname, sizeof( dirname ), "%s/%s", start_dir, directories
> +              + ( index * MAX_NAME_LENGTH ) );
> +    rc = mkdir( dirname, S_IRWXU | S_IRWXG | S_IRWXO );
> +    rtems_test_assert( rc == 0 );
> +  }
> +
> +  dirp = opendir( start_dir );
> +  rtems_test_assert( NULL != dirp );
> +
> +  index = 0;
> +  dp    = readdir( dirp );
> +  rtems_test_assert( dp != NULL );
> +  rtems_test_assert( 0 == strcmp( ".", dp->d_name ) );
> +
> +  dp = readdir( dirp );
> +  rtems_test_assert( dp != NULL );
> +  rtems_test_assert( 0 == strcmp( "..", dp->d_name ) );
> +
> +  dp = readdir( dirp );
> +  rtems_test_assert( dp != NULL );
> +
> +  while ( dp != NULL ) {
> +    rtems_test_assert( 0
> +                       == strcmp( directories + ( index * MAX_NAME_LENGTH ),
> +                                  dp->d_name ) );
> +    ++index;
> +    dp = readdir( dirp );
> +  }
> +
> +  rtems_test_assert( number_of_directories == index );
> +
> +  rc = closedir( dirp );
> +  rtems_test_assert( rc == 0 );
> +}
> +
> +/*
> + * Try creating directories with invalid names.
> + */
> +static void test_creating_invalid_directories( void )
> +{
> +  unsigned int index;
> +  int          rc;
> +  char         dirname[MAX_NAME_LENGTH_INVALID + MOUNT_DIR_SIZE + 1];
> +
> +
> +  for ( index = 0; index < NUMBER_OF_DIRECTORIES_INVALID; ++index ) {
> +    snprintf( dirname,
> +              sizeof( dirname ),
> +              "%s/%s",
> +              MOUNT_DIR,
> +              DIRECTORY_NAMES_INVALID[index] );
> +    rc = mkdir( dirname, S_IRWXU | S_IRWXG | S_IRWXO );
> +    rtems_test_assert( rc == -1 );
> +  }
> +}
> +
> +/*
> + * Try creating directories which do already exist
> + * (although names may have different capitalization/encoding)
> + */
> +static void test_creating_duplicate_directories(
> +  const char            *start_dir,
> +  const name_duplicates *duplicates,
> +  const unsigned int     number_of_duplicates )
> +{
> +  unsigned int index_dir;
> +  unsigned int index_duplicate;
> +  int          rc;
> +  char         dirname[MAX_NAME_LENGTH + MOUNT_DIR_SIZE + START_DIR_SIZE + 2];
> +
> +
> +  for ( index_dir = 0; index_dir < number_of_duplicates; ++index_dir ) {
> +    snprintf( dirname, sizeof( dirname ), "%s/%s", start_dir,
> +              duplicates[index_dir].name );
> +    rc = mkdir( dirname, S_IRWXU | S_IRWXG | S_IRWXO );
> +    rtems_test_assert( rc == 0 );
> +
> +    for ( index_duplicate = 0;
> +          index_duplicate < duplicates[index_dir].number_of_duplicates;
> +          ++index_duplicate ) {
> +      snprintf( dirname, sizeof( dirname ), "%s/%s", start_dir,
> +                duplicates[index_dir].name_duplicates[index_duplicate] );
> +      rc = mkdir( dirname, S_IRWXU | S_IRWXG | S_IRWXO );
> +      rtems_test_assert( rc < 0 );
> +    }
> +  }
> +}
> +
> +/*
> + * Try creating and opening files with valid names
> + */
> +static void test_handling_files(
> +  const char        *dirname,
> +  const char        *file_names,
> +  const unsigned int number_of_files )
> +{
> +  unsigned int index;
> +  int          rc;
> +  char         filename[MAX_NAME_LENGTH * 2 + MOUNT_DIR_SIZE + START_DIR_SIZE
> +                        + 4];
> +  int          fd;
> +
> +
> +  for ( index = 0; index < number_of_files; ++index ) {
> +    snprintf(
> +      filename,
> +      sizeof( filename ) - 1,
> +      "%s/%s",
> +      dirname,
> +      file_names + index * MAX_NAME_LENGTH );
> +    fd = open( filename,
> +               O_RDWR | O_CREAT,
> +               S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH );
> +    rtems_test_assert( fd >= 0 );
> +
> +    rc = close( fd );
> +    rtems_test_assert( rc == 0 );
> +
> +    /* See if the file still exists and can be found */
> +    fd = open( filename, O_RDWR );
> +    rtems_test_assert( fd >= 0 );
> +
> +    rc = close( fd );
> +    rtems_test_assert( rc == 0 );
> +  }
> +}
> +
> +/*
> + * Try opening files which do already exist (with different capitalization in their names)
> + */
> +static void test_duplicated_files( const char *dirname,
> +  const name_duplicates                       *files_duplicated,
> +  const unsigned int                           number_of_files_duplicated )
> +{
> +  unsigned int index_file;
> +  unsigned int index_duplicate;
> +  int          rc;
> +  char         filename[MAX_NAME_LENGTH + strlen( dirname ) + 1];
> +  int          fd;
> +
> +
> +  for ( index_file = 0; index_file < number_of_files_duplicated;
> +        ++index_file ) {
> +    snprintf( filename,
> +              sizeof( filename ) - 1,
> +              "%s/%s",
> +              dirname,
> +              files_duplicated[index_file].name );
> +    fd = open( filename,
> +               O_RDWR | O_CREAT,
> +               S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH );
> +    rtems_test_assert( fd >= 0 );
> +
> +    rc = close( fd );
> +    rtems_test_assert( rc == 0 );
> +
> +    for ( index_duplicate = 0;
> +          index_duplicate < files_duplicated[index_file].number_of_duplicates;
> +          ++index_duplicate ) {
> +      snprintf( filename,
> +                sizeof( filename ) - 1,
> +                "%s/%s",
> +                dirname,
> +                files_duplicated[index_file].name_duplicates[index_duplicate] );
> +      fd = open( filename, O_RDWR );
> +      rtems_test_assert( fd >= 0 );
> +
> +      rc = close( fd );
> +      rtems_test_assert( rc == 0 );
> +    }
> +
> +    rc = remove( filename );
> +    rtems_test_assert( rc == 0 );
> +  }
> +}
> +
> +/*
> + * Open and read existing valid directories
> + */
> +static void test_handling_directories(
> +  const char        *start_dir,
> +  const char        *directory_names,
> +  const unsigned int number_of_directories,
> +  const char        *file_names,
> +  const unsigned int number_of_files )
> +{
> +  unsigned int   index_directory;
> +  unsigned int   index_file;
> +  int            rc;
> +  DIR           *dir_stream;
> +  char           dirname[MAX_NAME_LENGTH * 2];
> +  struct dirent *dp;
> +
> +
> +  for ( index_directory = 0;
> +        index_directory < number_of_directories;
> +        ++index_directory ) {
> +    snprintf(
> +      dirname,
> +      sizeof( dirname ) - 1,
> +      "%s/%s",
> +      start_dir,
> +      directory_names + index_directory * MAX_NAME_LENGTH );
> +
> +    test_handling_files(
> +      dirname,
> +      file_names,
> +      number_of_files );
> +
> +    dir_stream = opendir( dirname );
> +    rtems_test_assert( dir_stream != NULL );
> +
> +    dp = readdir( dir_stream );
> +    rtems_test_assert( dp != NULL );
> +    rtems_test_assert( 0 == strcmp( ".", dp->d_name ) );
> +
> +    dp = readdir( dir_stream );
> +    rtems_test_assert( dp != NULL );
> +    rtems_test_assert( 0 == strcmp( "..", dp->d_name ) );
> +
> +    dp         = readdir( dir_stream );
> +    rtems_test_assert( dp != NULL );
> +    index_file = 0;
> +
> +    while ( dp != NULL ) {
> +      rtems_test_assert( 0 == strcmp(
> +                           file_names + index_file * MAX_NAME_LENGTH,
> +                           dp->d_name ) );
> +      ++index_file;
> +      dp = readdir( dir_stream );
> +    }
> +
> +    rtems_test_assert( number_of_files == index_file );
> +
> +    rc = closedir( dir_stream );
> +    rtems_test_assert( rc == 0 );
> +  }
> +}
> +
> +/*
> + * Main test method
> + */
> +static void test( void )
> +{
> +  int  rc;
> +  char start_dir[MOUNT_DIR_SIZE + START_DIR_SIZE + 2];
> +
> +
> +  rc = mkdir( MOUNT_DIR, S_IRWXU | S_IRWXG | S_IRWXO );
> +  rtems_test_assert( rc == 0 );
> +
> +  init_ramdisk();
> +
> +  snprintf( start_dir, sizeof( start_dir ), "%s/%s", MOUNT_DIR, "strt" );
> +
> +  /*
> +   * Tests with code page 850 compatible directory and file names
> +   * and the code page 850 backwards compatible default mode mode of the
> +   * FAT file system
> +   */
> +  mount_device_with_defaults( start_dir );
> +
> +  test_creating_duplicate_directories(
> +    &start_dir[0],
> +    &DIRECTORY_DUPLICATES[0],
> +    NUMBER_OF_DIRECTORIES_DUPLICATED );
> +
> +  unmount_and_close_device();
> +
> +  mount_device_with_defaults( start_dir );
> +
> +  test_duplicated_files(
> +    MOUNT_DIR,
> +    FILES_DUPLICATES,
> +    NUMBER_OF_FILES_DUPLICATED );
> +
> +  unmount_and_close_device();
> +
> +  mount_device_with_defaults( start_dir );
> +
> +  test_creating_invalid_directories();
> +
> +  test_creating_directories(
> +    &start_dir[0],
> +    &DIRECTORY_NAMES[0][0],
> +    NUMBER_OF_DIRECTORIES );
> +
> +  test_handling_directories(
> +    &start_dir[0],
> +    &DIRECTORY_NAMES[0][0],
> +    NUMBER_OF_DIRECTORIES,
> +    &FILE_NAMES[0][0],
> +    NUMBER_OF_FILES );
> +
> +  unmount_and_close_device();
> +
> +  del_ramdisk();
> +}
> +
> +static void Init( rtems_task_argument arg )
> +{
> +  puts( "\n\n*** TEST fsdosfsname01 ***" );
> +
> +  test();
> +
> +  puts( "*** END OF TEST fsdosfsname01 ***" );
> +
> +  rtems_test_exit( 0 );
> +}
> +
> +#define CONFIGURE_INIT_TASK_STACK_SIZE ( 1024 * 64 )
> +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> +#define CONFIGURE_MAXIMUM_DRIVERS 4
> +#define CONFIGURE_MAXIMUM_SEMAPHORES RTEMS_DOSFS_SEMAPHORES_PER_INSTANCE
> +
> +#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
> +
> +#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
> +
> +#define CONFIGURE_FILESYSTEM_DOSFS
> +
> +/* 1 RAM disk device file + 1 mount_dir + stdin + stdout + stderr + 2 for open directories/files */
> +#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS ( 5 + 2 )
> +
> +#define CONFIGURE_MAXIMUM_TASKS 1
> +
> +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
> +
> +#define CONFIGURE_INIT
> +
> +#include <rtems/confdefs.h>
> --
> 1.7.10.4
>
> _______________________________________________
> rtems-devel mailing list
> rtems-devel at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-devel


-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985




More information about the devel mailing list