/* ISC license. */ #include #include #include #include #include int filecopy_suffix (char const *src, char const *dst, unsigned int mode, char const *suffix) { size_t dstlen = strlen(dst) ; size_t suffixlen = strlen(suffix) ; char tmp[dstlen + suffixlen + 1] ; memcpy(tmp, dst, dstlen) ; memcpy(tmp + dstlen, suffix, suffixlen + 1) ; if (!filecopy_unsafe(src, tmp, mode)) return 0 ; if (rename(tmp, dst) < 0) { int e = errno ; unlink(tmp) ; errno = e ; return 0 ; } return 1 ; }