Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 521872 | Differences between
and this patch

Collapse All | Expand All

(-)file_not_specified_in_diff (-51 / +8 lines)
Line  Link Here
0
-- a/vmblock-only/linux/file.c
0
++ b/vmblock-only/linux/file.c
Lines 38-83 typedef u64 inode_num_t; Link Here
38
typedef ino_t inode_num_t;
38
typedef ino_t inode_num_t;
39
#endif
39
#endif
40
/* Specifically for our filldir_t callback */
41
typedef struct FilldirInfo {
42
   filldir_t filldir;
43
   void *dirent;
44
} FilldirInfo;
45
46
47
/*
48
 *----------------------------------------------------------------------------
49
 *
50
 * Filldir --
51
 *
52
 *    Callback function for readdir that we use in place of the one provided.
53
 *    This allows us to specify that each dentry is a symlink, but pass through
54
 *    everything else to the original filldir function.
55
 *
56
 * Results:
57
 *    Original filldir's return value.
58
 *
59
 * Side effects:
60
 *    Directory information gets copied to user's buffer.
61
 *
62
 *----------------------------------------------------------------------------
63
 */
64
65
static int
66
Filldir(void *buf,              // IN: Dirent buffer passed from FileOpReaddir
67
        const char *name,       // IN: Dirent name
68
        int namelen,            // IN: len of dirent's name
69
        loff_t offset,          // IN: Offset
70
        inode_num_t ino,        // IN: Inode number of dirent
71
        unsigned int d_type)    // IN: Type of file
72
{
73
   FilldirInfo *info = buf;
74
75
   /* Specify DT_LNK regardless */
76
   return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
77
}
78
79
80
/* File operations */
40
/* File operations */
81
/*
41
/*
Lines 166-176 FileOpOpen(struct inode *inode, // IN Link Here
166
static int
126
static int
167
FileOpReaddir(struct file *file,  // IN
127
FileOpReaddir(struct file *file,  // IN
168
              void *dirent,       // IN
128
              struct dir_context *ctx)  // IN
169
              filldir_t filldir)  // IN
170
{
129
{
171
   int ret;
130
   int ret;
172
   FilldirInfo info;
131
173
   struct file *actualFile;
132
   struct file *actualFile;
174
   if (!file) {
133
   if (!file) {
Lines 184-195 FileOpReaddir(struct file *file, // IN Link Here
184
      return -EINVAL;
143
      return -EINVAL;
185
   }
144
   }
186
   info.filldir = filldir;
145
   /* Ricky Wong Yung Fei:
187
   info.dirent = dirent;
146
    * Manipulation of pos is now handled internally by iterate_dir().
188
147
    */
189
   actualFile->f_pos = file->f_pos;
148
   ret = iterate_dir(actualFile, ctx);
190
   ret = vfs_readdir(actualFile, Filldir, &info);
191
   file->f_pos = actualFile->f_pos;
192
   return ret;
149
   return ret;
193
}
150
}
Lines 237-243 FileOpRelease(struct inode *inode, // IN Link Here
237
struct file_operations RootFileOps = {
194
struct file_operations RootFileOps = {
238
   .readdir = FileOpReaddir,
195
   .iterate = FileOpReaddir,
239
   .open    = FileOpOpen,
196
   .open    = FileOpOpen,
240
   .release = FileOpRelease,
197
   .release = FileOpRelease,
241
};
198
};

Return to bug 521872