* [PATCH] Mingw support for grub2 @ 2008-08-23 14:11 Bean 2008-08-24 12:40 ` Christian Franke 0 siblings, 1 reply; 13+ messages in thread From: Bean @ 2008-08-23 14:11 UTC (permalink / raw) To: The development of GRUB 2 [-- Attachment #1: Type: text/plain, Size: 1095 bytes --] Hi, This patch add support for mingw, now you can create native executable for windows. I still use cygwin to compile it: ./configure CC="gcc -mno-cygwin" It might be possible to use pure mingw environment, but configure.ac would need some modification. 2008-08-23 Bean <bean123ch@gmail.com> * include/grub/symbol.h: Replace #ifndef __CYGWIN__ with #if ! defined (__CYGWIN__) && ! defined (__MINGW32__). * include/grub/util/misc.h: Add #include <grub/types.h>, add function fseeko, ftello, sync, asprintf, grub_util_get_disk_size and sleep for mingw. * util/biosdisk.c (grub_util_biosdisk_open): Use grub_util_get_disk_size to get size in mingw. (open_device): Use flag O_BINARY. (find_root_device): Add handling for mingw. * util/hostfs.c: Add #include <grub/util/misc.h> (grub_hostfs_open): Use "rb" flag to open file, use grub_util_get_disk_size to get disk size. * util/misc.c: Add #include <winioctl.h> and <stdarg.h> in mingw. (fseeko): New function. (ftello): Likewise. (sync): Likewise. (asprintf): Likewise. (grub_util_get_disk_size): Likewise. -- Bean [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: mingw.diff --] [-- Type: text/x-diff; name=mingw.diff, Size: 5611 bytes --] diff --git a/include/grub/symbol.h b/include/grub/symbol.h index e951490..c662c14 100644 --- a/include/grub/symbol.h +++ b/include/grub/symbol.h @@ -28,7 +28,7 @@ # define EXT_C(sym) sym #endif -#ifndef __CYGWIN__ +#if ! defined (__CYGWIN__) && ! defined (__MINGW32__) #define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), "function" ; EXT_C(x): #define VARIABLE(x) .globl EXT_C(x) ; .type EXT_C(x), "object" ; EXT_C(x): #else diff --git a/include/grub/util/misc.h b/include/grub/util/misc.h index c9a8528..4d2ce8f 100644 --- a/include/grub/util/misc.h +++ b/include/grub/util/misc.h @@ -24,6 +24,8 @@ #include <setjmp.h> #include <unistd.h> +#include <grub/types.h> + #ifdef __NetBSD__ /* NetBSD uses /boot for its boot block. */ # define DEFAULT_DIRECTORY "/grub" @@ -55,4 +57,19 @@ void grub_util_write_image_at (const void *img, size_t size, off_t offset, FILE *out); char *grub_util_get_disk_name (int disk, char *name); +#ifdef __MINGW32__ + +#include <windows.h> + +grub_int64_t fseeko (FILE *fp, grub_int64_t offset, int whence); +grub_int64_t ftello (FILE *fp); +void sync (void); +int asprintf (char **buf, const char *fmt, ...); + +grub_int64_t grub_util_get_disk_size (char *name); + +#define sleep Sleep + +#endif + #endif /* ! GRUB_UTIL_MISC_HEADER */ diff --git a/util/biosdisk.c b/util/biosdisk.c index 1137e98..bdede12 100644 --- a/util/biosdisk.c +++ b/util/biosdisk.c @@ -157,7 +157,22 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk) disk->id = drive; /* Get the size. */ -#if defined(__linux__) || defined(__CYGWIN__) +#if defined(__MINGW32__) + { + grub_uint64_t size; + + size = grub_util_get_disk_size (map[drive].device); + + if (size % 512) + grub_util_error ("unaligned device size"); + + disk->total_sectors = size >> 9; + + grub_util_info ("the size of %s is %llu", name, disk->total_sectors); + + return GRUB_ERR_NONE; + } +#elif defined(__linux__) || defined(__CYGWIN__) { unsigned long long nr; int fd; @@ -275,6 +290,9 @@ open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags) #ifdef O_FSYNC flags |= O_FSYNC; #endif +#ifdef O_BINARY + flags |= O_BINARY; +#endif #ifdef __linux__ /* Linux has a bug that the disk cache for a whole disk is not consistent diff --git a/util/getroot.c b/util/getroot.c index c8d31ed..5fcf2e5 100644 --- a/util/getroot.c +++ b/util/getroot.c @@ -169,7 +169,16 @@ grub_get_prefix (const char *dir) return prefix; } -#ifndef __CYGWIN__ +#ifdef __MINGW32__ + +static char * +find_root_device (const char *dir __attribute__ ((unused)), + dev_t dev __attribute__ ((unused))) +{ + return 0; +} + +#elif ! defined(__CYGWIN__) static char * find_root_device (const char *dir, dev_t dev) diff --git a/util/hostfs.c b/util/hostfs.c index b74fbd3..8773c1c 100644 --- a/util/hostfs.c +++ b/util/hostfs.c @@ -22,6 +22,7 @@ #include <grub/disk.h> #include <grub/misc.h> #include <grub/dl.h> +#include <grub/util/misc.h> #include <dirent.h> #include <stdio.h> @@ -95,15 +96,19 @@ grub_hostfs_open (struct grub_file *file, const char *name) { FILE *f; - f = fopen (name, "r"); + f = fopen (name, "rb"); if (! f) return grub_error (GRUB_ERR_BAD_FILENAME, "can't open `%s'", name); file->data = f; +#ifdef __MINGW32__ + file->size = grub_util_get_disk_size (name); +#else fseeko (f, 0, SEEK_END); file->size = ftello (f); fseeko (f, 0, SEEK_SET); +#endif return GRUB_ERR_NONE; } diff --git a/util/misc.c b/util/misc.c index 7d877cc..6d3aae4 100644 --- a/util/misc.c +++ b/util/misc.c @@ -313,3 +313,103 @@ grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) { } + +#ifdef __MINGW32__ + +#include <winioctl.h> +#include <stdarg.h> + +grub_int64_t +fseeko (FILE *fp, grub_int64_t offset, int whence) +{ + fpos_t pos; + + if (whence == SEEK_CUR) + { + fgetpos (fp, &pos); + pos += (fpos_t) offset; + } + else if (whence == SEEK_END) + { + pos = (fpos_t) (_filelengthi64 (fileno (fp)) + offset); + } + else if (whence == SEEK_SET) + pos = (fpos_t) offset; + + return fsetpos(fp, &pos); +} + +grub_int64_t +ftello (FILE *fp) +{ + fpos_t pos; + + return (fgetpos(fp, &pos)) ? (grub_int64_t) -1LL : (grub_int64_t) pos; +} + +void sync (void) +{ +} + +int +asprintf (char **buf, const char *fmt, ...) +{ + int status; + va_list ap; + + /* Should be large enough. */ + *buf = xmalloc (512); + + va_start (ap, fmt); + status = vsprintf (*buf, fmt, ap); + va_end (ap); + + return status; +} + +grub_int64_t +grub_util_get_disk_size (char *name) +{ + char new_name[strlen (name) + 1], *p; + HANDLE hd; + grub_int64_t size = -1LL; + + strcpy (new_name, name); + for (p = new_name; *p; p++) + if (*p == '/') + *p = '\\'; + + hd = CreateFile (new_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, + 0, OPEN_EXISTING, 0, 0); + + if (hd == INVALID_HANDLE_VALUE) + return size; + + if (! strncmp (new_name, "\\\\.\\", 4)) + { + DWORD nr; + DISK_GEOMETRY g; + + if (! DeviceIoControl (hd, IOCTL_DISK_GET_DRIVE_GEOMETRY, + 0, 0, &g, sizeof (g), &nr, 0)) + goto fail; + + size = g.Cylinders.QuadPart; + size *= g.TracksPerCylinder * g.SectorsPerTrack * g.BytesPerSector; + } + else + { + LARGE_INTEGER s; + + s.LowPart = GetFileSize (hd, &s.HighPart); + size = s.QuadPart; + } + +fail: + + CloseHandle (hd); + + return size; +} + +#endif ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-23 14:11 [PATCH] Mingw support for grub2 Bean @ 2008-08-24 12:40 ` Christian Franke 2008-08-24 12:48 ` Felix Zielcke 2008-08-24 14:12 ` Bean 0 siblings, 2 replies; 13+ messages in thread From: Christian Franke @ 2008-08-24 12:40 UTC (permalink / raw) To: The development of GRUB 2 Bean wrote: > Hi, > > This patch add support for mingw, now you can create native executable > for windows. > > Nice! Does grub-setup work? > ... > --- a/include/grub/util/misc.h > +++ b/include/grub/util/misc.h > ... > +#ifdef __MINGW32__ > + > +#include <windows.h> > + > +grub_int64_t fseeko (FILE *fp, grub_int64_t offset, int whence); > +grub_int64_t ftello (FILE *fp); > The mingw runtime provides fseeko64/ftello64(), see /usr/include/mingw/stdio.h So the following may work: #ifdef __MINGW32__ #define fseeko fseeko64 #define ftello ftello64 #endif or use inline functions. > +void sync (void); > +int asprintf (char **buf, const char *fmt, ...); > + > I would suggest to add AC_CHECK_FUNC(asprintf) to configure. asprintf() is a GNU extension and not part of C99 or POSIX. > +grub_int64_t grub_util_get_disk_size (char *name); > + > +#define sleep Sleep > The Sleep() parameter specifies milliseconds. #define sleep(s) Sleep((s)*1000) or inline void sleep(unsigned s) { Sleep(s * 1000); } or add sleep() to util/misc.c to avoid global inclusion of the namespace polluter windows.h :-) Christian ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 12:40 ` Christian Franke @ 2008-08-24 12:48 ` Felix Zielcke 2008-08-24 15:11 ` Bean 2008-08-24 14:12 ` Bean 1 sibling, 1 reply; 13+ messages in thread From: Felix Zielcke @ 2008-08-24 12:48 UTC (permalink / raw) To: The development of GRUB 2 Am Sonntag, den 24.08.2008, 14:40 +0200 schrieb Christian Franke: > I would suggest to add AC_CHECK_FUNC(asprintf) to configure. > asprintf() is a GNU extension and not part of C99 or POSIX. > See my [RFC] GNU extention topic. There's already in configure.ac a check for #define _GNU_SOURCE which is needed for asprintf to be defined. Thugh I don't know much of cygwin/mingw stuff. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 12:48 ` Felix Zielcke @ 2008-08-24 15:11 ` Bean 2008-08-24 15:25 ` Felix Zielcke 0 siblings, 1 reply; 13+ messages in thread From: Bean @ 2008-08-24 15:11 UTC (permalink / raw) To: The development of GRUB 2 On Sun, Aug 24, 2008 at 8:48 PM, Felix Zielcke <fzielcke@z-51.de> wrote: > Am Sonntag, den 24.08.2008, 14:40 +0200 schrieb Christian Franke: > >> I would suggest to add AC_CHECK_FUNC(asprintf) to configure. >> asprintf() is a GNU extension and not part of C99 or POSIX. >> > See my [RFC] GNU extention topic. > There's already in configure.ac a check for #define _GNU_SOURCE which is > needed for asprintf to be defined. > Thugh I don't know much of cygwin/mingw stuff. Hi, I just check, _GNU_SOURCE is defined for mingw, but asprintf is still missing. I guess mingw implementation is not so completed. -- Bean ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 15:11 ` Bean @ 2008-08-24 15:25 ` Felix Zielcke 2008-08-24 15:31 ` Bean 0 siblings, 1 reply; 13+ messages in thread From: Felix Zielcke @ 2008-08-24 15:25 UTC (permalink / raw) To: The development of GRUB 2 Am Sonntag, den 24.08.2008, 23:11 +0800 schrieb Bean: Hi Bean, > Hi, > > I just check, _GNU_SOURCE is defined for mingw, but asprintf is still > missing. I guess mingw implementation is not so completed. Oh sorry I forgot to tell you that you may need to add a `#include config.h' For my util/getroot.c patch where I use asprintf I had to do it else it wasn't defined. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 15:25 ` Felix Zielcke @ 2008-08-24 15:31 ` Bean 2008-08-24 15:49 ` Bean 0 siblings, 1 reply; 13+ messages in thread From: Bean @ 2008-08-24 15:31 UTC (permalink / raw) To: The development of GRUB 2 On Sun, Aug 24, 2008 at 11:25 PM, Felix Zielcke <fzielcke@z-51.de> wrote: > Am Sonntag, den 24.08.2008, 23:11 +0800 schrieb Bean: > Hi Bean, > >> Hi, >> >> I just check, _GNU_SOURCE is defined for mingw, but asprintf is still >> missing. I guess mingw implementation is not so completed. > > Oh sorry I forgot to tell you that you may need to add a `#include > config.h' > For my util/getroot.c patch where I use asprintf I had to do it else it > wasn't defined. Hi, The result is the same after adding config.h. BTW, I check the internet, there is a patch to add asprintf to mingw, so this function might be available soon. -- Bean ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 15:31 ` Bean @ 2008-08-24 15:49 ` Bean 0 siblings, 0 replies; 13+ messages in thread From: Bean @ 2008-08-24 15:49 UTC (permalink / raw) To: The development of GRUB 2 [-- Attachment #1: Type: text/plain, Size: 182 bytes --] Hi, This is the new patch with modification suggested by Christian, it also change grub-mkdevicemap to support mingw device name //./PHYSICALDRIVE0 and fix some warnings. -- Bean [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: mingw_2.diff --] [-- Type: text/x-diff; name=mingw_2.diff, Size: 7300 bytes --] diff --git a/config.h.in b/config.h.in index e2dd41f..044e81e 100644 --- a/config.h.in +++ b/config.h.in @@ -25,6 +25,9 @@ /* Define if C symbols get an underscore after compilation */ #undef HAVE_ASM_USCORE +/* Define to 1 if you have the `asprintf' function. */ +#undef HAVE_ASPRINTF + /* Define to 1 if you have the <curses.h> header file. */ #undef HAVE_CURSES_H diff --git a/configure.ac b/configure.ac index f561b8b..73cf23a 100644 --- a/configure.ac +++ b/configure.ac @@ -183,7 +183,7 @@ if test "$target_cpu"-"$platform" = i386-pc; then fi # Check for functions. -AC_CHECK_FUNCS(posix_memalign memalign) +AC_CHECK_FUNCS(posix_memalign memalign asprintf) # # Check for target programs. diff --git a/include/grub/symbol.h b/include/grub/symbol.h index e951490..c662c14 100644 --- a/include/grub/symbol.h +++ b/include/grub/symbol.h @@ -28,7 +28,7 @@ # define EXT_C(sym) sym #endif -#ifndef __CYGWIN__ +#if ! defined (__CYGWIN__) && ! defined (__MINGW32__) #define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), "function" ; EXT_C(x): #define VARIABLE(x) .globl EXT_C(x) ; .type EXT_C(x), "object" ; EXT_C(x): #else diff --git a/include/grub/util/misc.h b/include/grub/util/misc.h index c9a8528..3f145e8 100644 --- a/include/grub/util/misc.h +++ b/include/grub/util/misc.h @@ -24,6 +24,9 @@ #include <setjmp.h> #include <unistd.h> +#include <config.h> +#include <grub/types.h> + #ifdef __NetBSD__ /* NetBSD uses /boot for its boot block. */ # define DEFAULT_DIRECTORY "/grub" @@ -55,4 +58,22 @@ void grub_util_write_image_at (const void *img, size_t size, off_t offset, FILE *out); char *grub_util_get_disk_name (int disk, char *name); +#ifndef HAVE_ASPRINTF + +int asprintf (char **buf, const char *fmt, ...); + +#endif + +#ifdef __MINGW32__ + +#define fseeko fseeko64 +#define ftello ftello64 + +void sync (void); +void sleep(int s); + +grub_int64_t grub_util_get_disk_size (char *name); + +#endif + #endif /* ! GRUB_UTIL_MISC_HEADER */ diff --git a/util/biosdisk.c b/util/biosdisk.c index 1137e98..bdede12 100644 --- a/util/biosdisk.c +++ b/util/biosdisk.c @@ -157,7 +157,22 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk) disk->id = drive; /* Get the size. */ -#if defined(__linux__) || defined(__CYGWIN__) +#if defined(__MINGW32__) + { + grub_uint64_t size; + + size = grub_util_get_disk_size (map[drive].device); + + if (size % 512) + grub_util_error ("unaligned device size"); + + disk->total_sectors = size >> 9; + + grub_util_info ("the size of %s is %llu", name, disk->total_sectors); + + return GRUB_ERR_NONE; + } +#elif defined(__linux__) || defined(__CYGWIN__) { unsigned long long nr; int fd; @@ -275,6 +290,9 @@ open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags) #ifdef O_FSYNC flags |= O_FSYNC; #endif +#ifdef O_BINARY + flags |= O_BINARY; +#endif #ifdef __linux__ /* Linux has a bug that the disk cache for a whole disk is not consistent diff --git a/util/getroot.c b/util/getroot.c index 826092b..77b534a 100644 --- a/util/getroot.c +++ b/util/getroot.c @@ -169,7 +169,16 @@ grub_get_prefix (const char *dir) return prefix; } -#ifndef __CYGWIN__ +#ifdef __MINGW32__ + +static char * +find_root_device (const char *dir __attribute__ ((unused)), + dev_t dev __attribute__ ((unused))) +{ + return 0; +} + +#elif ! defined(__CYGWIN__) static char * find_root_device (const char *dir, dev_t dev) diff --git a/util/grub-mkdevicemap.c b/util/grub-mkdevicemap.c index 5b89437..6b8ebd7 100644 --- a/util/grub-mkdevicemap.c +++ b/util/grub-mkdevicemap.c @@ -169,6 +169,9 @@ get_floppy_disk_name (char *name, int unit) #elif defined(__CYGWIN__) /* Cygwin */ sprintf (name, "/dev/fd%d", unit); +#elif defined(__MINGW32__) + (void) unit; + *name = 0; #else # warning "BIOS floppy drives cannot be guessed in your operating system." /* Set NAME to a bogus string. */ @@ -214,6 +217,8 @@ get_ide_disk_name (char *name, int unit) /* Cygwin emulates all disks as /dev/sdX. */ (void) unit; *name = 0; +#elif defined(__MINGW32__) + sprintf (name, "//./PHYSICALDRIVE%d", unit); #else # warning "BIOS IDE drives cannot be guessed in your operating system." /* Set NAME to a bogus string. */ @@ -258,6 +263,9 @@ get_scsi_disk_name (char *name, int unit) #elif defined(__CYGWIN__) /* Cygwin emulates all disks as /dev/sdX. */ sprintf (name, "/dev/sd%c", unit + 'a'); +#elif defined(__MINGW32__) + (void) unit; + *name = 0; #else # warning "BIOS SCSI drives cannot be guessed in your operating system." /* Set NAME to a bogus string. */ diff --git a/util/hostfs.c b/util/hostfs.c index b74fbd3..8773c1c 100644 --- a/util/hostfs.c +++ b/util/hostfs.c @@ -22,6 +22,7 @@ #include <grub/disk.h> #include <grub/misc.h> #include <grub/dl.h> +#include <grub/util/misc.h> #include <dirent.h> #include <stdio.h> @@ -95,15 +96,19 @@ grub_hostfs_open (struct grub_file *file, const char *name) { FILE *f; - f = fopen (name, "r"); + f = fopen (name, "rb"); if (! f) return grub_error (GRUB_ERR_BAD_FILENAME, "can't open `%s'", name); file->data = f; +#ifdef __MINGW32__ + file->size = grub_util_get_disk_size (name); +#else fseeko (f, 0, SEEK_END); file->size = ftello (f); fseeko (f, 0, SEEK_SET); +#endif return GRUB_ERR_NONE; } diff --git a/util/misc.c b/util/misc.c index 7d877cc..4f20ff4 100644 --- a/util/misc.c +++ b/util/misc.c @@ -259,6 +259,8 @@ grub_memalign (grub_size_t align, grub_size_t size) #elif defined(HAVE_MEMALIGN) p = memalign (align, size); #else + (void) align; + (void) size; grub_util_error ("grub_memalign is not supported"); #endif @@ -313,3 +315,85 @@ grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) { } + +#ifndef HAVE_ASPRINTF + +int +asprintf (char **buf, const char *fmt, ...) +{ + int status; + va_list ap; + + /* Should be large enough. */ + *buf = xmalloc (512); + + va_start (ap, fmt); + status = vsprintf (*buf, fmt, ap); + va_end (ap); + + return status; +} + +#endif + +#ifdef __MINGW32__ + +#include <windows.h> +#include <winioctl.h> +#include <stdarg.h> + +void sync (void) +{ +} + +void sleep (int s) +{ + Sleep (s * 1000); +} + +grub_int64_t +grub_util_get_disk_size (char *name) +{ + char new_name[strlen (name) + 1], *p; + HANDLE hd; + grub_int64_t size = -1LL; + + strcpy (new_name, name); + for (p = new_name; *p; p++) + if (*p == '/') + *p = '\\'; + + hd = CreateFile (new_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, + 0, OPEN_EXISTING, 0, 0); + + if (hd == INVALID_HANDLE_VALUE) + return size; + + if (! strncmp (new_name, "\\\\.\\", 4)) + { + DWORD nr; + DISK_GEOMETRY g; + + if (! DeviceIoControl (hd, IOCTL_DISK_GET_DRIVE_GEOMETRY, + 0, 0, &g, sizeof (g), &nr, 0)) + goto fail; + + size = g.Cylinders.QuadPart; + size *= g.TracksPerCylinder * g.SectorsPerTrack * g.BytesPerSector; + } + else + { + LARGE_INTEGER s; + + s.LowPart = GetFileSize (hd, &s.HighPart); + size = s.QuadPart; + } + +fail: + + CloseHandle (hd); + + return size; +} + +#endif ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 12:40 ` Christian Franke 2008-08-24 12:48 ` Felix Zielcke @ 2008-08-24 14:12 ` Bean 2008-08-24 16:04 ` Vesa Jääskeläinen 1 sibling, 1 reply; 13+ messages in thread From: Bean @ 2008-08-24 14:12 UTC (permalink / raw) To: The development of GRUB 2 On Sun, Aug 24, 2008 at 8:40 PM, Christian Franke <Christian.Franke@t-online.de> wrote: > Bean wrote: >> >> Hi, >> >> This patch add support for mingw, now you can create native executable >> for windows. >> >> > > Nice! > > Does grub-setup work? Yes, it works, although mingw can't use device names like /dev/sda, but it can use windows special name //./PHYSICALDRIVE0. > > >> ... >> --- a/include/grub/util/misc.h >> +++ b/include/grub/util/misc.h >> ... >> +#ifdef __MINGW32__ >> + >> +#include <windows.h> >> + >> +grub_int64_t fseeko (FILE *fp, grub_int64_t offset, int whence); >> +grub_int64_t ftello (FILE *fp); >> > > The mingw runtime provides fseeko64/ftello64(), see > /usr/include/mingw/stdio.h > > So the following may work: > > #ifdef __MINGW32__ > #define fseeko fseeko64 > #define ftello ftello64 > #endif > > or use inline functions. Oh, thanks for the tip. > > >> +void sync (void); >> +int asprintf (char **buf, const char *fmt, ...); >> + >> > > I would suggest to add AC_CHECK_FUNC(asprintf) to configure. > asprintf() is a GNU extension and not part of C99 or POSIX. > Good point. > >> +grub_int64_t grub_util_get_disk_size (char *name); >> + >> +#define sleep Sleep >> > > The Sleep() parameter specifies milliseconds. > > #define sleep(s) Sleep((s)*1000) > or > inline void sleep(unsigned s) { Sleep(s * 1000); } > or > add sleep() to util/misc.c to avoid global inclusion of the namespace > polluter windows.h :-) Yes, perhaps I should put it in util/misc.c. -- Bean ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 14:12 ` Bean @ 2008-08-24 16:04 ` Vesa Jääskeläinen 2008-08-24 16:14 ` Bean 0 siblings, 1 reply; 13+ messages in thread From: Vesa Jääskeläinen @ 2008-08-24 16:04 UTC (permalink / raw) To: The development of GRUB 2 Bean wrote: > Yes, it works, although mingw can't use device names like /dev/sda, > but it can use windows special name //./PHYSICALDRIVE0. That should be with back slashes ('\'). Or is there some hack somewhere to support that? ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 16:04 ` Vesa Jääskeläinen @ 2008-08-24 16:14 ` Bean 2008-08-24 16:16 ` Vesa Jääskeläinen 0 siblings, 1 reply; 13+ messages in thread From: Bean @ 2008-08-24 16:14 UTC (permalink / raw) To: The development of GRUB 2 On Mon, Aug 25, 2008 at 12:04 AM, Vesa Jääskeläinen <chaac@nic.fi> wrote: > Bean wrote: >> Yes, it works, although mingw can't use device names like /dev/sda, >> but it can use windows special name //./PHYSICALDRIVE0. > > That should be with back slashes ('\'). Or is there some hack somewhere > to support that? Hi, Mingw would translate / to \, so both are ok. But using / is more clear, as \ is the escape character in cygwin shell, so we need to use two of them, \\\\.\\PHYSICALDRIVE0. -- Bean ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 16:14 ` Bean @ 2008-08-24 16:16 ` Vesa Jääskeläinen 2008-08-24 16:42 ` Christian Franke 0 siblings, 1 reply; 13+ messages in thread From: Vesa Jääskeläinen @ 2008-08-24 16:16 UTC (permalink / raw) To: The development of GRUB 2 Bean wrote: > On Mon, Aug 25, 2008 at 12:04 AM, Vesa Jääskeläinen <chaac@nic.fi> wrote: >> Bean wrote: >>> Yes, it works, although mingw can't use device names like /dev/sda, >>> but it can use windows special name //./PHYSICALDRIVE0. >> That should be with back slashes ('\'). Or is there some hack somewhere >> to support that? > > Hi, > > Mingw would translate / to \, so both are ok. But using / is more > clear, as \ is the escape character in cygwin shell, so we need to use > two of them, \\\\.\\PHYSICALDRIVE0. In cygwin shell... yes... but mingw programs are not meant to be run under that. Mingw programs are native windows programs. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 16:16 ` Vesa Jääskeläinen @ 2008-08-24 16:42 ` Christian Franke 2008-08-29 19:59 ` Bean 0 siblings, 1 reply; 13+ messages in thread From: Christian Franke @ 2008-08-24 16:42 UTC (permalink / raw) To: The development of GRUB 2 Vesa Jääskeläinen wrote: > Bean wrote: > >> On Mon, Aug 25, 2008 at 12:04 AM, Vesa Jääskeläinen <chaac@nic.fi> wrote: >> >>> Bean wrote: >>> >>>> Yes, it works, although mingw can't use device names like /dev/sda, >>>> but it can use windows special name //./PHYSICALDRIVE0. >>>> >>> That should be with back slashes ('\'). Or is there some hack somewhere >>> to support that? >>> >> Hi, >> >> Mingw would translate / to \, so both are ok. But using / is more >> clear, as \ is the escape character in cygwin shell, so we need to use >> two of them, \\\\.\\PHYSICALDRIVE0. >> > > In cygwin shell... yes... but mingw programs are not meant to be run > under that. Mingw programs are native windows programs. > > > Unlike Cygwin, Mingw does not provide an extra library layer. Most standard library functions directly link to msvcrt.dll. The Win32 API (like the DOS API) itself accepts both / and \, only the user level tools usually don't. This is likely because in the early (CP/M->DOS) days, someone decided to use '/' as the option char. Later, when path names are 'borrowed' from Unix, it was too late :-) In fact, all these work to open the first disk: h = CreateFile("\\\\.\\PhysicalDrive0", ...) h = CreateFile("\\\\./PhysicalDrive0", ...) h = CreateFile("//.\\PhysicalDrive0", ...) h = CreateFile("//./PhysicalDrive0", ...) Christian ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] Mingw support for grub2 2008-08-24 16:42 ` Christian Franke @ 2008-08-29 19:59 ` Bean 0 siblings, 0 replies; 13+ messages in thread From: Bean @ 2008-08-29 19:59 UTC (permalink / raw) To: The development of GRUB 2 Hi, Committed. BTW, I add a test in configure.ac, so that it can also work with msys/mingw environment. -- Bean ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-08-29 19:59 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-08-23 14:11 [PATCH] Mingw support for grub2 Bean 2008-08-24 12:40 ` Christian Franke 2008-08-24 12:48 ` Felix Zielcke 2008-08-24 15:11 ` Bean 2008-08-24 15:25 ` Felix Zielcke 2008-08-24 15:31 ` Bean 2008-08-24 15:49 ` Bean 2008-08-24 14:12 ` Bean 2008-08-24 16:04 ` Vesa Jääskeläinen 2008-08-24 16:14 ` Bean 2008-08-24 16:16 ` Vesa Jääskeläinen 2008-08-24 16:42 ` Christian Franke 2008-08-29 19:59 ` Bean
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.