diff --git a/ChangeLog b/ChangeLog index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index ecc5c9c92..a353a6b38 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +2001-07-21 Hans Breuer + + * glib/giowin32.c (g_io_channel_new_file) : set the + corresponding p(ermission)mode of the file when creating, + otherwise a wronly file couldn't be overwritten (at least + not on Win9x). + 2001-07-21 Hans Breuer * glib/giowin32.c : intial implementation of new API functions. diff --git a/glib/giowin32.c b/glib/giowin32.c index 3db8b7a1c..18cd1b1dd 100644 --- a/glib/giowin32.c +++ b/glib/giowin32.c @@ -1075,7 +1075,7 @@ g_io_channel_new_file (const gchar *filename, const gchar *mode, GError **error) { - int fid, flags; + int fid, flags, pmode; GIOChannel *channel; enum { /* Cheesy hack */ @@ -1125,29 +1125,36 @@ g_io_channel_new_file (const gchar *filename, { case MODE_R: flags = O_RDONLY; + pmode = _S_IREAD; break; case MODE_W: flags = O_WRONLY | O_TRUNC | O_CREAT; + pmode = _S_IWRITE; break; case MODE_A: flags = O_WRONLY | O_APPEND | O_CREAT; + pmode = _S_IWRITE; break; case MODE_R | MODE_PLUS: flags = O_RDWR; + pmode = _S_IREAD | _S_IWRITE; break; case MODE_W | MODE_PLUS: flags = O_RDWR | O_TRUNC | O_CREAT; + pmode = _S_IREAD | _S_IWRITE; break; case MODE_A | MODE_PLUS: flags = O_RDWR | O_APPEND | O_CREAT; + pmode = _S_IREAD | _S_IWRITE; break; default: g_assert_not_reached (); flags = 0; + pmode = 0; } - fid = open (filename, flags); + fid = open (filename, flags, pmode); if (fid < 0) { g_set_error (error, G_FILE_ERROR,