#ifndef SYSTEM_H #define SYSTEM_H /* Routines for interacting with the system, mainly executing processes and * dealing with the file system. */ void __sys_check(int cond, const char *prefix, const char *file, int line); #define sys_check(COND, PREFIX) __sys_check(COND, PREFIX, __FILE__, __LINE__) /* Used when encrypting or decrypting a file, see the copy_file_with_encryption * function. */ enum encrypt { ENCRYPT, DECRYPT }; /* Return whether PATH exists in the file system. Exit if any non-"file not * fount" error occurs. */ int file_exists(const char *path); /* Copy the file whose path is IN at path OUT. OUT is created or overwritten if * needed. */ void copy_file(const char *in, const char *out); /* Like copy_file but with encryption, which is managed using GPG. */ void copy_file_with_encryption(const char *in, const char *out, enum encrypt encrypt); /* Execute command in a child process, then wait for the child to exit before * returning. If any error occurs, including in the child process, then if EXIT * is non-zero, exit, else return -1. Return 0 on success. */ int ftag_execvp(char *const *cmd, int can_exit); /* Create a temporary file containing INITIAL_CONTENT and open the editor to * edit it, then return the edited string. */ char *edit(const char *initial_content); /* Get the content of the open file FD as a heap-allocated string. The offset of * FD is set to zero as a side effect. */ char *file_to_string(int fd); #endif