mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Finally extract the log library and make it build.
This patch:
- introduces an fdio module for low-level fd functions that don't
need to log.
- moves the responsibility for opening files outside of torlog.c,
so it won't need to call tor_open_cloexec.
This commit is contained in:
@@ -733,80 +733,6 @@ tor_lockfile_unlock(tor_lockfile_t *lockfile)
|
||||
tor_free(lockfile);
|
||||
}
|
||||
|
||||
/** @{ */
|
||||
/** Some old versions of Unix didn't define constants for these values,
|
||||
* and instead expect you to say 0, 1, or 2. */
|
||||
#ifndef SEEK_SET
|
||||
#define SEEK_SET 0
|
||||
#endif
|
||||
#ifndef SEEK_CUR
|
||||
#define SEEK_CUR 1
|
||||
#endif
|
||||
#ifndef SEEK_END
|
||||
#define SEEK_END 2
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/** Return the position of <b>fd</b> with respect to the start of the file. */
|
||||
off_t
|
||||
tor_fd_getpos(int fd)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return (off_t) _lseek(fd, 0, SEEK_CUR);
|
||||
#else
|
||||
return (off_t) lseek(fd, 0, SEEK_CUR);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Move <b>fd</b> to the end of the file. Return -1 on error, 0 on success.
|
||||
* If the file is a pipe, do nothing and succeed.
|
||||
**/
|
||||
int
|
||||
tor_fd_seekend(int fd)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return _lseek(fd, 0, SEEK_END) < 0 ? -1 : 0;
|
||||
#else
|
||||
off_t rc = lseek(fd, 0, SEEK_END) < 0 ? -1 : 0;
|
||||
#ifdef ESPIPE
|
||||
/* If we get an error and ESPIPE, then it's a pipe or a socket of a fifo:
|
||||
* no need to worry. */
|
||||
if (rc < 0 && errno == ESPIPE)
|
||||
rc = 0;
|
||||
#endif /* defined(ESPIPE) */
|
||||
return (rc < 0) ? -1 : 0;
|
||||
#endif /* defined(_WIN32) */
|
||||
}
|
||||
|
||||
/** Move <b>fd</b> to position <b>pos</b> in the file. Return -1 on error, 0
|
||||
* on success. */
|
||||
int
|
||||
tor_fd_setpos(int fd, off_t pos)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return _lseek(fd, pos, SEEK_SET) < 0 ? -1 : 0;
|
||||
#else
|
||||
return lseek(fd, pos, SEEK_SET) < 0 ? -1 : 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Replacement for ftruncate(fd, 0): move to the front of the file and remove
|
||||
* all the rest of the file. Return -1 on error, 0 on success. */
|
||||
int
|
||||
tor_ftruncate(int fd)
|
||||
{
|
||||
/* Rumor has it that some versions of ftruncate do not move the file pointer.
|
||||
*/
|
||||
if (tor_fd_setpos(fd, 0) < 0)
|
||||
return -1;
|
||||
|
||||
#ifdef _WIN32
|
||||
return _chsize(fd, 0);
|
||||
#else
|
||||
return ftruncate(fd, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#undef DEBUG_SOCKET_COUNTING
|
||||
#ifdef DEBUG_SOCKET_COUNTING
|
||||
/** A bitarray of all fds that should be passed to tor_socket_close(). Only
|
||||
@@ -2641,7 +2567,6 @@ compute_num_cpus(void)
|
||||
return num_cpus;
|
||||
}
|
||||
|
||||
|
||||
/** As localtime_r, but defined for platforms that don't have it:
|
||||
*
|
||||
* Convert *<b>timep</b> to a struct tm in local time, and store the value in
|
||||
|
||||
@@ -160,11 +160,6 @@ tor_lockfile_t *tor_lockfile_lock(const char *filename, int blocking,
|
||||
int *locked_out);
|
||||
void tor_lockfile_unlock(tor_lockfile_t *lockfile);
|
||||
|
||||
off_t tor_fd_getpos(int fd);
|
||||
int tor_fd_setpos(int fd, off_t pos);
|
||||
int tor_fd_seekend(int fd);
|
||||
int tor_ftruncate(int fd);
|
||||
|
||||
int64_t tor_get_avail_disk_space(const char *path);
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "lib/crypt_ops/crypto_digest.h"
|
||||
#include "lib/cc/torint.h"
|
||||
#include "lib/container/smartlist.h"
|
||||
#include "lib/fdio/fdio.h"
|
||||
#include "common/address.h"
|
||||
#include "common/sandbox.h"
|
||||
#include "lib/err/backtrace.h"
|
||||
|
||||
Reference in New Issue
Block a user