mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2025-12-20 04:40:07 +01:00
file-util: allow specifying path separately in file_create_dated()
Instead of assuming the file prefix contains the path and filename prefix, give these two items separately. A NULL or empty string path may still be given to refer to the current directory. Signed-off-by: Aleksander Morgado <aleksander@aleksander.es> Reviewed-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
e3c2a76d8f
commit
72032accbf
4 changed files with 16 additions and 10 deletions
|
|
@ -53,7 +53,7 @@ weston_timeline_do_open(void)
|
||||||
const char *suffix = ".log";
|
const char *suffix = ".log";
|
||||||
char fname[1000];
|
char fname[1000];
|
||||||
|
|
||||||
timeline_.file = file_create_dated(prefix, suffix,
|
timeline_.file = file_create_dated(NULL, prefix, suffix,
|
||||||
fname, sizeof(fname));
|
fname, sizeof(fname));
|
||||||
if (!timeline_.file) {
|
if (!timeline_.file) {
|
||||||
const char *msg;
|
const char *msg;
|
||||||
|
|
|
||||||
|
|
@ -66,14 +66,15 @@ create_file_excl(const char *fname)
|
||||||
|
|
||||||
/** Create a unique file with date and time in the name
|
/** Create a unique file with date and time in the name
|
||||||
*
|
*
|
||||||
* \param path_prefix Path and file name prefix.
|
* \param path File path
|
||||||
|
* \param prefix File name prefix.
|
||||||
* \param suffix File name suffix.
|
* \param suffix File name suffix.
|
||||||
* \param name_out[out] Buffer for the resulting file name.
|
* \param name_out[out] Buffer for the resulting file name.
|
||||||
* \param name_len Number of bytes usable in name_out.
|
* \param name_len Number of bytes usable in name_out.
|
||||||
* \return stdio FILE pointer, or NULL on failure.
|
* \return stdio FILE pointer, or NULL on failure.
|
||||||
*
|
*
|
||||||
* Create and open a new file with the name concatenated from
|
* Create and open a new file with the name concatenated from
|
||||||
* path_prefix, date and time, and suffix. If a file with this name
|
* 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
|
* 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
|
* date and time sub-string. The counter is increased until a free file
|
||||||
* name is found.
|
* name is found.
|
||||||
|
|
@ -82,19 +83,23 @@ create_file_excl(const char *fname)
|
||||||
* On failure, the contents of name_out are undefined and errno is set.
|
* On failure, the contents of name_out are undefined and errno is set.
|
||||||
*/
|
*/
|
||||||
FILE *
|
FILE *
|
||||||
file_create_dated(const char *path_prefix, const char *suffix,
|
file_create_dated(const char *path, const char *prefix, const char *suffix,
|
||||||
char *name_out, size_t name_len)
|
char *name_out, size_t name_len)
|
||||||
{
|
{
|
||||||
char timestr[128];
|
char timestr[128];
|
||||||
int ret;
|
int ret;
|
||||||
int fd;
|
int fd;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
int with_path;
|
||||||
|
|
||||||
|
with_path = path && path[0];
|
||||||
|
|
||||||
if (current_time_str(timestr, sizeof(timestr), "%F_%H-%M-%S") < 0)
|
if (current_time_str(timestr, sizeof(timestr), "%F_%H-%M-%S") < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
ret = snprintf(name_out, name_len, "%s%s%s",
|
ret = snprintf(name_out, name_len, "%s%s%s%s%s",
|
||||||
path_prefix, timestr, suffix);
|
with_path ? path : "", with_path ? "/" : "",
|
||||||
|
prefix, timestr, suffix);
|
||||||
if (ret < 0 || (size_t)ret >= name_len) {
|
if (ret < 0 || (size_t)ret >= name_len) {
|
||||||
errno = ENOBUFS;
|
errno = ENOBUFS;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -105,8 +110,9 @@ file_create_dated(const char *path_prefix, const char *suffix,
|
||||||
while (fd == -1 && errno == EEXIST) {
|
while (fd == -1 && errno == EEXIST) {
|
||||||
cnt++;
|
cnt++;
|
||||||
|
|
||||||
ret = snprintf(name_out, name_len, "%s%s-%d%s",
|
ret = snprintf(name_out, name_len, "%s%s%s%s-%d%s",
|
||||||
path_prefix, timestr, cnt, suffix);
|
with_path ? path : "", with_path ? "/" : "",
|
||||||
|
prefix, timestr, cnt, suffix);
|
||||||
if (ret < 0 || (size_t)ret >= name_len) {
|
if (ret < 0 || (size_t)ret >= name_len) {
|
||||||
errno = ENOBUFS;
|
errno = ENOBUFS;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ extern "C" {
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
FILE *
|
FILE *
|
||||||
file_create_dated(const char *path_prefix, const char *suffix,
|
file_create_dated(const char *path, const char *prefix, const char *suffix,
|
||||||
char *name_out, size_t name_len);
|
char *name_out, size_t name_len);
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,7 @@ trigger_binding(struct weston_keyboard *keyboard, const struct timespec *time,
|
||||||
|
|
||||||
unpremultiply_and_swap_a8b8g8r8_to_PAMrgba(pixels, sz);
|
unpremultiply_and_swap_a8b8g8r8_to_PAMrgba(pixels, sz);
|
||||||
|
|
||||||
fp = file_create_dated(prefix, suffix, fname, sizeof(fname));
|
fp = file_create_dated(NULL, prefix, suffix, fname, sizeof(fname));
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
const char *msg;
|
const char *msg;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue