X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_disk_lib.h;h=be28854600c1f6c27deaff9ba55118d643b67415;hb=ca391c48238c36462ca11be9299cc7c9a09e6bbe;hp=b5f0ccdda510919652385d7de99afbd35b62cb91;hpb=2ebfdbbe8af9eef26ad1a2776a20227715560558;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_disk_lib.h b/src/include/gnunet_disk_lib.h index b5f0ccdda..be2885460 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-2012 Christian Grothoff (and other contributing authors) + Copyright (C) 2001-2012 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,23 +14,22 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** - * @file include/gnunet_disk_lib.h - * @brief disk IO apis * @author Christian Grothoff + * + * @file + * Disk IO APIs + * + * @defgroup disk Disk library + * Disk IO APIs + * @{ */ #ifndef GNUNET_DISK_LIB_H #define GNUNET_DISK_LIB_H -#if WINDOWS -#define OFF_T uint64_t -#else -#define OFF_T off_t -#endif - /** * Handle used to manage a pipe. */ @@ -41,10 +40,15 @@ struct GNUNET_DISK_PipeHandle; */ enum GNUNET_FILE_Type { + /** + * Handle represents an event. + */ + GNUNET_DISK_HANLDE_TYPE_EVENT, + /** * Handle represents a file. - */ - GNUNET_DISK_HANLDE_TYPE_FILE, + */ + GNUNET_DISK_HANLDE_TYPE_FILE, /** * Handle represents a pipe. @@ -157,7 +161,7 @@ enum GNUNET_DISK_MapType * Read-only memory map. */ GNUNET_DISK_MAP_TYPE_READ = 1, - + /** * Write-able memory map. */ @@ -271,7 +275,7 @@ enum GNUNET_DISK_PipeEnd * Checks whether a handle is invalid * * @param h handle to check - * @return GNUNET_YES if invalid, GNUNET_NO if valid + * @return #GNUNET_YES if invalid, #GNUNET_NO if valid */ int GNUNET_DISK_handle_invalid (const struct GNUNET_DISK_FileHandle *h); @@ -307,8 +311,8 @@ GNUNET_DISK_file_backup (const char *fil); * @param whence specification to which position the offset parameter relates to * @return the new position on success, GNUNET_SYSERR otherwise */ -OFF_T -GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, OFF_T offset, +off_t +GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, off_t offset, enum GNUNET_DISK_Seek whence); @@ -327,8 +331,9 @@ GNUNET_DISK_file_seek (const struct GNUNET_DISK_FileHandle *h, OFF_T offset, * @return #GNUNET_SYSERR on error, #GNUNET_OK on success */ int -GNUNET_DISK_file_size (const char *filename, uint64_t *size, - int include_symbolic_links, +GNUNET_DISK_file_size (const char *filename, + uint64_t *size, + int include_symbolic_links, int single_file_mode); @@ -345,10 +350,10 @@ GNUNET_DISK_file_size (const char *filename, uint64_t *size, * @param filename name of the file * @param dev set to the device ID * @param ino set to the inode ID - * @return GNUNET_OK on success + * @return #GNUNET_OK on success */ int -GNUNET_DISK_file_get_identifiers (const char *filename, +GNUNET_DISK_file_get_identifiers (const char *filename, uint64_t *dev, uint64_t *ino); @@ -394,7 +399,7 @@ GNUNET_DISK_mkdtemp (const char *t); * @return IO handle on success, NULL on error */ struct GNUNET_DISK_FileHandle * -GNUNET_DISK_file_open (const char *fn, +GNUNET_DISK_file_open (const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm); @@ -408,7 +413,7 @@ GNUNET_DISK_file_open (const char *fn, */ int GNUNET_DISK_file_handle_size (struct GNUNET_DISK_FileHandle *fh, - OFF_T *size); + off_t *size); /** @@ -421,9 +426,9 @@ GNUNET_DISK_file_handle_size (struct GNUNET_DISK_FileHandle *fh, * @return handle to the new pipe, NULL on error */ struct GNUNET_DISK_PipeHandle * -GNUNET_DISK_pipe (int blocking_read, - int blocking_write, - int inherit_read, +GNUNET_DISK_pipe (int blocking_read, + int blocking_write, + int inherit_read, int inherit_write); @@ -438,8 +443,8 @@ GNUNET_DISK_pipe (int blocking_read, * @return handle to the new pipe, NULL on error */ struct GNUNET_DISK_PipeHandle * -GNUNET_DISK_pipe_from_fd (int blocking_read, - int blocking_write, +GNUNET_DISK_pipe_from_fd (int blocking_read, + int blocking_write, int fd[2]); @@ -514,6 +519,20 @@ struct GNUNET_DISK_FileHandle * GNUNET_DISK_get_handle_from_w32_handle (HANDLE osfh); #endif +/** + * Update POSIX permissions mask of a file on disk. If both argumets + * are #GNUNET_NO, the file is made world-read-write-executable (777). + * Does nothing on W32. + * + * @param fn name of the file to update + * @param require_uid_match #GNUNET_YES means 700 + * @param require_gid_match #GNUNET_YES means 770 unless @a require_uid_match is set + */ +void +GNUNET_DISK_fix_permissions (const char *fn, + int require_uid_match, + int require_gid_match); + /** * Get a handle from a native integer FD. @@ -544,7 +563,7 @@ GNUNET_DISK_get_handle_from_native (FILE *fd); * @return the number of bytes read on success, #GNUNET_SYSERR on failure */ ssize_t -GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, +GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, void *result, size_t len); @@ -575,7 +594,7 @@ GNUNET_DISK_file_read_non_blocking (const struct GNUNET_DISK_FileHandle * h, */ ssize_t GNUNET_DISK_fn_read (const char *fn, - void *result, + void *result, size_t len); @@ -589,7 +608,7 @@ GNUNET_DISK_fn_read (const char *fn, */ ssize_t GNUNET_DISK_file_write (const struct GNUNET_DISK_FileHandle *h, - const void *buffer, + const void *buffer, size_t n); @@ -603,7 +622,7 @@ GNUNET_DISK_file_write (const struct GNUNET_DISK_FileHandle *h, */ ssize_t GNUNET_DISK_file_write_blocking (const struct GNUNET_DISK_FileHandle *h, - const void *buffer, + const void *buffer, size_t n); @@ -619,7 +638,7 @@ GNUNET_DISK_file_write_blocking (const struct GNUNET_DISK_FileHandle *h, */ ssize_t GNUNET_DISK_fn_write (const char *fn, - const void *buffer, + const void *buffer, size_t n, enum GNUNET_DISK_AccessPermissions mode); @@ -632,7 +651,8 @@ GNUNET_DISK_fn_write (const char *fn, * @return #GNUNET_OK on success, #GNUNET_SYSERR on error */ int -GNUNET_DISK_file_copy (const char *src, const char *dst); +GNUNET_DISK_file_copy (const char *src, + const char *dst); /** @@ -649,64 +669,6 @@ GNUNET_DISK_directory_scan (const char *dir_name, void *callback_cls); -/** - * Opaque handle used for iterating over a directory. - */ -struct GNUNET_DISK_DirectoryIterator; - - -/** - * Function called to iterate over a directory. - * - * @param cls closure - * @param di argument to pass to #GNUNET_DISK_directory_iterator_next to - * get called on the next entry (or finish cleanly); - * NULL on error (will be the last call in that case) - * @param filename complete filename (absolute path) - * @param dirname directory name (absolute path) - */ -typedef void (*GNUNET_DISK_DirectoryIteratorCallback) (void *cls, - struct GNUNET_DISK_DirectoryIterator *di, - const char *filename, - const char *dirname); - - -/** - * This function must be called during the DiskIteratorCallback - * (exactly once) to schedule the task to process the next - * filename in the directory (if there is one). - * - * @param iter opaque handle for the iterator - * @param can set to #GNUNET_YES to terminate the iteration early - * @return #GNUNET_YES if iteration will continue, - * #GNUNET_NO if this was the last entry (and iteration is complete), - * #GNUNET_SYSERR if @a can was #GNUNET_YES - */ -int -GNUNET_DISK_directory_iterator_next (struct GNUNET_DISK_DirectoryIterator *iter, - int can); - - -/** - * Scan a directory for files using the scheduler to run a task for - * each entry. The name of the directory must be expanded first (!). - * If a scheduler does not need to be used, GNUNET_DISK_directory_scan - * may provide a simpler API. - * - * @param prio priority to use - * @param dir_name the name of the directory - * @param callback the method to call for each file - * @param callback_cls closure for @a callback - * @return #GNUNET_YES if directory is not empty and @a callback - * will be called later, #GNUNET_NO otherwise, #GNUNET_SYSERR on error. - */ -int -GNUNET_DISK_directory_iterator_start (enum GNUNET_SCHEDULER_Priority prio, - const char *dir_name, - GNUNET_DISK_DirectoryIteratorCallback - callback, void *callback_cls); - - /** * Create the directory structure for storing * a file. @@ -766,9 +728,9 @@ GNUNET_DISK_directory_create (const char *dir); * @return #GNUNET_OK on success, #GNUNET_SYSERR on error */ int -GNUNET_DISK_file_lock (struct GNUNET_DISK_FileHandle *fh, - OFF_T lock_start, - OFF_T lock_end, int excl); +GNUNET_DISK_file_lock (struct GNUNET_DISK_FileHandle *fh, + off_t lock_start, + off_t lock_end, int excl); /** @@ -780,9 +742,9 @@ GNUNET_DISK_file_lock (struct GNUNET_DISK_FileHandle *fh, * @return #GNUNET_OK on success, #GNUNET_SYSERR on error */ int -GNUNET_DISK_file_unlock (struct GNUNET_DISK_FileHandle *fh, - OFF_T unlock_start, - OFF_T unlock_end); +GNUNET_DISK_file_unlock (struct GNUNET_DISK_FileHandle *fh, + off_t unlock_start, + off_t unlock_end); /** @@ -800,26 +762,8 @@ GNUNET_DISK_filename_canonicalize (char *fn); * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure */ int -GNUNET_DISK_file_change_owner (const char *filename, const char *user); - - -/** - * Construct full path to a file inside of the private - * directory used by GNUnet. Also creates the corresponding - * directory. If the resulting name is supposed to be - * a directory, end the last argument in '/' (or pass - * DIR_SEPARATOR_STR as the last argument before NULL). - * - * @param cfg configuration to use - * @param service_name name of the service asking - * @param ... is NULL-terminated list of - * path components to append to the - * private directory name. - * @return the constructed filename - */ -char * -GNUNET_DISK_get_home_filename (const struct GNUNET_CONFIGURATION_Handle *cfg, - const char *service_name, ...); +GNUNET_DISK_file_change_owner (const char *filename, + const char *user); /** @@ -838,7 +782,9 @@ struct GNUNET_DISK_MapHandle; void * GNUNET_DISK_file_map (const struct GNUNET_DISK_FileHandle *h, struct GNUNET_DISK_MapHandle **m, - enum GNUNET_DISK_MapType access, size_t len); + enum GNUNET_DISK_MapType access, + size_t len); + /** * Unmap a file @@ -849,10 +795,12 @@ GNUNET_DISK_file_map (const struct GNUNET_DISK_FileHandle *h, 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 + * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise */ int GNUNET_DISK_file_sync (const struct GNUNET_DISK_FileHandle *h); @@ -865,7 +813,9 @@ GNUNET_DISK_file_sync (const struct GNUNET_DISK_FileHandle *h); } #endif - /* ifndef GNUNET_DISK_LIB_H */ #endif + +/** @} */ /* end of group */ + /* end of gnunet_disk_lib.h */