summaryrefslogtreecommitdiff
path: root/utils/scsi/rbscsi.c
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2017-01-05 16:21:55 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2017-01-07 15:52:33 +0100
commit456a3fc952d34a3e8781ca100851e6253c537109 (patch)
tree8406a3e38eb8a399a0bb155314be0ddc2d31e5a1 /utils/scsi/rbscsi.c
parent950f4bdc027cb8c83fd2145590549fdcf5522078 (diff)
downloadrockbox-456a3fc952d34a3e8781ca100851e6253c537109.tar.gz
rockbox-456a3fc952d34a3e8781ca100851e6253c537109.zip
imxtools: various fixes for Windows
Don't use colors since the terminal doesn't support it. Also packing is broken on MinGW so use #pragma pack when compiling for windows, this is also supported by MSCV. Change-Id: I635649d52ed5f2e0af46cb9ca2ec325955b2ddb2
Diffstat (limited to 'utils/scsi/rbscsi.c')
-rw-r--r--utils/scsi/rbscsi.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/utils/scsi/rbscsi.c b/utils/scsi/rbscsi.c
index aa62ba0118..8a263f29e6 100644
--- a/utils/scsi/rbscsi.c
+++ b/utils/scsi/rbscsi.c
@@ -151,13 +151,33 @@ void rb_scsi_close(rb_scsi_device_t dev)
151 151
152/* Windpws */ 152/* Windpws */
153#elif defined(RB_SCSI_WINDOWS) 153#elif defined(RB_SCSI_WINDOWS)
154/* return either path or something allocated with malloc() */
155static const char *map_to_physical_drive(const char *path, unsigned flags, void *user,
156 rb_scsi_printf_t printf)
157{
158 /* don't do anything if path starts with '\' */
159 if(path[0] == '\\')
160 return path;
161 /* Convert to UNC path (C: -> \\.\C:) otherwise it won't work) */
162 char *unc_path = malloc(strlen(path) + 5);
163 sprintf(unc_path, "\\\\.\\%s", path);
164 if(flags & RB_SCSI_DEBUG)
165 printf(user, "rb_scsi: map to UNC path: %s\n", unc_path);
166 return unc_path;
167}
168
154rb_scsi_device_t rb_scsi_open(const char *path, unsigned flags, void *user, 169rb_scsi_device_t rb_scsi_open(const char *path, unsigned flags, void *user,
155 rb_scsi_printf_t printf) 170 rb_scsi_printf_t printf)
156{ 171{
157 if(printf == NULL) 172 if(printf == NULL)
158 printf = misc_std_printf; 173 printf = misc_std_printf;
159 HANDLE h = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 174 /* magic to auto-detect physical drive */
175 const char *open_path = map_to_physical_drive(path, flags, user, printf);
176 HANDLE h = CreateFileA(open_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
160 NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING, NULL); 177 NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING, NULL);
178 /* free path if it was allocated */
179 if(open_path != path)
180 free((char *)open_path);
161 if(h == INVALID_HANDLE_VALUE) 181 if(h == INVALID_HANDLE_VALUE)
162 { 182 {
163 if(flags & RB_SCSI_DEBUG) 183 if(flags & RB_SCSI_DEBUG)