/** Create a unique file with date and time in the name * * \param path_prefix Path and file name prefix. * \param suffix File name suffix. * \param name_out[out] Buffer for the resulting file name. * \param name_len Number of bytes usable in name_out. * \return stdio FILE pointer, or NULL on failure. * * Create and open a new file with the name concatenated from * path_prefix, date and time, and suffix. If a file with this name * already exists, an counter number is added to the end of the * date and time sub-string. The counter is increased until a free file * name is found. * * Once creating the file succeeds, the name of the file is in name_out. * On failure, the contents of name_out are undefined and errno is set. */ FILE * file_create_dated(const char *path_prefix, const char *suffix, char *name_out, size_t name_len) { char timestr[128]; int ret; int fd; int cnt = 0; if (current_time_str(timestr, sizeof(timestr), "%F_%H-%M-%S") < 0) return NULL; ret = snprintf(name_out, name_len, "%s%s%s", path_prefix, timestr, suffix); if (ret < 0 || (size_t)ret >= name_len) { errno = ENOBUFS; return NULL; } fd = create_file_excl(name_out); while (fd == -1 && errno == EEXIST) { cnt++; ret = snprintf(name_out, name_len, "%s%s-%d%s", path_prefix, timestr, cnt, suffix); if (ret < 0 || (size_t)ret >= name_len) { errno = ENOBUFS; return NULL; } fd = create_file_excl(name_out); } if (fd == -1) return NULL; return fdopen(fd, "w"); }
void pkcs11_logger_log_separator(void) { char str_time[20]; current_time_str(str_time, sizeof(str_time)); pkcs11_logger_log("****************************** %s ***", str_time); }