Windows build fixes
parent
60fe755b79
commit
504bcf6916
|
@ -723,20 +723,6 @@ moo_print_operation_calc_page_size (MooPrintOperation *op,
|
|||
}
|
||||
|
||||
|
||||
#ifdef __WIN32__
|
||||
static struct tm *
|
||||
localtime_r (const time_t *timep,
|
||||
struct tm *result)
|
||||
{
|
||||
struct tm *res;
|
||||
res = localtime (timep);
|
||||
if (res)
|
||||
*result = *res;
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static gboolean
|
||||
line_number_displayed (MooPrintOperation *op,
|
||||
int line_no)
|
||||
|
|
|
@ -788,7 +788,7 @@ move_file_unix (G_GNUC_UNUSED MooFileSystem *fs,
|
|||
g_return_val_if_fail (_moo_path_is_absolute (new_path), FALSE);
|
||||
|
||||
/* XXX */
|
||||
if (_moo_rename (old_path, new_path, &err))
|
||||
if (mgw_rename (old_path, new_path, &err))
|
||||
{
|
||||
g_set_error (error, MOO_FILE_ERROR,
|
||||
_moo_file_error_from_errno (err),
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef __WIN32__
|
||||
#include <io.h>
|
||||
#endif // __WIN32__
|
||||
|
||||
const mgw_errno_t MGW_E_NOERROR { MGW_ENOERROR };
|
||||
const mgw_errno_t MGW_E_EXIST { MGW_EEXIST };
|
||||
|
@ -33,11 +36,36 @@ static void convert_g_stat_buf (const GStatBuf* gbuf, MgwStatBuf* mbuf)
|
|||
|
||||
mbuf->isreg = S_ISREG (gbuf->st_mode);
|
||||
mbuf->isdir = S_ISDIR (gbuf->st_mode);
|
||||
|
||||
#ifdef S_ISLNK
|
||||
mbuf->islnk = S_ISLNK (gbuf->st_mode);
|
||||
#else
|
||||
mbuf->islnk = 0;
|
||||
#endif
|
||||
|
||||
#ifdef S_ISSOCK
|
||||
mbuf->issock = S_ISSOCK (gbuf->st_mode);
|
||||
#else
|
||||
mbuf->issock = 0;
|
||||
#endif
|
||||
|
||||
#ifdef S_ISFIFO
|
||||
mbuf->isfifo = S_ISFIFO (gbuf->st_mode);
|
||||
#else
|
||||
mbuf->isfifo = 0;
|
||||
#endif
|
||||
|
||||
#ifdef S_ISCHR
|
||||
mbuf->ischr = S_ISCHR (gbuf->st_mode);
|
||||
#else
|
||||
mbuf->ischr = 0;
|
||||
#endif
|
||||
|
||||
#ifdef S_ISBLK
|
||||
mbuf->isblk = S_ISBLK (gbuf->st_mode);
|
||||
#else
|
||||
mbuf->isblk = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -102,6 +130,19 @@ mgw_localtime (const mgw_time_t *timep)
|
|||
return localtime(&t);
|
||||
}
|
||||
|
||||
#ifdef __WIN32__
|
||||
static struct tm *
|
||||
localtime_r (const time_t *timep,
|
||||
struct tm *result)
|
||||
{
|
||||
struct tm *res;
|
||||
res = localtime (timep);
|
||||
if (res)
|
||||
*result = *res;
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
|
||||
const struct tm *
|
||||
mgw_localtime_r (const mgw_time_t *timep, struct tm *result, mgw_errno_t *err)
|
||||
{
|
||||
|
@ -191,7 +232,13 @@ int
|
|||
mgw_pipe (MgwFd *fds)
|
||||
{
|
||||
int t[2];
|
||||
|
||||
#ifndef __WIN32__
|
||||
int result = pipe (t);
|
||||
#else
|
||||
int result = _pipe(t, 4096, O_BINARY);
|
||||
#endif
|
||||
|
||||
fds[0].value = t[0];
|
||||
fds[1].value = t[1];
|
||||
return result;
|
||||
|
@ -216,6 +263,12 @@ mgw_remove (const char *path, mgw_errno_t *err)
|
|||
return call_with_errno (err, g_remove, path);
|
||||
}
|
||||
|
||||
int
|
||||
mgw_rename (const char *oldpath, const char *newpath, mgw_errno_t *err)
|
||||
{
|
||||
return call_with_errno (err, g_rename, oldpath, newpath);
|
||||
}
|
||||
|
||||
int
|
||||
mgw_mkdir (const gchar *filename, int mode, mgw_errno_t *err)
|
||||
{
|
||||
|
@ -268,3 +321,11 @@ mgw_io_channel_unix_new (MgwFd fd)
|
|||
{
|
||||
return g_io_channel_unix_new (fd.value);
|
||||
}
|
||||
|
||||
#ifdef __WIN32__
|
||||
GIOChannel *
|
||||
mgw_io_channel_win32_new_fd (MgwFd fd)
|
||||
{
|
||||
return g_io_channel_win32_new_fd (fd.value);
|
||||
}
|
||||
#endif // __WIN32__
|
||||
|
|
|
@ -68,6 +68,7 @@ void mgw_perror (const char *s);
|
|||
|
||||
int mgw_unlink (const char *path, mgw_errno_t *err);
|
||||
int mgw_remove (const char *path, mgw_errno_t *err);
|
||||
int mgw_rename (const char *oldpath, const char *newpath, mgw_errno_t *err);
|
||||
int mgw_mkdir (const gchar *filename, int mode, mgw_errno_t *err);
|
||||
int mgw_mkdir_with_parents (const gchar *pathname, gint mode, mgw_errno_t *err);
|
||||
|
||||
|
@ -85,6 +86,10 @@ mgw_spawn_async_with_pipes (const gchar *working_directory,
|
|||
GError **error);
|
||||
GIOChannel *mgw_io_channel_unix_new (MgwFd fd);
|
||||
|
||||
#ifdef __WIN32__
|
||||
GIOChannel *mgw_io_channel_win32_new_fd (MgwFd fd);
|
||||
#endif
|
||||
|
||||
enum mgw_access_mode_value_t
|
||||
{
|
||||
MGW_F_OK = 0,
|
||||
|
@ -103,6 +108,7 @@ int mgw_access (const char *path, mgw_access_mode_t mode);
|
|||
#ifndef MOO_DO_NOT_MANGLE_GLIB_FUNCTIONS
|
||||
|
||||
#undef g_stat
|
||||
#undef g_rename
|
||||
#undef g_access
|
||||
#undef g_lstat
|
||||
#undef g_strerror
|
||||
|
@ -116,8 +122,10 @@ int mgw_access (const char *path, mgw_access_mode_t mode);
|
|||
#undef g_open
|
||||
#undef g_spawn_async_with_pipes
|
||||
#undef g_io_channel_unix_new
|
||||
#undef g_io_channel_win32_new_fd
|
||||
|
||||
#define g_stat DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
#define g_rename DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
#define g_access DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
#define g_lstat DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
#define g_strerror DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
|
@ -131,6 +139,7 @@ int mgw_access (const char *path, mgw_access_mode_t mode);
|
|||
#define g_open DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
#define g_spawn_async_with_pipes DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
#define g_io_channel_unix_new DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
#define g_io_channel_win32_new_fd DO_NOT_USE_THIS_DIRECTLY_USE_MGW_WRAPPERS_INSTEAD
|
||||
|
||||
#endif // MOO_DO_NOT_MANGLE_GLIB_FUNCTIONS
|
||||
|
||||
|
|
|
@ -795,11 +795,9 @@ fam_thread_check_dir (FAMThread *thr,
|
|||
guint idx)
|
||||
{
|
||||
MgwStatBuf buf;
|
||||
mgw_errno_t err;
|
||||
|
||||
errno = 0;
|
||||
|
||||
if (mgw_stat (thr->watches[idx].path, &buf) != 0 &&
|
||||
errno == ENOENT)
|
||||
if (mgw_stat (thr->watches[idx].path, &buf, &err) != 0 && err.value == MGW_ENOENT)
|
||||
{
|
||||
fam_thread_event (MOO_FILE_EVENT_DELETED,
|
||||
FALSE, NULL,
|
||||
|
@ -895,7 +893,7 @@ fam_thread_main (FAMThread *thr)
|
|||
|
||||
if (ret == WAIT_OBJECT_0)
|
||||
fam_thread_do_command (thr);
|
||||
else if (WAIT_OBJECT_0 < ret && ret < (int) thr->n_events)
|
||||
else if ((int) WAIT_OBJECT_0 < ret && ret < (int) thr->n_events)
|
||||
fam_thread_check_dir (thr, ret - WAIT_OBJECT_0);
|
||||
else
|
||||
{
|
||||
|
@ -1130,7 +1128,7 @@ watch_win32_start_monitor (MooFileWatch *watch,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
monitor->isdir = S_ISDIR (buf.st_mode) != 0;
|
||||
monitor->isdir = buf.isdir;
|
||||
|
||||
if (!monitor->isdir)
|
||||
return watch_stat_start_monitor (watch, monitor, error);
|
||||
|
|
|
@ -427,7 +427,7 @@ _moo_rename_file (const char *path,
|
|||
g_return_val_if_fail (path != NULL, FALSE);
|
||||
g_return_val_if_fail (new_path != NULL, FALSE);
|
||||
|
||||
if (_moo_rename (path, new_path, &err) != 0)
|
||||
if (mgw_rename (path, new_path, &err) != 0)
|
||||
{
|
||||
char *utf8_path = g_filename_display_name (path);
|
||||
char *utf8_new_path = g_filename_display_name (new_path);
|
||||
|
@ -535,86 +535,6 @@ _moo_filename_to_uri (const char *file,
|
|||
}
|
||||
|
||||
|
||||
#if 0
|
||||
static int
|
||||
_moo_chdir (const char *path)
|
||||
{
|
||||
#ifdef __WIN32__
|
||||
CCALL_1 (_chdir, _wchdir, path);
|
||||
#else
|
||||
return chdir (path);
|
||||
#endif
|
||||
}
|
||||
|
||||
// char *
|
||||
// _moo_normalize_file_path (const char *filename)
|
||||
// {
|
||||
// char *freeme = NULL;
|
||||
// char *working_dir, *basename, *dirname;
|
||||
// char *real_filename = NULL;
|
||||
//
|
||||
// g_return_val_if_fail (filename != NULL, NULL);
|
||||
//
|
||||
// working_dir = g_get_current_dir ();
|
||||
// g_return_val_if_fail (working_dir != NULL, g_strdup (filename));
|
||||
//
|
||||
// if (!_moo_path_is_absolute (filename))
|
||||
// {
|
||||
// freeme = g_build_filename (working_dir, filename, NULL);
|
||||
// filename = freeme;
|
||||
// }
|
||||
//
|
||||
// /* It's an error to call this function for a directory, so if
|
||||
// * it's the case, just return what we got. */
|
||||
// if (g_file_test (filename, G_FILE_TEST_IS_DIR) ||
|
||||
// /* and this totally screws up dirname/basename */
|
||||
// g_str_has_suffix (filename, G_DIR_SEPARATOR_S))
|
||||
// {
|
||||
// if (!freeme)
|
||||
// freeme = g_strdup (filename);
|
||||
// g_free (working_dir);
|
||||
// return freeme;
|
||||
// }
|
||||
//
|
||||
// dirname = g_path_get_dirname (filename);
|
||||
// basename = g_path_get_basename (filename);
|
||||
// g_return_val_if_fail (dirname && basename, g_strdup (filename));
|
||||
//
|
||||
// errno = 0;
|
||||
//
|
||||
// if (_moo_chdir (dirname) != 0)
|
||||
// {
|
||||
// int err = errno;
|
||||
// g_warning ("%s", g_strerror (err));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// char *real_dirname = g_get_current_dir ();
|
||||
// real_filename = g_build_filename (real_dirname, basename, NULL);
|
||||
// g_free (real_dirname);
|
||||
//
|
||||
// errno = 0;
|
||||
//
|
||||
// if (_moo_chdir (working_dir) != 0)
|
||||
// {
|
||||
// int err = errno;
|
||||
// g_warning ("%s", g_strerror (err));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (!real_filename)
|
||||
// real_filename = g_strdup (filename);
|
||||
//
|
||||
// g_free (freeme);
|
||||
// g_free (dirname);
|
||||
// g_free (basename);
|
||||
// g_free (working_dir);
|
||||
//
|
||||
// return real_filename;
|
||||
// }
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __WIN32__
|
||||
|
||||
static char *
|
||||
|
@ -1125,123 +1045,13 @@ moo_test_mooutils_fs (void)
|
|||
}
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* MSLU for poor
|
||||
*/
|
||||
|
||||
#ifdef __WIN32__
|
||||
static gpointer
|
||||
convert_filename (const char *filename,
|
||||
gboolean *use_wide_char_api)
|
||||
{
|
||||
if (G_WIN32_HAVE_WIDECHAR_API ())
|
||||
{
|
||||
*use_wide_char_api = TRUE;
|
||||
return g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
*use_wide_char_api = FALSE;
|
||||
return g_locale_from_utf8 (filename, -1, NULL,
|
||||
NULL, NULL);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#define CCALL_1(_AFunc, _WFunc, path) \
|
||||
G_STMT_START { \
|
||||
gboolean use_wide_char_api; \
|
||||
gpointer converted; \
|
||||
int retval; \
|
||||
mgw_errno_t save_errno; \
|
||||
\
|
||||
converted = convert_filename (path, &use_wide_char_api); \
|
||||
\
|
||||
if (!converted) \
|
||||
{ \
|
||||
mgw_set_errno (MGW_EINVAL); \
|
||||
return -1; \
|
||||
} \
|
||||
\
|
||||
mgw_set_errno (0); \
|
||||
\
|
||||
if (use_wide_char_api) \
|
||||
retval = _WFunc (converted); \
|
||||
else \
|
||||
retval = _AFunc (converted); \
|
||||
\
|
||||
save_errno = mgw_errno (); \
|
||||
g_free (converted); \
|
||||
mgw_set_errno (save_errno); \
|
||||
\
|
||||
return retval; \
|
||||
} G_STMT_END
|
||||
|
||||
|
||||
int
|
||||
_moo_mkdir (const char *path, mgw_errno_t *err)
|
||||
{
|
||||
#ifdef __WIN32__
|
||||
CCALL_1 (mkdir, _wmkdir, path, err);
|
||||
#ifndef __WIN32__
|
||||
return mgw_mkdir (path, S_IRWXU, err);
|
||||
#else
|
||||
int result;
|
||||
errno = 0;
|
||||
result = mkdir (path, S_IRWXU);
|
||||
err->value = errno;
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
_moo_rename (const char *old_name,
|
||||
const char *new_name,
|
||||
mgw_errno_t *err)
|
||||
{
|
||||
#ifdef __WIN32__
|
||||
gboolean use_wide_char_api;
|
||||
gpointer old_conv, new_conv;
|
||||
int retval;
|
||||
|
||||
if (G_WIN32_HAVE_WIDECHAR_API ())
|
||||
{
|
||||
use_wide_char_api = TRUE;
|
||||
old_conv = g_utf8_to_utf16 (old_name, -1, NULL, NULL, NULL);
|
||||
new_conv = g_utf8_to_utf16 (new_name, -1, NULL, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
use_wide_char_api = FALSE;
|
||||
old_conv = g_locale_from_utf8 (old_name, -1, NULL, NULL, NULL);
|
||||
new_conv = g_locale_from_utf8 (new_name, -1, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
if (!old_conv || !new_conv)
|
||||
{
|
||||
g_free (old_conv);
|
||||
g_free (new_conv);
|
||||
*err = MGW_E_INVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
mgw_set_errno (0);
|
||||
|
||||
if (use_wide_char_api)
|
||||
retval = mw_wrename (old_conv, new_conv, err);
|
||||
else
|
||||
retval = mw_rename (old_conv, new_conv, err);
|
||||
|
||||
g_free (old_conv);
|
||||
g_free (new_conv);
|
||||
|
||||
return retval;
|
||||
#else
|
||||
int result;
|
||||
errno = 0;
|
||||
result = rename (old_name, new_name);
|
||||
err->value = errno;
|
||||
return result;
|
||||
return mgw_mkdir (path, 0, err);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -83,9 +83,6 @@ gboolean _moo_move_files_ui (GList *filenames,
|
|||
|
||||
int _moo_mkdir (const char *path,
|
||||
mgw_errno_t *err); /* S_IRWXU on unix */
|
||||
int _moo_rename (const char *old_name,
|
||||
const char *new_name,
|
||||
mgw_errno_t *err);
|
||||
|
||||
gboolean _moo_glob_match_simple (const char *pattern,
|
||||
const char *filename);
|
||||
|
|
|
@ -370,12 +370,7 @@ _moo_win32_fnmatch (const char *pattern,
|
|||
const char *string,
|
||||
int flags)
|
||||
{
|
||||
if (flags != 0)
|
||||
{
|
||||
mgw_set_errno (MGW_EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
g_return_val_if_fail (flags != 0, -1);
|
||||
return _moo_glob_match_simple (pattern, string) ? 0 : 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ export AR=$_mingw_tool_prefix-ar
|
|||
export RANLIB=$_mingw_tool_prefix-ranlib
|
||||
export STRIP=$_mingw_tool_prefix-strip
|
||||
|
||||
export LDFLAGS="-L$mgwtargetdir/lib"
|
||||
export CPPFLAGS="-I$mgwtargetdir/include"
|
||||
export CFLAGS="-mms-bitfields -march=i686 $_def_cflags"
|
||||
export CXXFLAGS="-mms-bitfields -march=i686 $_def_cflags"
|
||||
|
|
Loading…
Reference in New Issue