-O ro: readonly files, never write anything (except to standard streams)
[tfcrypt.git] / tfc_misc.c
index a39f4591831ddf988f8cbcb74ab323658c74b76a..bfb7265ff2dbf00442f26702456e7caeaf2ea864 100644 (file)
@@ -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;
@@ -116,6 +136,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 +184,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);