2005-09-20 13:26:39 +00:00
|
|
|
/** \file wutil.h
|
|
|
|
|
|
|
|
Prototypes for wide character equivalents of various standard unix
|
2012-11-18 10:23:22 +00:00
|
|
|
functions.
|
2005-09-20 13:26:39 +00:00
|
|
|
*/
|
2005-10-04 15:11:39 +00:00
|
|
|
#ifndef FISH_WUTIL_H
|
|
|
|
#define FISH_WUTIL_H
|
2005-09-20 13:26:39 +00:00
|
|
|
|
2006-02-06 13:45:32 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
2005-10-04 15:11:39 +00:00
|
|
|
#include <wchar.h>
|
2005-09-20 13:26:39 +00:00
|
|
|
#include <dirent.h>
|
|
|
|
#include <unistd.h>
|
2005-10-04 15:11:39 +00:00
|
|
|
#include <sys/stat.h>
|
2005-10-05 22:37:08 +00:00
|
|
|
#include <sys/types.h>
|
2006-01-26 09:57:06 +00:00
|
|
|
#include <stdarg.h>
|
2011-12-27 03:18:46 +00:00
|
|
|
#include <string>
|
2012-12-03 07:38:38 +00:00
|
|
|
#include <utility>
|
2012-02-17 23:55:54 +00:00
|
|
|
#include "common.h"
|
2011-12-27 03:18:46 +00:00
|
|
|
|
2005-11-02 15:41:59 +00:00
|
|
|
/**
|
|
|
|
Call this function on startup to create internal wutil
|
|
|
|
resources. This function doesn't do anything.
|
|
|
|
*/
|
|
|
|
void wutil_init();
|
|
|
|
|
2005-09-20 13:26:39 +00:00
|
|
|
/**
|
|
|
|
Call this function on exit to free internal wutil resources
|
|
|
|
*/
|
|
|
|
void wutil_destroy();
|
|
|
|
|
|
|
|
/**
|
2012-03-02 08:27:40 +00:00
|
|
|
Wide character version of fopen(). This sets CLO_EXEC.
|
2005-09-20 13:26:39 +00:00
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
FILE *wfopen(const wcstring &path, const char *mode);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
2012-03-02 08:27:40 +00:00
|
|
|
/** Sets CLO_EXEC on a given fd */
|
|
|
|
bool set_cloexec(int fd);
|
|
|
|
|
2005-09-20 13:26:39 +00:00
|
|
|
/**
|
|
|
|
Wide character version of freopen().
|
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
FILE *wfreopen(const wcstring &path, const char *mode, FILE *stream);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
2012-03-02 08:27:40 +00:00
|
|
|
/** Wide character version of open(). */
|
|
|
|
int wopen(const wcstring &pathname, int flags, mode_t mode = 0);
|
|
|
|
|
|
|
|
/** 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);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Wide character version of creat().
|
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
int wcreat(const wcstring &pathname, mode_t mode);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
|
|
|
|
2012-03-02 08:27:40 +00:00
|
|
|
/** Wide character version of opendir(). Note that opendir() is guaranteed to set close-on-exec by POSIX (hooray). */
|
2012-02-18 17:11:22 +00:00
|
|
|
DIR *wopendir(const wcstring &name);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Wide character version of stat().
|
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
int wstat(const wcstring &file_name, struct stat *buf);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Wide character version of lstat().
|
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
int lwstat(const wcstring &file_name, struct stat *buf);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Wide character version of access().
|
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
int waccess(const wcstring &pathname, int mode);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
2012-02-16 08:24:27 +00:00
|
|
|
/**
|
|
|
|
Wide character version of unlink().
|
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
int wunlink(const wcstring &pathname);
|
2012-02-16 08:24:27 +00:00
|
|
|
|
2005-09-20 13:26:39 +00:00
|
|
|
/**
|
|
|
|
Wide character version of perror().
|
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
void wperror(const wcstring &s);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
2013-01-10 01:06:20 +00:00
|
|
|
/**
|
|
|
|
Async-safe version of perror().
|
|
|
|
*/
|
|
|
|
void safe_perror(const char *message);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Async-safe version of strerror().
|
|
|
|
*/
|
|
|
|
const char *safe_strerror(int err);
|
|
|
|
|
2005-09-20 13:26:39 +00:00
|
|
|
/**
|
|
|
|
Wide character version of getcwd().
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
wchar_t *wgetcwd(wchar_t *buff, size_t sz);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Wide character version of chdir()
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
int wchdir(const wcstring &dir);
|
2005-09-20 13:26:39 +00:00
|
|
|
|
2012-11-18 10:23:22 +00:00
|
|
|
/**
|
|
|
|
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.
|
2006-02-02 15:23:56 +00:00
|
|
|
*/
|
2012-02-18 17:11:22 +00:00
|
|
|
wchar_t *wrealpath(const wcstring &pathname, wchar_t *resolved_path);
|
2006-02-02 15:23:56 +00:00
|
|
|
|
2006-06-17 13:07:08 +00:00
|
|
|
/**
|
|
|
|
Wide character version of readdir()
|
|
|
|
*/
|
2012-02-20 10:13:31 +00:00
|
|
|
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);
|
2006-02-08 14:58:47 +00:00
|
|
|
|
2006-06-14 13:22:40 +00:00
|
|
|
/**
|
|
|
|
Wide character version of dirname()
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
std::wstring wdirname(const std::wstring &path);
|
2006-06-14 13:22:40 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Wide character version of basename()
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
std::wstring wbasename(const std::wstring &path);
|
2006-06-14 13:22:40 +00:00
|
|
|
|
2006-07-19 22:55:49 +00:00
|
|
|
/**
|
|
|
|
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.
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
const wchar_t *wgettext(const wchar_t *in);
|
2006-06-14 13:22:40 +00:00
|
|
|
|
2006-08-11 14:55:28 +00:00
|
|
|
/**
|
|
|
|
Wide character version of getenv
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
const wchar_t *wgetenv(const wcstring &name);
|
2006-08-11 14:55:28 +00:00
|
|
|
|
2006-09-08 14:11:28 +00:00
|
|
|
/**
|
|
|
|
Wide character version of mkdir
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
int wmkdir(const wcstring &dir, int mode);
|
2006-08-11 14:55:28 +00:00
|
|
|
|
2006-10-20 22:33:47 +00:00
|
|
|
/**
|
|
|
|
Wide character version of rename
|
|
|
|
*/
|
2012-11-19 00:30:30 +00:00
|
|
|
int wrename(const wcstring &oldName, const wcstring &newName);
|
2006-10-20 22:33:47 +00:00
|
|
|
|
2012-08-04 18:07:42 +00:00
|
|
|
/** 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);
|
|
|
|
|
2012-12-03 07:38:38 +00:00
|
|
|
/** Class for representing a file's inode. We use this to detect and avoid symlink loops, among other things. */
|
|
|
|
typedef std::pair<dev_t, ino_t> file_id_t;
|
|
|
|
|
|
|
|
|
2005-09-20 13:26:39 +00:00
|
|
|
#endif
|