aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/wutil.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wutil.h')
-rw-r--r--src/wutil.h143
1 files changed, 53 insertions, 90 deletions
diff --git a/src/wutil.h b/src/wutil.h
index f16e28c0..9fc61096 100644
--- a/src/wutil.h
+++ b/src/wutil.h
@@ -1,141 +1,105 @@
-/** \file wutil.h
-
- Prototypes for wide character equivalents of various standard unix
- functions.
-*/
+// Prototypes for wide character equivalents of various standard unix functions.
#ifndef FISH_WUTIL_H
#define FISH_WUTIL_H
-#include <stdio.h>
#include <dirent.h>
+#include <stdbool.h>
+#include <stdio.h>
#include <sys/types.h>
-#include <stddef.h>
#include <time.h>
#include <string>
-#include <stdint.h>
+
#include "common.h"
-/**
- Wide character version of fopen(). This sets CLO_EXEC.
-*/
+/// Wide character version of fopen(). This sets CLO_EXEC.
FILE *wfopen(const wcstring &path, const char *mode);
-/** Sets CLO_EXEC on a given fd */
+/// Sets CLO_EXEC on a given fd.
bool set_cloexec(int fd);
-/** Wide character version of open() that also sets the close-on-exec flag (atomically when possible). */
+/// Wide character version of open() that also sets the close-on-exec flag (atomically when
+/// possible).
int wopen_cloexec(const wcstring &pathname, int flags, mode_t mode = 0);
-/** Mark an fd as nonblocking; returns errno or 0 on success */
+/// Mark an fd as nonblocking; returns errno or 0 on success.
int make_fd_nonblocking(int fd);
-/** Mark an fd as blocking; returns errno or 0 on success */
+/// Mark an fd as blocking; returns errno or 0 on success.
int make_fd_blocking(int fd);
-/** Wide character version of opendir(). Note that opendir() is guaranteed to set close-on-exec by POSIX (hooray). */
+/// Wide character version of opendir(). Note that opendir() is guaranteed to set close-on-exec by
+/// POSIX (hooray).
DIR *wopendir(const wcstring &name);
-/**
- Wide character version of stat().
-*/
+/// Wide character version of stat().
int wstat(const wcstring &file_name, struct stat *buf);
-/**
- Wide character version of lstat().
-*/
+/// Wide character version of lstat().
int lwstat(const wcstring &file_name, struct stat *buf);
-/**
- Wide character version of access().
-*/
+/// Wide character version of access().
int waccess(const wcstring &pathname, int mode);
-/**
- Wide character version of unlink().
-*/
+/// Wide character version of unlink().
int wunlink(const wcstring &pathname);
-/**
- Wide character version of perror().
-*/
+/// Wide character version of perror().
void wperror(const wchar_t *s);
-/**
- Async-safe version of perror().
-*/
+/// Async-safe version of perror().
void safe_perror(const char *message);
-/**
- Async-safe version of strerror().
-*/
+/// Async-safe version of strerror().
const char *safe_strerror(int err);
-// Wide character version of getcwd().
+/// Wide character version of getcwd().
const wcstring wgetcwd();
-/**
- Wide character version of chdir()
-*/
+/// Wide character version of chdir().
int wchdir(const wcstring &dir);
-/**
- Wide character version of realpath function. Just like the GNU
- version of realpath, wrealpath will accept 0 as the value for the
- second argument, in which case the result will be allocated using
- malloc, and must be free'd by the user.
-*/
+/// Wide character version of realpath function. Just like the GNU version of realpath, wrealpath
+/// will accept 0 as the value for the second argument, in which case the result will be allocated
+/// using malloc, and must be free'd by the user.
wchar_t *wrealpath(const wcstring &pathname, wchar_t *resolved_path);
-/**
- Wide character version of readdir()
-*/
+/// Wide character version of readdir().
bool wreaddir(DIR *dir, std::wstring &out_name);
-bool wreaddir_resolving(DIR *dir, const std::wstring &dir_path, std::wstring &out_name, bool *out_is_dir);
-
-/**
- Like wreaddir, but skip items that are known to not be directories.
- If this requires a stat (i.e. the file is a symlink), then return it.
- Note that this does not guarantee that everything returned is a directory,
- it's just an optimization for cases where we would check for directories anyways.
-*/
+bool wreaddir_resolving(DIR *dir, const std::wstring &dir_path, std::wstring &out_name,
+ bool *out_is_dir);
+
+/// Like wreaddir, but skip items that are known to not be directories. If this requires a stat
+/// (i.e. the file is a symlink), then return it. Note that this does not guarantee that everything
+/// returned is a directory, it's just an optimization for cases where we would check for
+/// directories anyways.
bool wreaddir_for_dirs(DIR *dir, wcstring *out_name);
-/**
- Wide character version of dirname()
-*/
+/// Wide character version of dirname().
std::wstring wdirname(const std::wstring &path);
-/**
- Wide character version of basename()
-*/
+/// Wide character version of basename().
std::wstring wbasename(const std::wstring &path);
-/**
- Wide character wrapper around the gettext function. For historic
- reasons, unlike the real gettext function, wgettext takes care of
- setting the correct domain, etc. using the textdomain and
- bindtextdomain functions. This should probably be moved out of
- wgettext, so that wgettext will be nothing more than a wrapper
- around gettext, like all other functions in this file.
-*/
+/// Wide character wrapper around the gettext function. For historic reasons, unlike the real
+/// gettext function, wgettext takes care of setting the correct domain, etc. using the textdomain
+/// and bindtextdomain functions. This should probably be moved out of wgettext, so that wgettext
+/// will be nothing more than a wrapper around gettext, like all other functions in this file.
const wchar_t *wgettext(const wchar_t *in);
-/**
- Wide character version of mkdir
-*/
+/// Wide character version of mkdir.
int wmkdir(const wcstring &dir, int mode);
-/**
- Wide character version of rename
-*/
+/// Wide character version of rename.
int wrename(const wcstring &oldName, const wcstring &newName);
-/** Like wcstol(), but fails on a value outside the range of an int */
-int fish_wcstoi(const wchar_t *str, wchar_t ** endptr, int base);
+/// Like wcstol(), but fails on a value outside the range of an int.
+int fish_wcstoi(const wchar_t *str, wchar_t **endptr, int base);
-/** Class for representing a file's inode. We use this to detect and avoid symlink loops, among other things. While an inode / dev pair is sufficient to distinguish co-existing files, Linux seems to aggressively re-use inodes, so it cannot determine if a file has been deleted (ABA problem). Therefore we include richer information. */
-struct file_id_t
-{
+/// Class for representing a file's inode. We use this to detect and avoid symlink loops, among
+/// other things. While an inode / dev pair is sufficient to distinguish co-existing files, Linux
+/// seems to aggressively re-use inodes, so it cannot determine if a file has been deleted (ABA
+/// problem). Therefore we include richer information.
+struct file_id_t {
dev_t device;
ino_t inode;
uint64_t size;
@@ -143,16 +107,16 @@ struct file_id_t
long change_nanoseconds;
time_t mod_seconds;
long mod_nanoseconds;
-
+
bool operator==(const file_id_t &rhs) const;
bool operator!=(const file_id_t &rhs) const;
-
- // Used to permit these as keys in std::map
+
+ // Used to permit these as keys in std::map.
bool operator<(const file_id_t &rhs) const;
-
+
static file_id_t file_id_from_stat(const struct stat *buf);
-
- private:
+
+ private:
int compare_file_id(const file_id_t &rhs) const;
};
@@ -161,5 +125,4 @@ file_id_t file_id_for_path(const wcstring &path);
extern const file_id_t kInvalidFileID;
-
#endif