merk/include/file.h

66 lines
1.3 KiB
C

#ifndef FILE_H
#define FILE_H
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/stat.h>
#include <math.h>
#include <zlib.h>
#include <errno.h>
#include <dirent.h>
#include <unistd.h>
#include <fcntl.h>
#ifdef _WIN32
#include <windows.h>
#ifndef PATH_MAX
#define PATH_MAX MAX_PATH
#endif
#else
#include <limits.h>
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
#endif
#include "hash.h"
#include "list.h"
#include "action_list.h"
#include "common.h"
typedef struct {
char** content;
uint64_t lines;
} File;
typedef struct {
mode_t mode;
char* name;
char* hash;
} FileInfo;
typedef List FileInfoBuffer;
typedef struct {
uint32_t insertions;
uint32_t deletions;
} Changes;
File* new_empty_file();
File* new_file(const char*);
File* from_string(char*);
File* slice_file(File*, uint64_t, uint64_t);
File* copy_file(File* original);
int insert_line(File*, char*, size_t);
int delete_line(File*, size_t);
int snapshot_file(char*, char*, size_t, char*, char*);
void free_file(File*);
FileInfoBuffer* file_info_buffer_new();
int file_info_buffer_push(FileInfoBuffer*, FileInfo);
void file_info_buffer_free(FileInfoBuffer*);
void file_info_buffer_sort(FileInfoBuffer*);
FileInfo* file_info_buffer_search(FileInfoBuffer*, const char*);
#endif // FILE_H