source: rtems/cpukit/libfs/src/rfs/rtems-rfs-rtems-utils.c @ 36f3207

4.115
Last change on this file since 36f3207 was 36f3207, checked in by Alex Ivanov <alexivanov97@…>, on 12/28/12 at 13:49:39

libfs: Doxygen Enhancement Task #3

  • Property mode set to 100644
File size: 3.7 KB
Line 
1/**
2 * @file
3 *
4 * @brief Set of Utility Functions to Support RTEMS RFS on RTEMS
5 * @ingroup rtems-rfs
6 */
7
8/*
9 *  COPYRIGHT (c) 2010 Chris Johns <chrisj@rtems.org>
10 *
11 *  The license and distribution terms for this file may be
12 *  found in the file LICENSE in this distribution or at
13 *  http://www.rtems.com/license/LICENSE.
14 */
15
16#if HAVE_CONFIG_H
17#include "config.h"
18#endif
19
20#include <sys/types.h>
21#include <sys/stat.h>
22#include <stdlib.h>
23
24#include "rtems-rfs-rtems.h"
25
26/*
27 * The following sets the handlers based on the type of inode.
28 */
29
30bool
31rtems_rfs_rtems_set_handlers (rtems_filesystem_location_info_t* loc,
32                              rtems_rfs_inode_handle*           inode)
33{
34  uint16_t mode = rtems_rfs_inode_get_mode (inode);
35  loc->handlers = NULL;
36  if (RTEMS_RFS_S_ISDIR (mode))
37    loc->handlers = rtems_rfs_rtems_handlers (dir);
38  else if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK(mode))
39    loc->handlers = rtems_rfs_rtems_handlers (device);
40  else if (RTEMS_RFS_S_ISLNK (mode))
41    loc->handlers = rtems_rfs_rtems_handlers (link);
42  else if (RTEMS_RFS_S_ISREG (mode))
43    loc->handlers = rtems_rfs_rtems_handlers (file);
44  else
45  {
46    printf ("rtems-rfs: mode type unknown: %04x\n", mode);
47    return false;
48  }
49  return true;
50}
51
52uint16_t
53rtems_rfs_rtems_imode (mode_t mode)
54{
55  /*
56   * Mapping matches RTEMS so no need to change.
57   */
58  return mode;
59}
60
61mode_t
62rtems_rfs_rtems_mode (int imode)
63{
64  /*
65   * Mapping matches RTEMS so no need to change.
66   */
67  return imode;
68}
69
70/*
71 * Only provide if there is no macro version.
72 */
73#if !defined (rtems_rfs_rtems_error)
74int
75rtems_rfs_rtems_error (const char* mesg, int error)
76{
77  if (error)
78    printf ("rtems-rfs: %s: %d: %s\n", mesg, error, strerror (error));
79  errno = error;
80  return error == 0 ? 0 : -1;
81}
82#endif
83
84#if RTEMS_RFS_RTEMS_TRACE
85static uint32_t rtems_rfs_rtems_trace_mask;
86
87bool
88rtems_rfs_rtems_trace (uint32_t mask)
89{
90  bool result = false;
91  if (mask & rtems_rfs_rtems_trace_mask)
92    result = true;
93  return result;
94}
95
96void
97rtems_rfs_trace_rtems_set_mask (uint32_t mask)
98{
99  rtems_rfs_rtems_trace_mask |= mask;
100}
101
102void
103rtems_rfs_trace_rtems_clear_mask (uint32_t mask)
104{
105  rtems_rfs_rtems_trace_mask &= ~mask;
106}
107
108int
109rtems_rfs_rtems_trace_shell_command (int argc, char *argv[])
110{
111  const char* table[] =
112  {
113    "error-msgs",
114    "eval-path"
115    "eval-for-make",
116    "eval-perms",
117    "mknod",
118    "rmnod",
119    "link",
120    "unlink",
121    "chown",
122    "readlink",
123    "fchmod",
124    "stat",
125    "dir-rmnod",
126    "file-open",
127    "file-close",
128    "file-read",
129    "file-write",
130    "file-lseek",
131    "file-ftrunc"
132  };
133
134  bool set = true;
135  int  arg;
136  int  t;
137
138  for (arg = 1; arg < argc; arg++)
139  {
140    if (argv[arg][0] == '-')
141    {
142      switch (argv[arg][1])
143      {
144        case 'h':
145          printf ("usage: %s [-hl] [set/clear] [flags]\n", argv[0]);
146          return 0;
147        case 'l':
148          printf ("%s: valid flags to set or clear are:\n", argv[0]);
149          for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
150            printf ("  %s\n", table[t]);
151          return 0;
152        default:
153          printf ("error: unknown option\n");
154          return 1;
155      }
156    }
157    else
158    {
159      uint32_t value = 0;
160      if (strcmp (argv[arg], "set") == 0)
161        set = true;
162      if (strcmp (argv[arg], "clear") == 0)
163        set = false;
164      else if (strcmp (argv[arg], "all") == 0)
165        value = RTEMS_RFS_RTEMS_DEBUG_ALL;
166      else
167      {
168        for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
169        {
170          if (strcmp (argv[arg], table[t]) == 0)
171          {
172            value = 1 << t;
173            break;
174          }
175        }
176      }
177
178      if (set)
179        rtems_rfs_rtems_trace_mask |= value;
180      else
181        rtems_rfs_rtems_trace_mask &= ~value;
182    }
183  }
184
185  return 0;
186}
187
188#endif
Note: See TracBrowser for help on using the repository browser.