Add file module with calls for daily file operations
This commit is contained in:
parent
0d6fca9b26
commit
4ba00ca17a
|
@ -0,0 +1,85 @@
|
|||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||
* Please, refer LICENSE file for legal information
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/**
|
||||
* @file file.c
|
||||
* @author Ilja Kartašov <ik@lowenware.com>
|
||||
* @brief
|
||||
*
|
||||
* @see https://lowenware.com/
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <sys/sendfile.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include "file.h"
|
||||
|
||||
|
||||
bool
|
||||
cstuff_file_exists(const char *file)
|
||||
{
|
||||
return ( access( file, F_OK ) != -1 ) ? true : false;
|
||||
}
|
||||
|
||||
|
||||
CStuffRetcode
|
||||
cstuff_file_copy(const char *src, const char *dest)
|
||||
{
|
||||
CStuffRetcode rc = CSTUFF_SYSCALL_ERROR;
|
||||
int fd_src = open(src, O_RDWR), fd_dest, len;
|
||||
struct stat src_stat;
|
||||
|
||||
if (!(fd_src < 0)) {
|
||||
if (lockf(fd_src, F_LOCK, 0) != -1) {
|
||||
if (!stat(src, &src_stat)) {
|
||||
fd_dest = open(dest, O_CREAT | O_WRONLY | O_TRUNC);
|
||||
if (!(fd_dest < 0)) {
|
||||
len = sendfile(fd_dest, fd_src, NULL, src_stat.st_size);
|
||||
if (len == src_stat.st_size) {
|
||||
rc = CSTUFF_SUCCESS;
|
||||
} else {
|
||||
fprintf(stderr, "sendfile error (%d != %d): %s\n", len,
|
||||
(int)src_stat.st_size, strerror(errno));
|
||||
}
|
||||
close(fd_dest);
|
||||
} else {
|
||||
fprintf(stderr, "dest open() error\n");
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "src stat() error\n");
|
||||
}
|
||||
if (lockf(fd_src, F_TEST, 0) == 0){
|
||||
lockf(fd_src, F_ULOCK, 0);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "src lockf() error\n");
|
||||
}
|
||||
close(fd_src);
|
||||
} else {
|
||||
fprintf(stderr, "src open() error\n");
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
CStuffRetcode
|
||||
cstuff_file_move(const char *src, const char *dest)
|
||||
{
|
||||
CStuffRetcode rc;
|
||||
|
||||
if (!(rc = cstuff_file_copy(src, dest))) {
|
||||
if (unlink(src) != 0)
|
||||
return CSTUFF_SYSCALL_ERROR;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||
* Please, refer LICENSE file for legal information
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/**
|
||||
* @file file.h
|
||||
* @author Ilja Kartašov <ik@lowenware.com>
|
||||
* @brief
|
||||
*
|
||||
* @see https://lowenware.com/
|
||||
*/
|
||||
|
||||
#ifndef CSTUFF_FILE_H_3C3D5EDC_A624_4550_98A4_29AD5A41301D
|
||||
#define CSTUFF_FILE_H_3C3D5EDC_A624_4550_98A4_29AD5A41301D
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "retcode.h"
|
||||
|
||||
|
||||
bool
|
||||
cstuff_file_exists(const char *file);
|
||||
|
||||
|
||||
CStuffRetcode
|
||||
cstuff_file_copy(const char *src, const char *dest);
|
||||
|
||||
|
||||
CStuffRetcode
|
||||
cstuff_file_move(const char *src, const char *dest);
|
||||
|
||||
|
||||
#endif /* !FILE_H */
|
Loading…
Reference in New Issue