#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.
*/
{
/**
* Handle represents a file.
- */
- GNUNET_DISK_HANLDE_TYPE_FILE,
+ */
+ GNUNET_DISK_HANLDE_TYPE_FILE,
/**
* Handle represents a pipe.
* Read-only memory map.
*/
GNUNET_DISK_MAP_TYPE_READ = 1,
-
+
/**
* Write-able memory map.
*/
* 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);
* (of a file that exists and that is not a directory).
*
* @param fil filename to check
- * @return GNUNET_YES if yes, GNUNET_NO if not a file, GNUNET_SYSERR if something
+ * @return #GNUNET_YES if yes, #GNUNET_NO if not a file, #GNUNET_SYSERR if something
* else (will print an error message in that case, too).
*/
int
* @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);
* @param size set to the size of the file (or,
* in the case of directories, the sum
* of all sizes of files in the directory)
- * @param includeSymLinks should symbolic links be
+ * @param include_symbolic_links should symbolic links be
* included?
- * @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
+ * @param single_file_mode #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 singleFileMode);
+GNUNET_DISK_file_size (const char *filename, uint64_t *size,
+ int include_symbolic_links,
+ int single_file_mode);
/**
* @return GNUNET_OK on success
*/
int
-GNUNET_DISK_file_get_identifiers (const char *filename, uint64_t * dev,
- uint64_t * ino);
+GNUNET_DISK_file_get_identifiers (const char *filename,
+ uint64_t *dev,
+ uint64_t *ino);
/**
* @return IO handle on success, NULL on error
*/
struct GNUNET_DISK_FileHandle *
-GNUNET_DISK_file_open (const char *fn, enum GNUNET_DISK_OpenFlags flags,
+GNUNET_DISK_file_open (const char *fn,
+ enum GNUNET_DISK_OpenFlags flags,
enum GNUNET_DISK_AccessPermissions perm);
*/
int
GNUNET_DISK_file_handle_size (struct GNUNET_DISK_FileHandle *fh,
- OFF_T *size);
+ off_t *size);
/**
* @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, int inherit_write);
+GNUNET_DISK_pipe (int blocking_read,
+ int blocking_write,
+ int inherit_read,
+ int inherit_write);
/**
* @return handle to the new pipe, NULL on error
*/
struct GNUNET_DISK_PipeHandle *
-GNUNET_DISK_pipe_from_fd (int blocking_read, int blocking_write, int fd[2]);
+GNUNET_DISK_pipe_from_fd (int blocking_read,
+ int blocking_write,
+ int fd[2]);
/**
*/
struct GNUNET_DISK_FileHandle *
GNUNET_DISK_get_handle_from_w32_handle (HANDLE osfh);
+#else
+
+/**
+ * Update POSIX permissions mask of a file on disk. If both argumets
+ * are #GNUNET_NO, the file is made world-read-write-executable (777).
+ *
+ * @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);
+
#endif
/**
* Read the contents of a binary file into a buffer.
+ *
* @param h handle to an open file
* @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
*/
ssize_t
-GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h, void *result,
+GNUNET_DISK_file_read (const struct GNUNET_DISK_FileHandle *h,
+ void *result,
size_t len);
*/
ssize_t
GNUNET_DISK_fn_read (const char *fn,
- void *result,
+ void *result,
size_t len);
*/
ssize_t
GNUNET_DISK_file_write (const struct GNUNET_DISK_FileHandle *h,
- const void *buffer, size_t n);
+ const void *buffer,
+ size_t n);
/**
* Write a buffer to a file, blocking, if necessary.
+ *
* @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
*/
ssize_t
-GNUNET_DISK_file_write_blocking (const struct GNUNET_DISK_FileHandle * h,
- const void *buffer,
+GNUNET_DISK_file_write_blocking (const struct GNUNET_DISK_FileHandle *h,
+ const void *buffer,
size_t n);
* @return number of bytes written on success, #GNUNET_SYSERR on error
*/
ssize_t
-GNUNET_DISK_fn_write (const char *fn, const void *buffer, size_t n,
+GNUNET_DISK_fn_write (const char *fn,
+ const void *buffer,
+ size_t n,
enum GNUNET_DISK_AccessPermissions mode);
* @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);
/**
* @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);
/**
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, ...);
-
-
/**
* Opaque handle for a memory-mapping operation.
*/
/**
* 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);