# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: address@hidden # target_branch: ../mainline/ # testament_sha1: b98f325c2969b62232e533c8982d16af5b4897bc # timestamp: 2010-04-29 09:58:23 +0530 # base_revision_id: address@hidden # zfrl4e6s69yqmfuq # # Begin patch === added directory 'bus/emu' === renamed file 'util/pci.c' => 'bus/emu/pci.c' === added directory 'bus/usb/emu' === renamed file 'util/usb.c' => 'bus/usb/emu/usb.c' === modified file 'conf/any-emu.rmk' --- conf/any-emu.rmk 2010-04-19 09:45:59 +0000 +++ conf/any-emu.rmk 2010-04-27 15:25:12 +0000 @@ -9,12 +9,13 @@ kern/corecmd.c kern/file.c kern/fs.c kern/main.c kern/misc.c \ kern/parser.c kern/partition.c kern/term.c \ kern/rescue_reader.c kern/rescue_parser.c \ - \ - util/console.c util/grub-emu.c util/misc.c \ - util/hostdisk.c util/getroot.c util/mm.c util/time.c \ - \ - gnulib/progname.c util/hostfs.c disk/host.c -kernel_img_HEADERS += datetime.h util/misc.h + \ + kern/emu/main.c kern/emu/mm.c kern/emu/misc.c \ + kern/emu/getroot.c kern/emu/time.c kern/emu/hostdisk.c \ + kern/emu/hostfs.c kern/emu/console.c \ + \ + gnulib/progname.c disk/host.c +kernel_img_HEADERS += datetime.h emu/misc.h kernel_img_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Wno-undef -I$(srcdir)/gnulib kernel_img_LDFLAGS = $(COMMON_LDFLAGS) TARGET_NO_STRIP = yes @@ -49,7 +50,7 @@ kernel_img_HEADERS += libusb.h pkglib_MODULES += libusb.mod -libusb_mod_SOURCES = util/usb.c +libusb_mod_SOURCES = bus/usb/emu/usb.c libusb_mod_CFLAGS = libusb_mod_LDFLAGS = $(COMMON_LDFLAGS) @@ -76,7 +77,7 @@ ifeq ($(enable_grub_emu_sdl), yes) pkglib_MODULES += sdl.mod -sdl_mod_SOURCES = util/sdl.c +sdl_mod_SOURCES = video/emu/sdl.c sdl_mod_CFLAGS = sdl_mod_LDFLAGS = $(COMMON_LDFLAGS) grub_emu_LDFLAGS += $(LIBSDL) @@ -85,7 +86,7 @@ ifeq ($(enable_grub_emu_pci), yes) pkglib_MODULES += pci.mod -pci_mod_SOURCES = util/pci.c commands/lspci.c +pci_mod_SOURCES = bus/emu/pci.c commands/lspci.c pci_mod_LDFLAGS = $(COMMON_LDFLAGS) grub_emu_LDFLAGS += $(LIBPCIACCESS) kernel_img_HEADERS += libpciaccess.h @@ -104,10 +105,10 @@ CLEANFILES += grub-emu ifneq ($(TARGET_NO_MODULES), yes) grub-emu: $(pkglib_PROGRAMS) - $(CC) -o $@ $(pkglib_PROGRAMS) $(grub_emu_LDFLAGS) $(LDFLAGS) + $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) else grub-emu: $(pkglib_MODULES) $(pkglib_PROGRAMS) - $(CC) -o $@ $(pkglib_MODULES) $(pkglib_PROGRAMS) $(grub_emu_LDFLAGS) $(LDFLAGS) + $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) endif GRUB_EMU=grub-emu === modified file 'conf/common.rmk' --- conf/common.rmk 2010-04-10 23:14:31 +0000 +++ conf/common.rmk 2010-04-27 15:25:12 +0000 @@ -6,7 +6,7 @@ sbin_UTILITIES += grub-mkdevicemap grub_mkdevicemap_SOURCES = gnulib/progname.c util/grub-mkdevicemap.c \ util/deviceiter.c \ - util/misc.c + util/misc.c kern/emu/misc.c ifeq ($(target_cpu)-$(platform), sparc64-ieee1275) grub_mkdevicemap_SOURCES += util/ieee1275/ofpath.c util/ieee1275/devicemap.c @@ -16,16 +16,15 @@ # For grub-mkelfimage. bin_UTILITIES += grub-mkelfimage -grub_mkelfimage_SOURCES = gnulib/progname.c \ - util/elf/grub-mkimage.c util/misc.c \ - util/resolve.c +grub_mkelfimage_SOURCES = gnulib/progname.c util/elf/grub-mkimage.c \ + util/misc.c kern/emu/misc.c util/resolve.c util/elf/grub-mkimage.c_DEPENDENCIES = Makefile # For grub-probe. sbin_UTILITIES += grub-probe util/grub-probe.c_DEPENDENCIES = grub_probe_init.h grub_probe_SOURCES = gnulib/progname.c util/grub-probe.c \ - util/hostdisk.c util/misc.c util/getroot.c util/mm.c \ + kern/emu/hostdisk.c util/misc.c kern/emu/misc.c kern/emu/getroot.c kern/emu/mm.c \ kern/device.c kern/disk.c kern/err.c kern/misc.c \ kern/parser.c kern/partition.c kern/file.c kern/list.c \ \ @@ -60,8 +59,8 @@ # For grub-fstest. util/grub-fstest.c_DEPENDENCIES = grub_fstest_init.h -grub_fstest_SOURCES = gnulib/progname.c util/grub-fstest.c util/hostfs.c \ - util/misc.c util/mm.c \ +grub_fstest_SOURCES = gnulib/progname.c util/grub-fstest.c kern/emu/hostfs.c \ + util/misc.c kern/emu/misc.c kern/emu/mm.c \ kern/file.c kern/device.c kern/disk.c kern/err.c kern/misc.c \ disk/host.c disk/loopback.c kern/list.c kern/command.c \ lib/arg.c commands/extcmd.c normal/datetime.c normal/misc.c \ @@ -83,14 +82,14 @@ # For grub-mkfont. ifeq ($(enable_grub_mkfont), yes) bin_UTILITIES += grub-mkfont -grub_mkfont_SOURCES = gnulib/progname.c util/grub-mkfont.c util/misc.c +grub_mkfont_SOURCES = gnulib/progname.c util/grub-mkfont.c util/misc.c kern/emu/misc.c grub_mkfont_CFLAGS = $(freetype_cflags) grub_mkfont_LDFLAGS = $(freetype_libs) endif # For grub-mkrelpath. bin_UTILITIES += grub-mkrelpath -grub_mkrelpath_SOURCES = gnulib/progname.c util/grub-mkrelpath.c util/misc.c +grub_mkrelpath_SOURCES = gnulib/progname.c util/grub-mkrelpath.c util/misc.c kern/emu/misc.c bin_UTILITIES += grub-bin2h grub_bin2h_SOURCES = gnulib/progname.c util/bin2h.c @@ -104,7 +103,7 @@ bin_UTILITIES += grub-script-check util/grub-script-check.c_DEPENDENCIES = grub_script_check_init.h grub_script_check_SOURCES = gnulib/progname.c gnulib/getdelim.c gnulib/getline.c \ - util/grub-script-check.c util/misc.c util/mm.c \ + util/grub-script-check.c util/misc.c kern/emu/misc.c kern/emu/mm.c \ script/main.c script/script.c script/function.c script/lexer.c \ kern/handler.c kern/err.c kern/parser.c kern/list.c \ kern/misc.c kern/env.c grub_script_check_init.c grub_script.tab.c \ @@ -187,7 +186,7 @@ # for grub-editenv bin_UTILITIES += grub-editenv -grub_editenv_SOURCES = gnulib/progname.c util/grub-editenv.c lib/envblk.c util/misc.c util/mm.c kern/misc.c kern/err.c +grub_editenv_SOURCES = gnulib/progname.c util/grub-editenv.c lib/envblk.c util/misc.c kern/emu/misc.c kern/emu/mm.c kern/misc.c kern/err.c CLEANFILES += grub-editenv # Needed for genmk.rb to work @@ -195,7 +194,7 @@ bin_UTILITIES += grub-macho2img grub-pe2elf endif -grub_pe2elf_SOURCES = gnulib/progname.c util/grub-pe2elf.c util/misc.c +grub_pe2elf_SOURCES = gnulib/progname.c util/grub-pe2elf.c util/misc.c kern/emu/misc.c CLEANFILES += grub-pe2elf grub_macho2img_SOURCES = util/grub-macho2img.c @@ -855,7 +854,7 @@ boot_mod_LDFLAGS = $(COMMON_LDFLAGS) bin_UTILITIES += grub-mkpasswd-pbkdf2 -grub_mkpasswd_pbkdf2_SOURCES = gnulib/progname.c gnulib/getdelim.c gnulib/getline.c util/grub-mkpasswd-pbkdf2.c lib/crypto.c lib/libgcrypt-grub/cipher/sha512.c lib/pbkdf2.c util/misc.c util/mm.c kern/err.c +grub_mkpasswd_pbkdf2_SOURCES = gnulib/progname.c gnulib/getdelim.c gnulib/getline.c util/grub-mkpasswd-pbkdf2.c lib/crypto.c lib/libgcrypt-grub/cipher/sha512.c lib/pbkdf2.c util/misc.c kern/emu/misc.c kern/emu/mm.c kern/err.c grub_mkpasswd_pbkdf2_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(srcdir)/lib/libgcrypt_wrap -DGRUB_MKPASSWD=1 include $(srcdir)/conf/gcry.mk === modified file 'disk/lvm.c' --- disk/lvm.c 2010-04-17 16:58:56 +0000 +++ disk/lvm.c 2010-04-27 15:25:12 +0000 @@ -25,7 +25,7 @@ #include #ifdef GRUB_UTIL -#include +#include #endif static struct grub_lvm_vg *vg_list; === modified file 'include/grub/dl.h' --- include/grub/dl.h 2010-02-07 14:17:26 +0000 +++ include/grub/dl.h 2010-04-27 08:27:14 +0000 @@ -96,23 +96,8 @@ #else #define GRUB_NO_MODULES 0 #endif -#if GRUB_NO_MODULES -static inline int -grub_dl_ref (grub_dl_t mod) -{ - (void) mod; - return 0; -} -static inline int -grub_dl_unref (grub_dl_t mod) -{ - (void) mod; - return 0; -} -#else int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); -#endif void EXPORT_FUNC(grub_dl_iterate) (int (*hook) (grub_dl_t mod)); grub_dl_t EXPORT_FUNC(grub_dl_get) (const char *name); grub_err_t grub_dl_register_symbol (const char *name, void *addr, === added directory 'include/grub/emu' === renamed file 'include/grub/util/console.h' => 'include/grub/emu/console.h' === renamed file 'include/grub/util/getroot.h' => 'include/grub/emu/getroot.h' === renamed file 'include/grub/util/hostdisk.h' => 'include/grub/emu/hostdisk.h' === added file 'include/grub/emu/misc.h' --- include/grub/emu/misc.h 1970-01-01 00:00:00 +0000 +++ include/grub/emu/misc.h 2010-04-27 15:25:12 +0000 @@ -0,0 +1,41 @@ +#ifndef GRUB_EMU_MISC_H +#define GRUB_EMU_MISC_H 1 + +#include +#include + +#ifdef __NetBSD__ +/* NetBSD uses /boot for its boot block. */ +# define DEFAULT_DIRECTORY "/grub" +#else +# define DEFAULT_DIRECTORY "/boot/grub" +#endif + +#define DEFAULT_DEVICE_MAP DEFAULT_DIRECTORY "/device.map" + +extern int verbosity; +extern const char *program_name; + +void grub_init_all (void); +void grub_fini_all (void); + +void * EXPORT_FUNC(xmalloc) (grub_size_t size); +void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size); +char * EXPORT_FUNC(xstrdup) (const char *str); +char * EXPORT_FUNC(xasprintf) (const char *fmt, ...); + +void EXPORT_FUNC(grub_util_warn) (const char *fmt, ...); +void EXPORT_FUNC(grub_util_info) (const char *fmt, ...); +void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((noreturn)); + +#ifndef HAVE_VASPRINTF +int EXPORT_FUNC(vasprintf) (char **buf, const char *fmt, va_list ap); +#endif + +#ifndef HAVE_ASPRINTF +int EXPORT_FUNC(asprintf) (char **buf, const char *fmt, ...); +#endif + +char * EXPORT_FUNC(xasprintf) (const char *fmt, ...); + +#endif /* GRUB_EMU_MISC_H */ === modified file 'include/grub/util/misc.h' --- include/grub/util/misc.h 2010-04-19 09:45:59 +0000 +++ include/grub/util/misc.h 2010-04-27 15:25:12 +0000 @@ -28,26 +28,7 @@ #include #include #include - -#ifdef __NetBSD__ -/* NetBSD uses /boot for its boot block. */ -# define DEFAULT_DIRECTORY "/grub" -#else -# define DEFAULT_DIRECTORY "/boot/grub" -#endif - -#define DEFAULT_DEVICE_MAP DEFAULT_DIRECTORY "/device.map" - -extern char *progname; -extern int verbosity; - -void EXPORT_FUNC(grub_util_warn) (const char *fmt, ...); -void EXPORT_FUNC(grub_util_info) (const char *fmt, ...); -void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((noreturn)); - -void *xmalloc (size_t size); -void *xrealloc (void *ptr, size_t size); -char *xstrdup (const char *str); +#include char *grub_util_get_path (const char *dir, const char *file); size_t grub_util_get_fp_size (FILE *fp); @@ -59,20 +40,6 @@ void grub_util_write_image_at (const void *img, size_t size, off_t offset, FILE *out); -#ifndef HAVE_VASPRINTF - -int vasprintf (char **buf, const char *fmt, va_list ap); - -#endif - -#ifndef HAVE_ASPRINTF - -int asprintf (char **buf, const char *fmt, ...); - -#endif - -char *xasprintf (const char *fmt, ...); - #ifdef __MINGW32__ #define fseeko fseeko64 === modified file 'kern/dl.c' --- kern/dl.c 2010-03-24 12:54:39 +0000 +++ kern/dl.c 2010-04-27 08:27:14 +0000 @@ -469,12 +469,14 @@ return GRUB_ERR_NONE; } -#if !GRUB_NO_MODULES int grub_dl_ref (grub_dl_t mod) { grub_dl_dep_t dep; + if (!mod) + return 0; + for (dep = mod->dep; dep; dep = dep->next) grub_dl_ref (dep->mod); @@ -486,12 +488,14 @@ { grub_dl_dep_t dep; + if (!mod) + return 0; + for (dep = mod->dep; dep; dep = dep->next) grub_dl_unref (dep->mod); return --mod->ref_count; } -#endif static void grub_dl_flush_cache (grub_dl_t mod) === added directory 'kern/emu' === renamed file 'util/console.c' => 'kern/emu/console.c' --- util/console.c 2010-01-09 22:42:17 +0000 +++ kern/emu/console.c 2010-04-27 05:20:28 +0000 @@ -27,7 +27,7 @@ # define A_STANDOUT 0 #endif /* ! A_STANDOUT */ -#include +#include #include #include === renamed file 'util/getroot.c' => 'kern/emu/getroot.c' --- util/getroot.c 2010-04-10 15:07:33 +0000 +++ kern/emu/getroot.c 2010-04-27 05:20:28 +0000 @@ -22,6 +22,8 @@ #include #include #include +#include +#include #ifdef __CYGWIN__ # include @@ -36,9 +38,11 @@ #include #endif -#include -#include -#include +#include +#include +#include +#include +#include static void strip_extra_slashes (char *dir) === renamed file 'util/hostdisk.c' => 'kern/emu/hostdisk.c' --- util/hostdisk.c 2010-04-18 12:02:13 +0000 +++ kern/emu/hostdisk.c 2010-04-27 05:20:28 +0000 @@ -22,8 +22,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include === renamed file 'util/hostfs.c' => 'kern/emu/hostfs.c' === renamed file 'util/grub-emu.c' => 'kern/emu/main.c' --- util/grub-emu.c 2010-02-07 16:52:11 +0000 +++ kern/emu/main.c 2010-04-27 08:27:14 +0000 @@ -16,7 +16,10 @@ * along with GRUB. If not, see . */ +#include +#include #include +#include #include #include #include @@ -24,16 +27,17 @@ #include #include +#include #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include #include -#include +#include #include #include #include @@ -261,3 +265,32 @@ return 0; } + +#ifdef __MINGW32__ + +void +grub_millisleep (grub_uint32_t ms) +{ + Sleep (ms); +} + +#else + +void +grub_millisleep (grub_uint32_t ms) +{ + struct timespec ts; + + ts.tv_sec = ms / 1000; + ts.tv_nsec = (ms % 1000) * 1000000; + nanosleep (&ts, NULL); +} + +#endif + +#if GRUB_NO_MODULES +void +grub_register_exported_symbols (void) +{ +} +#endif === added file 'kern/emu/misc.c' --- kern/emu/misc.c 1970-01-01 00:00:00 +0000 +++ kern/emu/misc.c 2010-04-27 15:25:12 +0000 @@ -0,0 +1,173 @@ +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +int verbosity; + +void +grub_util_warn (const char *fmt, ...) +{ + va_list ap; + + fprintf (stderr, _("%s: warn:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + fflush (stderr); +} + +void +grub_util_info (const char *fmt, ...) +{ + if (verbosity > 0) + { + va_list ap; + + fprintf (stderr, _("%s: info:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + fflush (stderr); + } +} + +void +grub_util_error (const char *fmt, ...) +{ + va_list ap; + + fprintf (stderr, _("%s: error:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + exit (1); +} + +void * +xmalloc (grub_size_t size) +{ + void *p; + + p = malloc (size); + if (! p) + grub_util_error ("out of memory"); + + return p; +} + +void * +xrealloc (void *ptr, grub_size_t size) +{ + ptr = realloc (ptr, size); + if (! ptr) + grub_util_error ("out of memory"); + + return ptr; +} + +char * +xstrdup (const char *str) +{ + size_t len; + char *newstr; + + len = strlen (str); + newstr = (char *) xmalloc (len + 1); + memcpy (newstr, str, len + 1); + + return newstr; +} + +#ifndef HAVE_VASPRINTF + +int +vasprintf (char **buf, const char *fmt, va_list ap) +{ + /* Should be large enough. */ + *buf = xmalloc (512); + + return vsprintf (*buf, fmt, ap); +} + +#endif + +#ifndef HAVE_ASPRINTF + +int +asprintf (char **buf, const char *fmt, ...) +{ + int status; + va_list ap; + + va_start (ap, fmt); + status = vasprintf (*buf, fmt, ap); + va_end (ap); + + return status; +} + +#endif + +char * +xasprintf (const char *fmt, ...) +{ + va_list ap; + char *result; + + va_start (ap, fmt); + if (vasprintf (&result, fmt, ap) < 0) + { + if (errno == ENOMEM) + grub_util_error ("out of memory"); + return NULL; + } + + return result; +} + +void +grub_exit (void) +{ + exit (1); +} + +grub_uint64_t +grub_get_time_ms (void) +{ + struct timeval tv; + + gettimeofday (&tv, 0); + + return (tv.tv_sec * 1000 + tv.tv_usec / 1000); +} + +grub_uint32_t +grub_get_rtc (void) +{ + struct timeval tv; + + gettimeofday (&tv, 0); + + return (tv.tv_sec * GRUB_TICKS_PER_SECOND + + (((tv.tv_sec % GRUB_TICKS_PER_SECOND) * 1000000 + tv.tv_usec) + * GRUB_TICKS_PER_SECOND / 1000000)); +} === renamed file 'util/mm.c' => 'kern/emu/mm.c' === renamed file 'util/time.c' => 'kern/emu/time.c' === modified file 'util/grub-mkrelpath.c' --- util/grub-mkrelpath.c 2010-01-16 00:26:52 +0000 +++ util/grub-mkrelpath.c 2010-04-27 15:25:12 +0000 @@ -17,6 +17,7 @@ * along with GRUB. If not, see . */ +#include #include #include #include === modified file 'util/grub-probe.c' --- util/grub-probe.c 2010-04-10 15:09:24 +0000 +++ util/grub-probe.c 2010-04-27 15:25:12 +0000 @@ -20,14 +20,15 @@ #include #include #include +#include #include #include #include #include #include #include -#include -#include +#include +#include #include #include #include === modified file 'util/misc.c' --- util/misc.c 2010-04-09 23:25:46 +0000 +++ util/misc.c 2010-04-27 15:25:12 +0000 @@ -58,53 +58,6 @@ #include #endif -int verbosity = 0; - -void -grub_util_warn (const char *fmt, ...) -{ - va_list ap; - - fprintf (stderr, _("%s: warn:"), program_name); - fprintf (stderr, " "); - va_start (ap, fmt); - vfprintf (stderr, fmt, ap); - va_end (ap); - fprintf (stderr, ".\n"); - fflush (stderr); -} - -void -grub_util_info (const char *fmt, ...) -{ - if (verbosity > 0) - { - va_list ap; - - fprintf (stderr, _("%s: info:"), program_name); - fprintf (stderr, " "); - va_start (ap, fmt); - vfprintf (stderr, fmt, ap); - va_end (ap); - fprintf (stderr, ".\n"); - fflush (stderr); - } -} - -void -grub_util_error (const char *fmt, ...) -{ - va_list ap; - - fprintf (stderr, _("%s: error:"), program_name); - fprintf (stderr, " "); - va_start (ap, fmt); - vfprintf (stderr, fmt, ap); - va_end (ap); - fprintf (stderr, ".\n"); - exit (1); -} - #ifdef GRUB_UTIL int grub_err_printf (const char *fmt, ...) @@ -120,41 +73,6 @@ } #endif -void * -xmalloc (size_t size) -{ - void *p; - - p = malloc (size); - if (! p) - grub_util_error ("out of memory"); - - return p; -} - -void * -xrealloc (void *ptr, size_t size) -{ - ptr = realloc (ptr, size); - if (! ptr) - grub_util_error ("out of memory"); - - return ptr; -} - -char * -xstrdup (const char *str) -{ - size_t len; - char *newstr; - - len = strlen (str); - newstr = (char *) xmalloc (len + 1); - memcpy (newstr, str, len + 1); - - return newstr; -} - char * grub_util_get_path (const char *dir, const char *file) { @@ -277,34 +195,6 @@ } #endif -void -grub_exit (void) -{ - exit (1); -} - -grub_uint32_t -grub_get_rtc (void) -{ - struct timeval tv; - - gettimeofday (&tv, 0); - - return (tv.tv_sec * GRUB_TICKS_PER_SECOND - + (((tv.tv_sec % GRUB_TICKS_PER_SECOND) * 1000000 + tv.tv_usec) - * GRUB_TICKS_PER_SECOND / 1000000)); -} - -grub_uint64_t -grub_get_time_ms (void) -{ - struct timeval tv; - - gettimeofday (&tv, 0); - - return (tv.tv_sec * 1000 + tv.tv_usec / 1000); -} - #ifdef __MINGW32__ void @@ -335,53 +225,6 @@ } #endif -#ifndef HAVE_VASPRINTF - -int -vasprintf (char **buf, const char *fmt, va_list ap) -{ - /* Should be large enough. */ - *buf = xmalloc (512); - - return vsprintf (*buf, fmt, ap); -} - -#endif - -#ifndef HAVE_ASPRINTF - -int -asprintf (char **buf, const char *fmt, ...) -{ - int status; - va_list ap; - - va_start (ap, fmt); - status = vasprintf (*buf, fmt, ap); - va_end (ap); - - return status; -} - -#endif - -char * -xasprintf (const char *fmt, ...) -{ - va_list ap; - char *result; - - va_start (ap, fmt); - if (vasprintf (&result, fmt, ap) < 0) - { - if (errno == ENOMEM) - grub_util_error ("out of memory"); - return NULL; - } - - return result; -} - #ifdef __MINGW32__ void sync (void) @@ -564,3 +407,17 @@ #endif /* (defined(ENABLE_NLS) && ENABLE_NLS) */ } #endif + +int +grub_dl_ref (grub_dl_t mod) +{ + (void) mod; + return 0; +} + +int +grub_dl_unref (grub_dl_t mod) +{ + (void) mod; + return 0; +} === added directory 'video/emu' === renamed file 'util/sdl.c' => 'video/emu/sdl.c' # Begin bundle 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