.fill_column = error_fill_column,
};
-static void init_error_content(struct file *file)
-{
- file->is_error = 1;
-}
-
static bool readlink_error_fill_column(struct proc *proc __attribute__((__unused__)),
struct file *file __attribute__((__unused__)),
struct libscols_line *ln __attribute__((__unused__)),
const struct file_class readlink_error_class = {
.super = &error_class,
.size = sizeof(struct file),
- .initialize_content = init_error_content,
.fill_column = readlink_error_fill_column,
};
const struct file_class stat_error_class = {
.super = &error_class,
.size = sizeof(struct file),
- .initialize_content = init_error_content,
};
+bool is_error_object(struct file *f)
+{
+ const struct file_class *c;
+
+ assert(f);
+ c = f->class;
+
+ while (c) {
+ if (c == &error_class)
+ return true;
+ c = c->super;
+ }
+
+ return false;
+}
+
/*
* Concrete file class
*/
* path is the same to save stat() call.
*/
else if ((prev = list_last_entry(&proc->files, struct file, files))
- && (!prev->is_error)
+ && (!is_error_object(prev))
&& prev->name && strcmp(prev->name, sym) == 0) {
f = copy_file(prev, assoc);
sb = prev->stat;
file_init_content(f);
- if (f->is_error)
+ if (is_error_object(f))
return f;
if (is_association(f, NS_MNT)) {
*/
prev = list_last_entry(&proc->files, struct file, files);
- if (prev && (!prev->is_error)
+ if (prev && (!is_error_object(prev))
&& prev->stat.st_dev == devno && prev->stat.st_ino == ino)
f = copy_file(prev, -assoc);
else if ((path = strchr(buf, '/'))) {
bool locked_read,
locked_write,
- multiplexed,
- is_error;
+ multiplexed;
};
#define is_opened_file(_f) ((_f)->association >= 0)
file_class, cdev_class, bdev_class, sock_class, unkn_class, fifo_class,
nsfs_file_class, mqueue_file_class, pidfs_file_class;
+bool is_error_object(struct file *f);
+
/*
* IPC
*/