X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_disk_lib.h;h=91cc1587a58387a39fa4eef11c892b7190a26238;hb=211fd52268a5ae7856273dd8d8b3b3ed427beadb;hp=46dd7c4c40ab24bfd503ae40fe1986f0b6bafa17;hpb=91ab799c42b2496e65afd0c866811999d88119ed;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_disk_lib.h b/src/include/gnunet_disk_lib.h index 46dd7c4c4..91cc1587a 100644 --- a/src/include/gnunet_disk_lib.h +++ b/src/include/gnunet_disk_lib.h @@ -31,20 +31,25 @@ #define OFF_T off_t #endif -/** - * Opaque handle used to access files. - */ -struct GNUNET_DISK_FileHandle; - /** * Handle used to manage a pipe. */ struct GNUNET_DISK_PipeHandle; - +/** + * Type of a handle. + */ enum GNUNET_FILE_Type { - GNUNET_DISK_FILE, GNUNET_PIPE + /** + * Handle represents a file. + */ + GNUNET_DISK_HANLDE_TYPE_FILE, + + /** + * Handle represents a pipe. + */ + GNUNET_DISK_HANLDE_TYPE_PIPE }; /** @@ -223,24 +228,25 @@ enum GNUNET_DISK_AccessPermissions /** - * Constants for specifying how to seek. + * Constants for specifying how to seek. Do not change values or order, + * some of the code depends on the specific numeric values! */ enum GNUNET_DISK_Seek { /** * Seek an absolute position (from the start of the file). */ - GNUNET_DISK_SEEK_SET, + GNUNET_DISK_SEEK_SET = 0, /** * Seek a relative position (from the current offset). */ - GNUNET_DISK_SEEK_CUR, + GNUNET_DISK_SEEK_CUR = 1, /** * Seek an absolute position from the end of the file. */ - GNUNET_DISK_SEEK_END + GNUNET_DISK_SEEK_END = 2 }; @@ -307,8 +313,8 @@ GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, OFF_T offset, /** - * Get the size of the file (or directory) - * of the given file (in bytes). + * Get the size of the file (or directory) of the given file (in + * bytes). * * @param filename name of the file or directory * @param size set to the size of the file (or, @@ -316,11 +322,13 @@ GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, OFF_T offset, * of all sizes of files in the directory) * @param includeSymLinks should symbolic links be * included? - * @return GNUNET_OK on success, GNUNET_SYSERR on error + * @param singleFileMode GNUNET_YES to only get size of one file + * and return GNUNET_SYSERR for directories. + * @return GNUNET_SYSERR on error, GNUNET_OK on success */ int GNUNET_DISK_file_size (const char *filename, uint64_t * size, - int includeSymLinks); + int includeSymLinks, int singleFileMode); /** @@ -358,6 +366,19 @@ char * GNUNET_DISK_mktemp (const char *t); +/** + * Create an (empty) temporary directory on disk. If the given name is not an + * absolute path, the current 'TMPDIR' will be prepended. In any case, 6 + * random characters will be appended to the name to create a unique name. + * + * @param t component to use for the name; + * does NOT contain "XXXXXX" or "/tmp/". + * @return NULL on error, otherwise name of freshly created directory + */ +char * +GNUNET_DISK_mkdtemp (const char *t); + + /** * Open a file. Note that the access permissions will only be * used if a new file is created and if the underlying operating @@ -389,7 +410,9 @@ GNUNET_DISK_file_handle_size (struct GNUNET_DISK_FileHandle *fh, /** * Creates an interprocess channel - * @param blocking creates an asynchronous pipe if set to GNUNET_NO + * + * @param blocking_read creates an asynchronous pipe for reading if set to GNUNET_NO + * @param blocking_write creates an asynchronous pipe for writing if set to GNUNET_NO * @param inherit_read 1 to make read handle inheritable, 0 otherwise (NT only) * @param inherit_write 1 to make write handle inheritable, 0 otherwise (NT only) * @return handle to the new pipe, NULL on error @@ -402,7 +425,8 @@ GNUNET_DISK_pipe (int blocking_read, int blocking_write, int inherit_read, int i * Creates a pipe object from a couple of file descriptors. * Useful for wrapping existing pipe FDs. * - * @param blocking creates an asynchronous pipe if set to GNUNET_NO + * @param blocking_read creates an asynchronous pipe for reading if set to GNUNET_NO + * @param blocking_write creates an asynchronous pipe for writing if set to GNUNET_NO * @param fd an array of two fd values. One of them may be -1 for read-only or write-only pipes * * @return handle to the new pipe, NULL on error @@ -410,6 +434,7 @@ GNUNET_DISK_pipe (int blocking_read, int blocking_write, int inherit_read, int i struct GNUNET_DISK_PipeHandle * GNUNET_DISK_pipe_from_fd (int blocking_read, int blocking_write, int fd[2]); + /** * Closes an interprocess channel * @param p pipe @@ -418,6 +443,7 @@ GNUNET_DISK_pipe_from_fd (int blocking_read, int blocking_write, int fd[2]); int GNUNET_DISK_pipe_close (struct GNUNET_DISK_PipeHandle *p); + /** * Closes one half of an interprocess channel * @@ -450,6 +476,17 @@ const struct GNUNET_DISK_FileHandle * GNUNET_DISK_pipe_handle (const struct GNUNET_DISK_PipeHandle *p, enum GNUNET_DISK_PipeEnd n); + +/** + * Get a handle from a native FD. + * + * @param fd native file descriptor + * @return file handle corresponding to the descriptor + */ +struct GNUNET_DISK_FileHandle * +GNUNET_DISK_get_handle_from_native (FILE *fd); + + /** * Read the contents of a binary file into a buffer. * @param h handle to an open file @@ -461,6 +498,7 @@ ssize_t GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, void *result, size_t len); + /** * Read the contents of a binary file into a buffer. * Guarantees not to block (returns GNUNET_SYSERR and sets errno to EAGAIN @@ -473,7 +511,8 @@ GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, void *result, */ ssize_t GNUNET_DISK_file_read_non_blocking (const struct GNUNET_DISK_FileHandle * h, - void *result, size_t len); + void *result, size_t len); + /** * Read the contents of a binary file into a buffer. @@ -601,7 +640,7 @@ GNUNET_DISK_directory_iterator_next (struct GNUNET_DISK_DirectoryIterator *iter, * @param dirName the name of the directory * @param callback the method to call for each file * @param callback_cls closure for callback - * @return GNUNET_YES if directory is not empty and @callback + * @return GNUNET_YES if directory is not empty and 'callback' * will be called later, GNUNET_NO otherwise, GNUNET_SYSERR on error. */ int @@ -641,11 +680,11 @@ GNUNET_DISK_directory_test (const char *fil); * Remove all files in a directory (rm -rf). Call with * caution. * - * @param fileName the file to remove + * @param filename the file to remove * @return GNUNET_OK on success, GNUNET_SYSERR on error */ int -GNUNET_DISK_directory_remove (const char *fileName); +GNUNET_DISK_directory_remove (const char *filename); /** @@ -756,36 +795,6 @@ GNUNET_DISK_file_unmap (struct GNUNET_DISK_MapHandle *h); int GNUNET_DISK_file_sync (const struct GNUNET_DISK_FileHandle *h); -/** - * Creates a named pipe/FIFO and opens it - * @param fn pointer to the name of the named pipe or to NULL - * @param flags open flags - * @param perm access permissions - * @return pipe handle on success, NULL on error - */ -struct GNUNET_DISK_FileHandle * -GNUNET_DISK_npipe_create (char **fn, enum GNUNET_DISK_OpenFlags flags, - enum GNUNET_DISK_AccessPermissions perm); - -/** - * Opens already existing named pipe/FIFO - * - * @param fn name of an existing named pipe - * @param flags open flags - * @param perm access permissions - * @return pipe handle on success, NULL on error - */ -struct GNUNET_DISK_FileHandle * -GNUNET_DISK_npipe_open (const char *fn, enum GNUNET_DISK_OpenFlags flags, - enum GNUNET_DISK_AccessPermissions perm); - -/** - * Closes a named pipe/FIFO - * @param pipe named pipe - * @return GNUNET_OK on success, GNUNET_SYSERR otherwise - */ -int -GNUNET_DISK_npipe_close (struct GNUNET_DISK_FileHandle *pipe); #if 0 /* keep Emacsens' auto-indent happy */ {