예제 #1
0
/** 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");
}
예제 #2
0
void pkcs11_logger_log_separator(void)
{
	char str_time[20];
	current_time_str(str_time, sizeof(str_time));
	pkcs11_logger_log("****************************** %s ***", str_time);
}