diff options
author | Eliseo Martínez <eliseomarmol@gmail.com> | 2014-12-21 22:51:03 +0100 |
---|---|---|
committer | Eliseo Martínez <eliseomarmol@gmail.com> | 2014-12-24 20:00:05 +0100 |
commit | 516405b6012e0c99d8bc073a7dead3c3206a184e (patch) | |
tree | 01ce692e8ee8c3a0e9dcf3b99c78f20f4320c658 /src | |
parent | ec09f4488f0114a1a557642cf5ada64608d357bf (diff) | |
download | rneovim-516405b6012e0c99d8bc073a7dead3c3206a184e.tar.gz rneovim-516405b6012e0c99d8bc073a7dead3c3206a184e.tar.bz2 rneovim-516405b6012e0c99d8bc073a7dead3c3206a184e.zip |
Remove long_u: Passing-by: put_time(): Refactor implementation.
put_time() had a complicated implementation, because of having to shift
an 8-byte value in a portable way with old means.
That can be greatly simplified now, using a C99 fixed-size type.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/misc2.c | 34 |
1 files changed, 6 insertions, 28 deletions
diff --git a/src/nvim/misc2.c b/src/nvim/misc2.c index d624f52879..1407dcf04b 100644 --- a/src/nvim/misc2.c +++ b/src/nvim/misc2.c @@ -511,34 +511,12 @@ int put_bytes(FILE *fd, uintmax_t number, unsigned int len) return OK; } - -/* - * Write time_t to file "fd" in 8 bytes. - */ -void put_time(FILE *fd, time_t the_time) +/// Write time_t to file "fd" in 8 bytes. +void put_time(FILE *fd, time_t time_) { - int c; - int i; - time_t wtime = the_time; - - /* time_t can be up to 8 bytes in size, more than long_u, thus we - * can't use put_bytes() here. - * Another problem is that ">>" may do an arithmetic shift that keeps the - * sign. This happens for large values of wtime. A cast to long_u may - * truncate if time_t is 8 bytes. So only use a cast when it is 4 bytes, - * it's safe to assume that long_u is 4 bytes or more and when using 8 - * bytes the top bit won't be set. */ - for (i = 7; i >= 0; --i) { - if (i + 1 > (int)sizeof(time_t)) - /* ">>" doesn't work well when shifting more bits than avail */ - putc(0, fd); - else { -#if defined(SIZEOF_TIME_T) && SIZEOF_TIME_T > 4 - c = (int)(wtime >> (i * 8)); -#else - c = (int)((long_u)wtime >> (i * 8)); -#endif - putc(c, fd); - } + // time_t can be up to 8 bytes in size, more than uintmax_t in 32 bits + // systems, thus we can't use put_bytes() here. + for (unsigned int i = 7; i < 8; --i) { + putc((int)((uint64_t)time_ >> (i * 8)), fd); } } |