mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 23:48:32 +00:00
vim-patch:8.1.1313: warnings for using localtime() and ctime()
Problem: Warnings for using localtime() and ctime().
Solution: Use localtime_r() if available. Avoid using ctime().
63d2555c9c
This commit is contained in:
@@ -2416,9 +2416,7 @@ static int prt_add_resource(struct prt_ps_resource_S *resource)
|
||||
|
||||
int mch_print_begin(prt_settings_T *psettings)
|
||||
{
|
||||
time_t now;
|
||||
int bbox[4];
|
||||
char *p_time;
|
||||
double left;
|
||||
double right;
|
||||
double top;
|
||||
@@ -2442,10 +2440,10 @@ int mch_print_begin(prt_settings_T *psettings)
|
||||
}
|
||||
prt_dsc_textline("For", buffer);
|
||||
prt_dsc_textline("Creator", longVersion);
|
||||
/* Note: to ensure Clean8bit I don't think we can use LC_TIME */
|
||||
now = time(NULL);
|
||||
p_time = ctime(&now);
|
||||
/* Note: ctime() adds a \n so we have to remove it :-( */
|
||||
// Note: to ensure Clean8bit I don't think we can use LC_TIME
|
||||
char ctime_buf[50];
|
||||
char *p_time = os_ctime(ctime_buf, sizeof(ctime_buf));
|
||||
// Note: os_ctime() adds a \n so we have to remove it :-(
|
||||
p = vim_strchr((char_u *)p_time, '\n');
|
||||
if (p != NULL)
|
||||
*p = NUL;
|
||||
|
@@ -1504,16 +1504,15 @@ static time_t swapfile_info(char_u *fname)
|
||||
int fd;
|
||||
struct block0 b0;
|
||||
time_t x = (time_t)0;
|
||||
char *p;
|
||||
#ifdef UNIX
|
||||
char uname[B0_UNAME_SIZE];
|
||||
#endif
|
||||
|
||||
/* print the swap file date */
|
||||
// print the swap file date
|
||||
FileInfo file_info;
|
||||
if (os_fileinfo((char *)fname, &file_info)) {
|
||||
#ifdef UNIX
|
||||
/* print name of owner of the file */
|
||||
// print name of owner of the file
|
||||
if (os_get_uname(file_info.stat.st_uid, uname, B0_UNAME_SIZE) == OK) {
|
||||
MSG_PUTS(_(" owned by: "));
|
||||
msg_outtrans((char_u *)uname);
|
||||
@@ -1522,11 +1521,8 @@ static time_t swapfile_info(char_u *fname)
|
||||
#endif
|
||||
MSG_PUTS(_(" dated: "));
|
||||
x = file_info.stat.st_mtim.tv_sec;
|
||||
p = ctime(&x); // includes '\n'
|
||||
if (p == NULL)
|
||||
MSG_PUTS("(invalid)\n");
|
||||
else
|
||||
MSG_PUTS(p);
|
||||
char ctime_buf[50];
|
||||
MSG_PUTS(os_ctime_r(&x, ctime_buf, sizeof(ctime_buf)));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3267,15 +3263,13 @@ attention_message (
|
||||
)
|
||||
{
|
||||
assert(buf->b_fname != NULL);
|
||||
time_t x, sx;
|
||||
char *p;
|
||||
|
||||
++no_wait_return;
|
||||
(void)EMSG(_("E325: ATTENTION"));
|
||||
MSG_PUTS(_("\nFound a swap file by the name \""));
|
||||
msg_home_replace(fname);
|
||||
MSG_PUTS("\"\n");
|
||||
sx = swapfile_info(fname);
|
||||
const time_t swap_mtime = swapfile_info(fname);
|
||||
MSG_PUTS(_("While opening file \""));
|
||||
msg_outtrans(buf->b_fname);
|
||||
MSG_PUTS("\"\n");
|
||||
@@ -3284,14 +3278,12 @@ attention_message (
|
||||
MSG_PUTS(_(" CANNOT BE FOUND"));
|
||||
} else {
|
||||
MSG_PUTS(_(" dated: "));
|
||||
x = file_info.stat.st_mtim.tv_sec;
|
||||
p = ctime(&x); // includes '\n'
|
||||
if (p == NULL)
|
||||
MSG_PUTS("(invalid)\n");
|
||||
else
|
||||
MSG_PUTS(p);
|
||||
if (sx != 0 && x > sx)
|
||||
time_t x = file_info.stat.st_mtim.tv_sec;
|
||||
char ctime_buf[50];
|
||||
MSG_PUTS(os_ctime_r(&x, ctime_buf, sizeof(ctime_buf)));
|
||||
if (swap_mtime != 0 && x > swap_mtime) {
|
||||
MSG_PUTS(_(" NEWER than swap file!\n"));
|
||||
}
|
||||
}
|
||||
/* Some of these messages are long to allow translation to
|
||||
* other languages. */
|
||||
|
@@ -144,6 +144,39 @@ struct tm *os_localtime(struct tm *result) FUNC_ATTR_NONNULL_ALL
|
||||
return os_localtime_r(&rawtime, result);
|
||||
}
|
||||
|
||||
/// Portable version of POSIX ctime_r()
|
||||
///
|
||||
/// @param clock[in]
|
||||
/// @param result[out] Pointer to a 'char' where the result should be placed
|
||||
/// @param result_len length of result buffer
|
||||
/// @return human-readable string of current local time
|
||||
char *os_ctime_r(const time_t *restrict clock, char *restrict result,
|
||||
size_t result_len)
|
||||
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
|
||||
{
|
||||
struct tm clock_local;
|
||||
struct tm *clock_local_ptr = os_localtime_r(clock, &clock_local);
|
||||
// MSVC returns NULL for an invalid value of seconds.
|
||||
if (clock_local_ptr == NULL) {
|
||||
snprintf(result, result_len, "%s\n", _("(Invalid)"));
|
||||
} else {
|
||||
strftime(result, result_len, "%a %b %d %H:%M:%S %Y\n", clock_local_ptr);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// Gets the current Unix timestamp and adjusts it to local time.
|
||||
///
|
||||
/// @param result[out] Pointer to a 'char' where the result should be placed
|
||||
/// @param result_len length of result buffer
|
||||
/// @return human-readable string of current local time
|
||||
char *os_ctime(char *result, size_t result_len)
|
||||
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
|
||||
{
|
||||
time_t rawtime = time(NULL);
|
||||
return os_ctime_r(&rawtime, result, result_len);
|
||||
}
|
||||
|
||||
/// Obtains the current Unix timestamp.
|
||||
///
|
||||
/// @return Seconds since epoch.
|
||||
|
Reference in New Issue
Block a user