#include "fileio.h"
#include "format-table.h"
#include "format-util.h"
+#include "fs-util.h"
#include "gunicode.h"
#include "id128-util.h"
#include "in-addr-util.h"
uid_t uid;
gid_t gid;
pid_t pid;
+ mode_t mode;
/* … add more here as we start supporting more cell data types … */
};
} TableData;
case TABLE_PID:
return sizeof(pid_t);
+ case TABLE_MODE:
+ return sizeof(mode_t);
+
default:
assert_not_reached("Uh? Unexpected cell type");
}
uid_t uid;
gid_t gid;
pid_t pid;
+ mode_t mode;
} buffer;
switch (type) {
data = &buffer.pid;
break;
+ case TABLE_MODE:
+ buffer.mode = va_arg(ap, mode_t);
+ data = &buffer.mode;
+ break;
+
case TABLE_SET_MINIMUM_WIDTH: {
size_t w = va_arg(ap, size_t);
case TABLE_PID:
return CMP(a->pid, b->pid);
+ case TABLE_MODE:
+ return CMP(a->mode, b->mode);
+
default:
;
}
break;
}
+ case TABLE_MODE: {
+ _cleanup_free_ char *p;
+
+ if (d->mode == MODE_INVALID)
+ return "n/a";
+
+ p = new(char, 4 + 1);
+ if (!p)
+ return NULL;
+
+ sprintf(p, "%04o", d->mode & 07777);
+ d->formatted = TAKE_PTR(p);
+ break;
+ }
+
default:
assert_not_reached("Unexpected type?");
}
return json_variant_new_integer(ret, d->int_val);
+ case TABLE_MODE:
+ if (d->mode == MODE_INVALID)
+ return json_variant_new_null(ret);
+
+ return json_variant_new_unsigned(ret, d->mode);
+
default:
return -EINVAL;
}
TABLE_GID,
TABLE_PID,
TABLE_SIGNAL,
+ TABLE_MODE, /* as in UNIX file mode (mode_t), in typical octal output */
_TABLE_DATA_TYPE_MAX,
/* The following are not really data types, but commands for table_add_cell_many() to make changes to