2002-01-10 15:22:17 +03:00
/*
2004-03-30 23:35:44 +04:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2007-08-21 00:55:30 +04:00
* Copyright ( C ) 2004 - 2007 Red Hat , Inc . All rights reserved .
2002-01-10 15:22:17 +03:00
*
2004-03-30 23:35:44 +04:00
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2007-08-21 00:55:30 +04:00
* of the GNU Lesser General Public License v .2 .1 .
2004-03-30 23:35:44 +04:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2004-03-30 23:35:44 +04:00
* along with this program ; if not , write to the Free Software Foundation ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2002-01-10 15:22:17 +03:00
*/
2006-05-10 01:23:51 +04:00
# ifndef _LVM_FILE_H
# define _LVM_FILE_H
2016-07-08 17:47:51 +03:00
struct custom_fds {
int out ;
int err ;
int report ;
} ;
2002-01-10 15:22:17 +03:00
/*
* Create a temporary filename , and opens a descriptor to the file .
*/
2008-12-07 07:27:56 +03:00
int create_temp_name ( const char * dir , char * buffer , size_t len , int * fd ,
unsigned * seed ) ;
2002-01-10 15:22:17 +03:00
/*
* NFS - safe rename of a temporary file to a common name , designed
* to avoid race conditions and not overwrite the destination if
* it exists .
*/
int lvm_rename ( const char * old , const char * new ) ;
2002-02-11 18:42:34 +03:00
/*
* Return 1 if path exists else return 0
*/
int path_exists ( const char * path ) ;
int dir_exists ( const char * path ) ;
2024-02-01 16:14:02 +03:00
int dir_create ( const char * path , int mode ) ;
int dir_create_recursive ( const char * path , int mode ) ;
2002-02-11 18:42:34 +03:00
2002-12-06 01:51:15 +03:00
/* Sync directory changes */
void sync_dir ( const char * file ) ;
2006-05-10 01:23:51 +04:00
2006-11-04 06:34:10 +03:00
/* fcntl locking wrappers */
int fcntl_lock_file ( const char * file , short lock_type , int warn_if_read_only ) ;
void fcntl_unlock_file ( int lockfd ) ;
2007-07-20 19:22:46 +04:00
# define is_same_inode(buf1, buf2) \
( ( buf1 ) . st_ino = = ( buf2 ) . st_ino & & \
( buf1 ) . st_dev = = ( buf2 ) . st_dev )
2012-08-27 15:07:07 +04:00
# define is_valid_fd(fd) (!(fcntl(fd, F_GETFD) == -1 && errno == EBADF))
2007-07-24 21:48:08 +04:00
/*
* Close the specified stream , taking care to detect and diagnose any write
* error . If there is an error , use the supplied file name in a diagnostic
* that is reported via log_error or log_sys_error , as appropriate .
* Use this function to close a stream when you ' ve written data to it via
* unchecked fprintf , fputc , etc . calls . Return 0 on success , EOF on failure .
*/
int lvm_fclose ( FILE * fp , const char * filename ) ;
2015-03-18 12:54:08 +03:00
/*
* Convert stat - > st_ctim status of last change in nanoseconds
* uses st_ctime when not available .
*/
void lvm_stat_ctim ( struct timespec * ts , const struct stat * buf ) ;
/* Inspired by <sys/time.h> timercmp() macro for timeval */
# define timespeccmp(tsp, usp, cmp)\
( ( ( tsp ) - > tv_sec = = ( usp ) - > tv_sec ) ? \
( ( tsp ) - > tv_nsec cmp ( usp ) - > tv_nsec ) : \
( ( tsp ) - > tv_sec cmp ( usp ) - > tv_sec ) )
2006-05-10 01:23:51 +04:00
# endif