/*
This file is part of GNUnet.
- Copyright (C) 2001--2013, 2016 GNUnet e.V.
+ Copyright (C) 2001--2013, 2016, 2018 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
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
+ GNUnet is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
GNUnet is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- 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., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
+ Affero General Public License for more details.
*/
/**
* @file util/disk.c
BY_HANDLE_FILE_INFORMATION info;
int succ;
- fh = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, 0);
- if (fh == NULL)
+ fh = GNUNET_DISK_file_open (filename,
+ GNUNET_DISK_OPEN_READ,
+ GNUNET_DISK_PERM_NONE);
+ if (NULL == fh)
return GNUNET_SYSERR;
succ = GetFileInformationByHandle (fh->h, &info);
GNUNET_DISK_file_close (fh);
fh = GNUNET_DISK_file_open (fn,
GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_TRUNCATE
| GNUNET_DISK_OPEN_CREATE, mode);
- if (!fh)
+ if (! fh)
return GNUNET_SYSERR;
ret = GNUNET_DISK_file_write (fh, buffer, n);
GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fh));
remove_helper (void *unused,
const char *fn)
{
+ (void) unused;
(void) GNUNET_DISK_directory_remove (fn);
return GNUNET_OK;
}
uint64_t pos;
uint64_t size;
size_t len;
+ ssize_t sret;
struct GNUNET_DISK_FileHandle *in;
struct GNUNET_DISK_FileHandle *out;
- if (GNUNET_OK != GNUNET_DISK_file_size (src, &size, GNUNET_YES, GNUNET_YES))
+ if (GNUNET_OK !=
+ GNUNET_DISK_file_size (src,
+ &size,
+ GNUNET_YES,
+ GNUNET_YES))
+ {
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+ "stat",
+ src);
return GNUNET_SYSERR;
+ }
pos = 0;
- in = GNUNET_DISK_file_open (src, GNUNET_DISK_OPEN_READ,
+ in = GNUNET_DISK_file_open (src,
+ GNUNET_DISK_OPEN_READ,
GNUNET_DISK_PERM_NONE);
- if (!in)
+ if (! in)
+ {
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+ "open",
+ src);
return GNUNET_SYSERR;
+ }
out =
GNUNET_DISK_file_open (dst,
GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE |
GNUNET_DISK_PERM_GROUP_WRITE);
if (!out)
{
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+ "open",
+ dst);
GNUNET_DISK_file_close (in);
return GNUNET_SYSERR;
}
len = COPY_BLK_SIZE;
if (len > size - pos)
len = size - pos;
- if (len != GNUNET_DISK_file_read (in, buf, len))
+ sret = GNUNET_DISK_file_read (in,
+ buf,
+ len);
+ if ( (sret < 0) ||
+ (len != (size_t) sret) )
goto FAIL;
- if (len != GNUNET_DISK_file_write (out, buf, len))
+ sret = GNUNET_DISK_file_write (out,
+ buf,
+ len);
+ if ( (sret < 0) ||
+ (len != (size_t) sret) )
goto FAIL;
pos += len;
}
{
c = *idx;
- if (c == '/' || c == '\\' || c == ':' || c == '*' || c == '?' || c == '"' ||
+ if (c == '/' || c == '\\' || c == ':' ||
+ c == '*' || c == '?' || c == '"' ||
c == '<' || c == '>' || c == '|')
{
*idx = '_';
/**
- * Close an open file
+ * Close an open file.
+ *
* @param h file handle
- * @return GNUNET_OK on success, GNUNET_SYSERR otherwise
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise
*/
int
GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h)
ret = GNUNET_OK;
#if MINGW
- if (!CloseHandle (h->h))
+ if (! CloseHandle (h->h))
{
SetErrnoFromWinError (GetLastError ());
LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close");
}
if (h->oOverlapRead)
{
- if (!CloseHandle (h->oOverlapRead->hEvent))
+ if (! CloseHandle (h->oOverlapRead->hEvent))
{
SetErrnoFromWinError (GetLastError ());
LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close");
GNUNET_DISK_get_handle_from_w32_handle (HANDLE osfh)
{
struct GNUNET_DISK_FileHandle *fh;
-
DWORD dwret;
enum GNUNET_FILE_Type ftype;
ftype = GNUNET_DISK_HANLDE_TYPE_PIPE;
break;
case FILE_TYPE_UNKNOWN:
- if (GetLastError () == NO_ERROR || GetLastError () == ERROR_INVALID_HANDLE)
+ if ( (GetLastError () == NO_ERROR) ||
+ (GetLastError () == ERROR_INVALID_HANDLE) )
{
if (0 != ResetEvent (osfh))
ftype = GNUNET_DISK_HANLDE_TYPE_EVENT;
* @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)
{
#ifndef MINGW
int fd[2];
int ret;
int eno;
+ (void) inherit_read;
+ (void) inherit_write;
ret = pipe (fd);
if (ret == -1)
{
eno = errno;
- LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "pipe");
+ LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR,
+ "pipe");
errno = eno;
return NULL;
}
return GNUNET_OK;
}
+
+/**
+ * Remove the directory given under @a option in
+ * section [PATHS] in configuration under @a cfg_filename
+ *
+ * @param cfg_filename configuration file to parse
+ * @param option option with the dir name to purge
+ */
+void
+GNUNET_DISK_purge_cfg_dir (const char *cfg_filename,
+ const char *option)
+{
+ struct GNUNET_CONFIGURATION_Handle *cfg;
+ char *tmpname;
+
+ cfg = GNUNET_CONFIGURATION_create ();
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_load (cfg,
+ cfg_filename))
+ {
+ GNUNET_break (0);
+ GNUNET_CONFIGURATION_destroy (cfg);
+ return;
+ }
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_filename (cfg,
+ "PATHS",
+ option,
+ &tmpname))
+ {
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "PATHS",
+ option);
+ GNUNET_CONFIGURATION_destroy (cfg);
+ return;
+ }
+ GNUNET_CONFIGURATION_destroy (cfg);
+ if (GNUNET_SYSERR ==
+ GNUNET_DISK_directory_remove (tmpname))
+ {
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+ "remove",
+ tmpname);
+ GNUNET_free (tmpname);
+ return;
+ }
+ GNUNET_free (tmpname);
+}
+
+
+
/* end of disk.c */