diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-02-21 14:26:38 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-02-23 10:44:58 -0700 |
commit | c990e16bb4754e17a4858274ebd59f1e0859b16f (patch) | |
tree | e64814bf4c5e2630c92ca0a7a9bb78930203f0c5 /lib9p_util | |
parent | a1883e93c1094ed34c21e018d34993e2a9e80506 (diff) |
lib9p_util: Pull utility macros into static.h
Diffstat (limited to 'lib9p_util')
-rw-r--r-- | lib9p_util/include/util9p/static.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lib9p_util/include/util9p/static.h b/lib9p_util/include/util9p/static.h index 4afdb51..0b391b8 100644 --- a/lib9p_util/include/util9p/static.h +++ b/lib9p_util/include/util9p/static.h @@ -9,6 +9,17 @@ #include <lib9p/srv.h> +#define util9p_box(nam, obj) \ + ((struct lib9p_srv_file){ \ + .self = obj, \ + .vtable = (void*)&_lo_##nam##_lib9p_srv_file_vtable, \ + }) + +#define UTIL9P_ATIME 1728337905 +#define UTIL9P_MTIME 1728337904 + +/* Common *********************************************************************/ + typedef struct { char *u_name; uint32_t u_num; @@ -23,6 +34,21 @@ typedef struct { uint32_t atime, mtime; } _util9p_static_common; +#define UTIL9P_STATIC_COMMON(PATH, STRNAME, MODE) \ + { \ + .u_name = "root", .u_num = 0, /* owner user */ \ + .g_name = "root", .g_num = 0, /* owner group */ \ + .m_name = "root", .m_num = 0, /* last-modified-by user */ \ + \ + .pathnum = PATH, \ + .name = STRNAME, \ + .perm = MODE, \ + .atime = UTIL9P_ATIME, \ + .mtime = UTIL9P_MTIME, \ + } + +/* Dir ************************************************************************/ + struct util9p_static_dir { _util9p_static_common; @@ -30,6 +56,15 @@ struct util9p_static_dir { lo_interface lib9p_srv_file members[]; }; LO_IMPLEMENTATION_H(lib9p_srv_file, struct util9p_static_dir, util9p_static_dir); +#define lo_box_util9p_static_dir_as_lib9p_srv_file(obj) util9p_box(util9p_static_dir, obj) + +#define UTIL9P_STATIC_DIR(PATH, STRNAME, ...) \ + lo_box_util9p_static_dir_as_lib9p_srv_file(&((struct util9p_static_dir){ \ + ._util9p_static_common = UTIL9P_STATIC_COMMON(PATH, STRNAME, 0555), \ + .members = { __VA_ARGS__ LO_NULL(lib9p_srv_file) }, \ + })) + +/* File ***********************************************************************/ struct util9p_static_file { _util9p_static_common; @@ -39,5 +74,12 @@ struct util9p_static_file { size_t data_size; /* only used if .data_end==NULL */ }; LO_IMPLEMENTATION_H(lib9p_srv_file, struct util9p_static_file, util9p_static_file); +#define lo_box_util9p_static_file_as_lib9p_srv_file(obj) util9p_box(util9p_static_file, obj) + +#define UTIL9P_STATIC_FILE(PATH, STRNAME, ...) \ + lo_box_util9p_static_file_as_lib9p_srv_file(&((struct util9p_static_file){ \ + ._util9p_static_common = UTIL9P_STATIC_COMMON(PATH, STRNAME, 0444), \ + __VA_ARGS__ \ + })) #endif /* _UTIL9P_STATIC_H_ */ |