X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Finclude%2Fgnunet_disk_lib.h;h=f4fd6f36b6f1cf71df4021372aee5b27bda63e01;hb=57df0fbf8398720fbd4a9cf34934c212ea00ee54;hp=23a4789fa1f5127ca68a80bfa52e5c3e6aa47571;hpb=1088905b5a89a24706d2c1877d289589e3f3c222;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_disk_lib.h b/src/include/gnunet_disk_lib.h index 23a4789fa..f4fd6f36b 100644 --- a/src/include/gnunet_disk_lib.h +++ b/src/include/gnunet_disk_lib.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2001, 2002, 2003, 2004, 2005, 2006 Christian Grothoff (and other contributing authors) + (C) 2001, 2002, 2003, 2004, 2005, 2006, 2009 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -28,7 +28,6 @@ #include "gnunet_configuration_lib.h" #include "gnunet_scheduler_lib.h" -#include "gnunet_io_lib.h" /* we need size_t, and since it can be both unsigned int or unsigned long long, this IS platform dependent; @@ -73,7 +72,16 @@ extern "C" #define GNUNET_DISK_PERM_OTHER_WRITE 128 #define GNUNET_DISK_PERM_OTHER_EXEC 256 -enum GNUNET_DISK_Seek {GNUNET_SEEK_SET, GNUNET_SEEK_CUR, GNUNET_SEEK_END}; +enum GNUNET_DISK_Seek + { + GNUNET_DISK_SEEK_SET, + GNUNET_DISK_SEEK_CUR, + GNUNET_DISK_SEEK_END + }; + +struct GNUNET_DISK_FileHandle; + +struct GNUNET_DISK_PipeHandle; /** * Get the number of blocks that are left on the partition that @@ -85,6 +93,14 @@ enum GNUNET_DISK_Seek {GNUNET_SEEK_SET, GNUNET_SEEK_CUR, GNUNET_SEEK_END}; long GNUNET_DISK_get_blocks_available (const char *part); +/** + * Checks whether a handle is invalid + * @param h handle to check + * @return GNUNET_YES if invalid, GNUNET_NO if valid + */ +int GNUNET_DISK_handle_invalid (const struct GNUNET_DISK_FileHandle *h); + + /** * Check that fil corresponds to a filename * (of a file that exists and that is not a directory). @@ -103,7 +119,7 @@ int GNUNET_DISK_file_test (const char *fil); * @return the new position on success, GNUNET_SYSERR otherwise */ off_t -GNUNET_DISK_file_seek (const struct GNUNET_IO_Handle *h, off_t offset, +GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, off_t offset, enum GNUNET_DISK_Seek whence); @@ -117,7 +133,19 @@ GNUNET_DISK_file_seek (const struct GNUNET_IO_Handle *h, off_t offset, * @return GNUNET_OK on success, GNUNET_SYSERR on error */ int GNUNET_DISK_file_size (const char *filename, - unsigned long long *size, int includeSymLinks); + unsigned long long *size, int includeSymLinks); + + +/** + * Create an (empty) temporary file on disk. + * + * @param template component to use for the name; + * does NOT contain "XXXXXX" or "/tmp/". + * @return NULL on error, otherwise name of fresh + * file on disk in directory for temporary files + */ +char * +GNUNET_DISK_mktemp (const char *template); /** @@ -127,16 +155,38 @@ int GNUNET_DISK_file_size (const char *filename, * @param perm permissions for the newly created file * @return IO handle on success, NULL on error */ -struct GNUNET_IO_Handle *GNUNET_DISK_file_open (const char *fn, int flags, ...); +struct GNUNET_DISK_FileHandle *GNUNET_DISK_file_open (const char *fn, int flags, ...); + +/** + * Creates an interprocess channel + * @param blocking creates an asynchronous pipe if set to GNUNET_NO + * @return handle to the new pipe, NULL on error + */ +struct GNUNET_DISK_PipeHandle *GNUNET_DISK_pipe (int blocking); +/** + * Closes an interprocess channel + * @param p pipe + * @return GNUNET_OK on success, GNUNET_SYSERR otherwise + */ +int GNUNET_DISK_pipe_close (struct GNUNET_DISK_PipeHandle *p); /** - * Close an open file + * Close an open file. + * * @param h file handle * @return GNUNET_OK on success, GNUNET_SYSERR otherwise */ -int GNUNET_DISK_file_close (struct GNUNET_IO_Handle **h); +int GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h); +/** + * Get the handle to a particular pipe end + * @param p pipe + * @param n number of the end + */ +const struct GNUNET_DISK_FileHandle *GNUNET_DISK_pipe_handle (const struct + GNUNET_DISK_PipeHandle + *p, int n); /** * Read the contents of a binary file into a buffer. @@ -145,7 +195,8 @@ int GNUNET_DISK_file_close (struct GNUNET_IO_Handle **h); * @param len the maximum number of bytes to read * @return the number of bytes read on success, GNUNET_SYSERR on failure */ -int GNUNET_DISK_file_read (const struct GNUNET_IO_Handle *h, void *result, int len); +ssize_t GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, void *result, + size_t len); /** @@ -153,31 +204,38 @@ int GNUNET_DISK_file_read (const struct GNUNET_IO_Handle *h, void *result, int l * @param fn file name * @param result the buffer to write the result to * @param len the maximum number of bytes to read - * @return the number of bytes read on success, GNUNET_SYSERR on failure + * @return number of bytes read, GNUNET_SYSERR on failure */ -int GNUNET_DISK_fn_read (const char * const fn, void *result, int len); +ssize_t GNUNET_DISK_fn_read (const char * const fn, void *result, + size_t len); /** * Write a buffer to a file. + * * @param h handle to open file * @param buffer the data to write * @param n number of bytes to write - * @return number of bytes written on success, GNUNET_SYSERR on error + * @return GNUNET_OK on success, GNUNET_SYSERR on error */ -int GNUNET_DISK_file_write (const struct GNUNET_IO_Handle *h, const void *buffer, - unsigned int n); +ssize_t GNUNET_DISK_file_write (const struct GNUNET_DISK_FileHandle *h, + const void *buffer, + size_t n); /** - * Write a buffer to a file. + * Write a buffer to a file. If the file is longer than + * the given buffer size, it will be truncated. + * * @param fn file name * @param buffer the data to write * @param n number of bytes to write * @return number of bytes written on success, GNUNET_SYSERR on error */ -int GNUNET_DISK_fn_write (const char * const fn, const void *buffer, - unsigned int n, int mode); +ssize_t GNUNET_DISK_fn_write (const char * fn, + const void *buffer, + size_t n, + int mode); /** @@ -197,7 +255,8 @@ int GNUNET_DISK_file_copy (const char *src, const char *dst); * @return the number of files found, -1 on error */ int GNUNET_DISK_directory_scan (const char *dirName, - GNUNET_FileNameCallback callback, void *data); + GNUNET_FileNameCallback callback, + void *data); /** @@ -308,7 +367,7 @@ int GNUNET_DISK_directory_create (const char *dir); * @return GNUNET_OK on success, GNUNET_SYSERR on error */ int -GNUNET_DISK_file_lock(struct GNUNET_IO_Handle *fh, off_t lockStart, +GNUNET_DISK_file_lock(struct GNUNET_DISK_FileHandle *fh, off_t lockStart, off_t lockEnd); @@ -341,35 +400,41 @@ int GNUNET_DISK_file_change_owner (const char *filename, const char *user); * private directory name. * @return the constructed filename */ -char *GNUNET_DISK_get_home_filename (struct GNUNET_CONFIGURATION_Handle *cfg, +char *GNUNET_DISK_get_home_filename (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *serviceName, ...); + +/** + * Opaque handle for a memory-mapping operation. + */ +struct GNUNET_DISK_MapHandle; + /** * Map a file into memory * @param h open file handle - * @param m handle to the new mapping + * @param m handle to the new mapping (will be set) * @param access access specification, GNUNET_DISK_MAP_xxx * @param len size of the mapping * @return pointer to the mapped memory region, NULL on failure */ -void *GNUNET_DISK_file_map (const struct GNUNET_IO_Handle *h, struct GNUNET_IO_Handle **m, - int access, size_t len); +void *GNUNET_DISK_file_map (const struct GNUNET_DISK_FileHandle *h, + struct GNUNET_DISK_MapHandle **m, + int access, size_t len); /** * Unmap a file + * * @param h mapping handle - * @param addr pointer to the mapped memory region - * @param len size of the mapping * @return GNUNET_OK on success, GNUNET_SYSERR otherwise */ -int GNUNET_DISK_file_unmap (struct GNUNET_IO_Handle **h, void *addr, size_t len); +int GNUNET_DISK_file_unmap (struct GNUNET_DISK_MapHandle *h); /** * Write file changes to disk * @param h handle to an open file * @return GNUNET_OK on success, GNUNET_SYSERR otherwise */ -int GNUNET_DISK_file_sync (const struct GNUNET_IO_Handle *h); +int GNUNET_DISK_file_sync (const struct GNUNET_DISK_FileHandle *h); #if 0 /* keep Emacsens' auto-indent happy */ {