return &unkn_class;
}
-static struct file *new_file(struct proc *proc, const struct file_class *class)
+static struct file *new_file(struct proc *proc, const struct file_class *class,
+ struct stat *sb, const char *name, int association)
{
struct file *file;
INIT_LIST_HEAD(&file->files);
list_add_tail(&file->files, &proc->files);
+ file->association = association;
+ file->name = xstrdup(name);
+ file->stat = *sb;
+
return file;
}
return file;
}
-static void file_set_path(struct file *file, struct stat *sb, const char *name, int association)
-{
- file->association = association;
- file->name = xstrdup(name);
- file->stat = *sb;
-}
-
static void file_init_content(struct file *file)
{
if (file->class && file->class->initialize_content)
*/
&& (class != &sock_class) && (class != &nsfs_file_class))
return NULL;
- f = new_file(proc, class);
- file_set_path(f, &sb, sym, assoc);
+ f = new_file(proc, class, &sb, sym, assoc);
}
file_init_content(f);
* "stat by the file name" may not work. In that case,
*/
goto try_map_files;
- f = new_file(proc, stat2class(&sb));
- file_set_path(f, &sb, path, -assoc);
+ f = new_file(proc, stat2class(&sb), &sb, path, -assoc);
} else {
/* As used in tcpdump, AF_PACKET socket can be mmap'ed. */
char map_file[sizeof("map_files/0000000000000000-ffffffffffffffff")];
return;
if (ul_path_readlink(pc, sym, sizeof(sym), map_file) < 0)
return;
- f = new_file(proc, stat2class(&sb));
- file_set_path(f, &sb, sym, -assoc);
+ f = new_file(proc, stat2class(&sb), &sb, sym, -assoc);
}
if (modestr[0] == 'r')