diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2014-05-09 15:33:00 -0400 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2014-05-09 15:33:00 -0400 |
commit | 1a3ee71de258b416ca6b80f0a9e3b91460df8dc7 (patch) | |
tree | a59167e50add55b51ed31c65944cfa78ddd1c290 /src/memfile.c | |
parent | f3dda65de157f2d7c35286018c20cbc7597ed748 (diff) | |
parent | eae498c4c5d34c1d0af40ecb430cbbc23b0a8e97 (diff) | |
download | rneovim-1a3ee71de258b416ca6b80f0a9e3b91460df8dc7.tar.gz rneovim-1a3ee71de258b416ca6b80f0a9e3b91460df8dc7.tar.bz2 rneovim-1a3ee71de258b416ca6b80f0a9e3b91460df8dc7.zip |
Merge pull request #619 from stefan991/mch_stat-cleanup
Replace `struct stat` with `FileInfo`
Diffstat (limited to 'src/memfile.c')
-rw-r--r-- | src/memfile.c | 48 |
1 files changed, 10 insertions, 38 deletions
diff --git a/src/memfile.c b/src/memfile.c index 5330fb7fc5..9431101d8d 100644 --- a/src/memfile.c +++ b/src/memfile.c @@ -46,25 +46,6 @@ #include "ui.h" #include "os/os.h" -/* - * Some systems have the page size in statfs.f_bsize, some in stat.st_blksize - */ -#ifdef HAVE_ST_BLKSIZE -# define STATFS stat -# define F_BSIZE st_blksize -# define fstatfs(fd, buf, len, nul) mch_fstat((fd), (buf)) -#else -# ifdef HAVE_SYS_STATFS_H -# include <sys/statfs.h> -# define STATFS statfs -# define F_BSIZE f_bsize -# endif -#endif - -/* - * for Amiga Dos 2.0x we use Flush - */ - #define MEMFILE_PAGE_SIZE 4096 /* default page size */ static long_u total_mem_used = 0; /* total memory used for memfiles */ @@ -125,10 +106,6 @@ memfile_T *mf_open(char_u *fname, int flags) { memfile_T *mfp; off_t size; -#if defined(STATFS) && defined(UNIX) && !defined(__QNX__) && !defined(__minix) -# define USE_FSTATFS - struct STATFS stf; -#endif if ((mfp = (memfile_T *)alloc((unsigned)sizeof(memfile_T))) == NULL) return NULL; @@ -157,7 +134,6 @@ memfile_T *mf_open(char_u *fname, int flags) mfp->mf_page_size = MEMFILE_PAGE_SIZE; mfp->mf_old_key = NULL; -#ifdef USE_FSTATFS /* * Try to set the page size equal to the block size of the device. * Speeds up I/O a lot. @@ -165,12 +141,13 @@ memfile_T *mf_open(char_u *fname, int flags) * in ml_recover(). The size used here may be wrong, therefore * mf_blocknr_max must be rounded up. */ + FileInfo file_info; if (mfp->mf_fd >= 0 - && fstatfs(mfp->mf_fd, &stf, sizeof(struct statfs), 0) == 0 - && stf.F_BSIZE >= MIN_SWAP_PAGE_SIZE - && stf.F_BSIZE <= MAX_SWAP_PAGE_SIZE) - mfp->mf_page_size = stf.F_BSIZE; -#endif + && os_get_file_info_fd(mfp->mf_fd, &file_info) + && file_info.stat.st_blksize >= MIN_SWAP_PAGE_SIZE + && file_info.stat.st_blksize <= MAX_SWAP_PAGE_SIZE) { + mfp->mf_page_size = file_info.stat.st_blksize; + } if (mfp->mf_fd < 0 || (flags & (O_TRUNC|O_EXCL)) || (size = lseek(mfp->mf_fd, (off_t)0L, SEEK_END)) <= 0) @@ -1064,10 +1041,6 @@ mf_do_open ( int flags /* flags for open() */ ) { -#ifdef HAVE_LSTAT - struct stat sb; -#endif - mfp->mf_fname = fname; /* @@ -1077,17 +1050,16 @@ mf_do_open ( */ mf_set_ffname(mfp); -#ifdef HAVE_LSTAT /* * Extra security check: When creating a swap file it really shouldn't * exist yet. If there is a symbolic link, this is most likely an attack. */ - if ((flags & O_CREAT) && mch_lstat((char *)mfp->mf_fname, &sb) >= 0) { + FileInfo file_info; + if ((flags & O_CREAT) + && os_get_file_info_link((char *)mfp->mf_fname, &file_info)) { mfp->mf_fd = -1; EMSG(_("E300: Swap file already exists (symlink attack?)")); - } else -#endif - { + } else { /* * try to open the file */ |