isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit 7d02d6c1fe57e6abaa1bf03b27c2ed1487aef71f
parent 6f023376a1dae14a643cfaf833ec003756070243
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Tue,  8 Feb 2022 14:57:24 +0100

move checked FILE functions to util.c

while they are used only in sync.c, they are conceptually low-level.

Diffstat:
Msrc/common.h | 8++++++++
Msrc/sync.c | 35-----------------------------------
Msrc/util.c | 31+++++++++++++++++++++++++++++++
3 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/src/common.h b/src/common.h @@ -141,6 +141,14 @@ void ATTR_PRINTFLIKE(1, 0) vsys_error( const char *, va_list va ); void ATTR_PRINTFLIKE(1, 2) sys_error( const char *, ... ); void flushn( void ); +#if !defined(_POSIX_SYNCHRONIZED_IO) || _POSIX_SYNCHRONIZED_IO <= 0 +# define fdatasync fsync +#endif + +void ATTR_PRINTFLIKE(2, 0) vFprintf( FILE *f, const char *msg, va_list va ); +void ATTR_PRINTFLIKE(2, 3) Fprintf( FILE *f, const char *msg, ... ); +void Fclose( FILE *f, int safe ); + typedef struct string_list { struct string_list *next; char string[1]; diff --git a/src/sync.c b/src/sync.c @@ -14,10 +14,6 @@ #include <errno.h> #include <sys/stat.h> -#if !defined(_POSIX_SYNCHRONIZED_IO) || _POSIX_SYNCHRONIZED_IO <= 0 -# define fdatasync fsync -#endif - #define JOURNAL_VERSION "4" channel_conf_t global_conf; @@ -32,37 +28,6 @@ int trash_total[2], trash_done[2]; const char *str_fn[] = { "far side", "near side" }, *str_hl[] = { "push", "pull" }; -static void -Fclose( FILE *f, int safe ) -{ - if ((safe && (fflush( f ) || (UseFSync && fdatasync( fileno( f ) )))) || fclose( f ) == EOF) { - sys_error( "Error: cannot close file" ); - exit( 1 ); - } -} - -static void ATTR_PRINTFLIKE(2, 0) -vFprintf( FILE *f, const char *msg, va_list va ) -{ - int r; - - r = vfprintf( f, msg, va ); - if (r < 0) { - sys_error( "Error: cannot write file" ); - exit( 1 ); - } -} - -static void ATTR_PRINTFLIKE(2, 3) -Fprintf( FILE *f, const char *msg, ... ) -{ - va_list va; - - va_start( va, msg ); - vFprintf( f, msg, va ); - va_end( va ); -} - /* Keep the mailbox driver flag definitions in sync: */ /* grep for MAILBOX_DRIVER_FLAG */ diff --git a/src/util.c b/src/util.c @@ -174,6 +174,37 @@ sys_error( const char *msg, ... ) } void +vFprintf( FILE *f, const char *msg, va_list va ) +{ + int r; + + r = vfprintf( f, msg, va ); + if (r < 0) { + sys_error( "Error: cannot write file" ); + exit( 1 ); + } +} + +void +Fprintf( FILE *f, const char *msg, ... ) +{ + va_list va; + + va_start( va, msg ); + vFprintf( f, msg, va ); + va_end( va ); +} + +void +Fclose( FILE *f, int safe ) +{ + if ((safe && (fflush( f ) || (UseFSync && fdatasync( fileno( f ) )))) || fclose( f ) == EOF) { + sys_error( "Error: cannot close file" ); + exit( 1 ); + } +} + +void add_string_list_n( string_list_t **list, const char *str, uint len ) { string_list_t *elem;