diff options
-rw-r--r-- | include/slibc-human.h | 114 |
1 files changed, 68 insertions, 46 deletions
diff --git a/include/slibc-human.h b/include/slibc-human.h index 25e5162..ee55568 100644 --- a/include/slibc-human.h +++ b/include/slibc-human.h @@ -33,56 +33,25 @@ -/** - * Ways to handled unrecognised escapes, - * and other configurations. - */ -enum unescape_mode +enum machinemode_mode { /** - * For any unrecognised character '#', - * '\#' results in an EINVAL-error. + * Return in the format where 0750 + * resolves to 'rwxr-x---'. * - * Cannot be used together with - * `UNESCAPE_VERBATIM` or `UNESCAPE_IGNORE`. + * If used in combination with `MACHINEMODE_MASK`, + * 0750 resolves to 'u=rwx,g=r-x,o=---'. */ - UNESCAPE_EINVAL = 1, + MACHINEMODE_STAT = 1, /** - * For any unrecognised character '#', - * '\#' results in '#'. + * Return in the format where 0750 + * resolves to 'u=rwx,g=rx,o='. * - * Cannot be used together with - * `UNESCAPE_EINVAL` or `UNESCAPE_IGNORE`. - */ - UNESCAPE_VERBATIM = 2, - - /** - * For any unrecognised character '#', - * '\#' results in '\#'. - * - * Cannot be used together with - * `UNESCAPE_EINVAL` or `UNESCAPE_VERBATIM`. + * If used in combination with `MACHINEMODE_STAT`, + * 0750 resolves to 'u=rwx,g=r-x,o=---'. */ - UNESCAPE_IGNORE = 4, - - - /** - * '\&' resolves to the byte 255 (0xFF). - * - * If not used, '\&' is handled as an - * unsupported escape. - */ - UNESCAPE_AMPERSAND = 8, - - /** - * '\0' resolves to the byte sequence - * 192 128 (0xC0 0x80). - * - * If not used, '\0' resolves to a - * 0 byte (termination). - */ - UNESCAPE_MOD_UTF8 = 16, + MACHINEMODE_MASK = 2, }; @@ -134,7 +103,7 @@ enum humansize_mode * `detail` < 0 is allowed, */ HUMANSIZE_ROUND = 32, - } + }; enum machinesize_mode @@ -156,13 +125,66 @@ enum machinesize_mode * included, otherwise 1024-base is used. */ MACHINESIZE_IEC = 2, - } + }; + + +/** + * Ways to handled unrecognised escapes, + * and other configurations. + */ +enum unescape_mode + { + /** + * For any unrecognised character '#', + * '\#' results in an EINVAL-error. + * + * Cannot be used together with + * `UNESCAPE_VERBATIM` or `UNESCAPE_IGNORE`. + */ + UNESCAPE_EINVAL = 1, + + /** + * For any unrecognised character '#', + * '\#' results in '#'. + * + * Cannot be used together with + * `UNESCAPE_EINVAL` or `UNESCAPE_IGNORE`. + */ + UNESCAPE_VERBATIM = 2, + + /** + * For any unrecognised character '#', + * '\#' results in '\#'. + * + * Cannot be used together with + * `UNESCAPE_EINVAL` or `UNESCAPE_VERBATIM`. + */ + UNESCAPE_IGNORE = 4, + + + /** + * '\&' resolves to the byte 255 (0xFF). + * + * If not used, '\&' is handled as an + * unsupported escape. + */ + UNESCAPE_AMPERSAND = 8, + + /** + * '\0' resolves to the byte sequence + * 192 128 (0xC0 0x80). + * + * If not used, '\0' resolves to a + * 0 byte (termination). + */ + UNESCAPE_MOD_UTF8 = 16, + }; -char* humanmode(char* restrict buffer, mode_t mode); +char* humanmode(char* restrict buffer, mode_t perm, enum machinemode_mode mode); -mode_t machinemode(const char* restrict str, mode_t mode, mode_t mask); +int machinemode(mode_t* restrict mode, mode_t* restrict mask, const char* restrict str); char* humansize(char* restrict buffer, size_t size, enum humansize_mode mode, int detail); |