X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_misc.c;h=2aa58df4b5fd46ea9d579f3be3e4cafb85067e0f;hb=HEAD;hp=a39f4591831ddf988f8cbcb74ab323658c74b76a;hpb=96e6e88fd94af95e15d143e4a86d5a9e858d340d;p=tfcrypt.git diff --git a/tfc_misc.c b/tfc_misc.c index a39f459..2aa58df 100644 --- a/tfc_misc.c +++ b/tfc_misc.c @@ -63,6 +63,26 @@ tfc_yesno str_empty(const char *str) return NO; } +int xxopen(tfc_yesno noerr, const char *pathname, int flags) +{ + int r; + + if ((flags & O_WRONLY || flags & O_RDWR)) { + if (read_only == YES) flags = O_RDONLY; + else flags |= write_flags; + } + + flags |= O_LARGEFILE; + r = open(pathname, flags, 0666); + if (noerr == NO && r == -1) xerror(NO, NO, YES, "%s", pathname); + return r; +} + +int xopen(const char *pathname, int flags) +{ + return xxopen(NO, pathname, flags); +} + void xclose(int fd) { if (fd < 3) return; @@ -77,12 +97,23 @@ const char *tfc_modename(int mode) case TFC_MODE_XTS: return "XTS"; case TFC_MODE_ECB: return "ECB"; case TFC_MODE_CBC: return "CBC"; - case TFC_MODE_OCB: return "OCB"; + case TFC_MODE_PCBC: return "PCBC"; } return NULL; } +tfc_yesno tfc_is_freestream(int mode) +{ + switch (mode) { + case TFC_MODE_PLAIN: + case TFC_MODE_XOR: + case TFC_MODE_STREAM: return YES; + } + + return NO; +} + void tfc_getcurtime(tfc_useconds *tx) { struct timespec t; @@ -116,6 +147,17 @@ char *tfc_format_time(tfc_useconds t) return r; } +char *tfc_format_pid(const char *str) +{ + static char r[128]; + size_t n; + + n = xstrlcpy(r, str, sizeof(r)); + if (show_pid == YES && sizeof(r)-n >= 22) sprintf(r+n, "[%lu]", (unsigned long)progpid); + + return r; +} + tfc_fsize tfc_fdsize(int fd) { off_t l, cur; @@ -153,7 +195,7 @@ tfc_fsize tfc_fnamesize(char *fname, tfc_yesno noexit) memset(s, 0, 2); } - fnmfd = open(fname, O_RDONLY); + fnmfd = xxopen(YES, fname, O_RDONLY); if (s) memcpy(s, T, 2); if (fnmfd == -1) { xerror(noexit, NO, YES, "%s", fname);