Changeset 03fcbb1 in rtems


Ignore:
Timestamp:
Nov 27, 2018, 11:45:53 AM (6 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
0fb52ce
Parents:
9399473c
git-author:
Sebastian Huber <sebastian.huber@…> (11/27/18 11:45:53)
git-committer:
Sebastian Huber <sebastian.huber@…> (02/05/19 09:17:04)
Message:

fs: Add struct dirent::d_type support

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libfs/src/dosfs/msdos_dir.c

    r9399473c r03fcbb1  
    237237                }
    238238
     239#ifdef DT_DIR
     240                if ((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_DIRECTORY)
     241                {
     242                    tmp_dirent.d_type = DT_DIR;
     243                }
     244                else
     245                {
     246                    tmp_dirent.d_type = DT_REG;
     247                }
     248#endif
     249
    239250                /*
    240251                 * Move the entry to the return buffer
  • cpukit/libfs/src/imfs/imfs_dir_default.c

    r9399473c r03fcbb1  
    7575         dir_ent->d_reclen = sizeof( *dir_ent );
    7676         dir_ent->d_ino = IMFS_node_to_ino( imfs_node );
     77#ifdef DT_DIR
     78         dir_ent->d_type = IFTODT( imfs_node->st_mode );
     79#endif
    7780         dir_ent->d_namlen =
    7881           MIN( imfs_node->namelen, sizeof( dir_ent->d_name ) - 1 );
  • cpukit/libfs/src/jffs2/include/linux/fs.h

    r9399473c r03fcbb1  
    44#include <linux/stat.h>
    55#include <sys/types.h>
     6#include <sys/dirent.h>
    67#include <sys/time.h>
    78
     9#ifdef DT_DIR
     10#define RTEMS_JFFS2_HAVE_D_TYPE
     11#else
    812#define DT_UNKNOWN      0
    913#define DT_DIR          4
    1014#define DT_REG          8
    1115#define DT_LNK          10
     16#endif
    1217
    1318#define ATTR_MODE       (1U << 0)
  • cpukit/libfs/src/jffs2/src/fs-rtems.c

    r9399473c r03fcbb1  
    424424}
    425425
    426 static int rtems_jffs2_fill_dirent(struct dirent *de, off_t off, uint32_t ino, const char *name)
     426static int rtems_jffs2_fill_dirent(struct dirent *de, off_t off, uint32_t ino, const char *name, unsigned char type)
    427427{
    428428        int eno = 0;
     
    434434        de->d_reclen = sizeof(*de);
    435435        de->d_ino = ino;
     436#ifdef RTEMS_JFFS2_HAVE_D_TYPE
     437        de->d_type = type;
     438#endif
    436439
    437440        len = strlen(name);
     
    467470
    468471        if (off == 0 && off < end) {
    469                 eno = rtems_jffs2_fill_dirent(de, off, inode->i_ino, ".");
     472                eno = rtems_jffs2_fill_dirent(de, off, inode->i_ino, ".", DT_DIR);
    470473                assert(eno == 0);
    471474                ++off;
     
    474477
    475478        if (off == 1 && off < end) {
    476                 eno = rtems_jffs2_fill_dirent(de, off, inode->i_parent->i_ino, "..");
     479                eno = rtems_jffs2_fill_dirent(de, off, inode->i_parent->i_ino, "..", DT_DIR);
    477480                assert(eno == 0);
    478481                ++off;
     
    483486                if (fd->ino != 0) {
    484487                        if (off == fd_off) {
    485                                 eno = rtems_jffs2_fill_dirent(de, off, fd->ino, fd->name);
     488                                eno = rtems_jffs2_fill_dirent(de, off, fd->ino, fd->name, fd->type);
    486489                                ++off;
    487490                                ++de;
  • cpukit/libfs/src/nfsclient/src/nfs.c

    r9399473c r03fcbb1  
    328328                pde->d_namlen = nlen;
    329329                pde->d_off        = di->ptr - di->buf;
     330#ifdef DT_UNKNOWN
     331                pde->d_type = DT_UNKNOWN;
     332#endif
    330333                if (name == dummy.nambuf) {
    331334                        memcpy(pde->d_name, dummy.nambuf, nlen + 1);
  • testsuites/fstests/fsscandir01/init.c

    r9399473c r03fcbb1  
    99
    1010#ifdef HAVE_CONFIG_H
    11   #include "config.h"
     11#include "config.h"
    1212#endif
     13
     14#include <sys/stat.h>
     15#include <dirent.h>
     16#include <fcntl.h>
     17#include <limits.h>
     18#include <stdio.h>
     19#include <unistd.h>
     20
     21#include <tmacros.h>
    1322
    1423#include "fstest.h"
    1524#include "fs_config.h"
    16 #include "fstest_support.h"
    17 #include "pmacros.h"
    18 
    19 #include <dirent.h>
    20 #include <stdio.h>
    21 #include <string.h>
    22 #include <unistd.h>
    23 #include <errno.h>
    24 #include <limits.h>
    2525
    2626const char rtems_test_name[] = "FSSCANDIR " FILESYSTEM;
    2727
    28 /*
    29  * This code is from the scandir() man page.
    30  */
    31 static void test_scandir(void)
     28#define FILE_NAME "aaa"
     29
     30#define DIR_NAME "bbb"
     31
     32void test(void)
    3233{
    3334  struct dirent **namelist;
     35  struct dirent *d;
     36  int rv;
    3437  int n;
     38  int i;
    3539
    36   n = scandir(".", &namelist, 0, NULL);
    37   if (n < 0) {
    38     perror("scandir");
    39   } else {
    40     while(n--) {
    41       printf("%s\n", namelist[n]->d_name);
    42       free(namelist[n]);
    43     }
    44     free(namelist);
     40  rtems_test_assert(MAXNAMLEN == NAME_MAX);
     41
     42  rv = mknod(FILE_NAME, S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO, 0);
     43  rtems_test_assert(rv == 0);
     44
     45  rv = mkdir(DIR_NAME, S_IRWXU | S_IRWXG | S_IRWXO );
     46  rtems_test_assert(rv == 0);
     47
     48  n = scandir(".", &namelist, NULL, alphasort);
     49  rtems_test_assert(2 <= n || n == 4);
     50
     51  i = 0;
     52  d = namelist[i];
     53
     54  if (n >= 3) {
     55    rtems_test_assert(strcmp(d->d_name, ".") == 0);
     56#ifdef DT_UNKNOWN
     57    rtems_test_assert(d->d_type == DT_DIR || d->d_type == DT_UNKNOWN);
     58#endif
     59    free(d);
     60    ++i;
     61    d = namelist[i];
    4562  }
    4663
    47   rtems_test_assert(MAXNAMLEN == NAME_MAX);
     64  if (n == 4) {
     65    rtems_test_assert(strcmp(d->d_name, "..") == 0);
     66#ifdef DT_UNKNOWN
     67    rtems_test_assert(d->d_type == DT_DIR || d->d_type == DT_UNKNOWN);
     68#endif
     69    free(d);
     70    ++i;
     71    d = namelist[i];
     72  }
     73
     74  rtems_test_assert(strcmp(d->d_name, FILE_NAME) == 0);
     75#ifdef DT_UNKNOWN
     76  rtems_test_assert(d->d_type == DT_REG || d->d_type == DT_UNKNOWN);
     77#endif
     78  free(d);
     79  ++i;
     80  d = namelist[i];
     81
     82  rtems_test_assert(strcmp(d->d_name, DIR_NAME) == 0);
     83#ifdef DT_UNKNOWN
     84  rtems_test_assert(d->d_type == DT_DIR || d->d_type == DT_UNKNOWN);
     85#endif
     86  free(d);
     87
     88  free(namelist);
    4889}
    49 
    50 
    51 void test (void)
    52 {
    53   test_scandir();
    54 }
Note: See TracChangeset for help on using the changeset viewer.