Add wrappers around rename, unlink, mkdir, opendir, readdir and

closedir to handle filename charset translation.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2013-10-15 14:11:34 +02:00
parent d7750b324f
commit f6a81f0aaf
6 changed files with 237 additions and 26 deletions

View file

@ -22,6 +22,48 @@
#include <config.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
typedef struct dirent *grub_util_fd_dirent_t;
typedef DIR *grub_util_fd_dir_t;
static inline grub_util_fd_dir_t
grub_util_fd_opendir (const char *name)
{
return opendir (name);
}
static inline void
grub_util_fd_closedir (grub_util_fd_dir_t dirp)
{
closedir (dirp);
}
static inline grub_util_fd_dirent_t
grub_util_fd_readdir (grub_util_fd_dir_t dirp)
{
return readdir (dirp);
}
static inline int
grub_util_unlink (const char *pathname)
{
return unlink (pathname);
}
static inline int
grub_util_rename (const char *from, const char *to)
{
return rename (from, to);
}
#define grub_util_mkdir(a) mkdir (a)
struct grub_util_fd
{
enum { GRUB_UTIL_FD_FILE, GRUB_UTIL_FD_DISK } type;

View file

@ -28,6 +28,44 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
typedef struct dirent *grub_util_fd_dirent_t;
typedef DIR *grub_util_fd_dir_t;
static inline grub_util_fd_dir_t
grub_util_fd_opendir (const char *name)
{
return opendir (name);
}
static inline void
grub_util_fd_closedir (grub_util_fd_dir_t dirp)
{
closedir (dirp);
}
static inline grub_util_fd_dirent_t
grub_util_fd_readdir (grub_util_fd_dir_t dirp)
{
return readdir (dirp);
}
static inline int
grub_util_unlink (const char *pathname)
{
return unlink (pathname);
}
static inline int
grub_util_rename (const char *from, const char *to)
{
return rename (from, to);
}
#define grub_util_mkdir(a) mkdir ((a), 0700)
#if defined (__NetBSD__)
/* NetBSD uses /boot for its boot block. */

View file

@ -31,6 +31,30 @@ typedef HANDLE grub_util_fd_t;
#define DEFAULT_DIRECTORY "C:\\"GRUB_BOOT_DIR_NAME"\\"GRUB_DIR_NAME
#define DEFAULT_DEVICE_MAP DEFAULT_DIRECTORY "/device.map"
struct grub_util_fd_dirent
{
char d_name[0];
};
struct grub_util_fd_dir;
typedef struct grub_util_fd_dirent *grub_util_fd_dirent_t;
typedef struct grub_util_fd_dir *grub_util_fd_dir_t;
int
grub_util_rename (const char *from, const char *to);
int
grub_util_unlink (const char *name);
void
grub_util_mkdir (const char *dir);
grub_util_fd_dir_t
grub_util_fd_opendir (const char *name);
void
grub_util_fd_closedir (grub_util_fd_dir_t dirp);
grub_util_fd_dirent_t
grub_util_fd_readdir (grub_util_fd_dir_t dirp);
enum grub_util_fd_open_flags_t
{
GRUB_UTIL_FD_O_RDONLY = 1,