{
gchar *w32_path,*s,*d;
const gchar *media_root;
+gchar *pathname_normalized;
g_return_val_if_fail(pathname!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
g_return_val_if_fail(ObjectAttributes!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
* and later IopCreateFile() would not consider it FO_DIRECT_DEVICE_OPEN (e.g. w/o any direct mount!).
* On the other side it will somehow get managed automatically and it works even
* without the trailing "\\." for root directory open - don't ask me why. :-)
+ * Tested: \\Device\\CaptiveHarddisk0\\. FAIL
+ * \\Device\\CaptiveHarddisk0\\ OK
*/
switch (captive_options->media) {
case CAPTIVE_OPTION_MEDIA_CDROM: media_root="\\Device\\CdRom0"; break; /* libcaptive/storage/cdrom.c */
media_root="";
}
+ pathname_normalized=captive_path_normalize(pathname);
w32_path=(gchar *)/* de-const it as we can modify it but we must not free() it */
- captive_printf_alloca("%s\\%s",media_root,pathname);
+ captive_printf_alloca("%s\\%s",media_root,pathname_normalized);
+ g_free(pathname_normalized);
/* translate '/' -> '\' */
for (s=w32_path;(s=strchr(s,'/'));s++)
*s='\\';
return GNOME_VFS_OK;
}
+
+
+void captive_giochannel_setup(GIOChannel *giochannel)
+{
+GIOStatus erriostatus;
+
+ g_return_if_fail(giochannel!=NULL);
+
+ if (g_io_channel_get_encoding(giochannel)) {
+ if (!g_io_channel_get_buffered(giochannel)) /* Prevent: Need to have NULL encoding to set the buffering state ... */
+ g_io_channel_set_buffered(giochannel,TRUE); /* Prevent: Need to set the channel buffered before setting the encoding. */
+ erriostatus=g_io_channel_set_encoding(giochannel,
+ NULL, /* encoding; force binary data */
+ NULL); /* error */
+ g_assert(erriostatus==G_IO_STATUS_NORMAL);
+ }
+ erriostatus=g_io_channel_flush(giochannel,
+ NULL); /* error */
+ g_assert(erriostatus==G_IO_STATUS_NORMAL);
+ g_io_channel_set_buffered(giochannel,FALSE);
+}