2004-03-14 Jeroen Dekkers <jeroen@dekkers.cx>
* Makefile.in: Update copyright. * genmodsrc.sh: Likewise. * gensymlist.sh: Likewise. * term/i386/pc/vga.c: Indent correctly. * util/i386/pc/pupa-mkimage.c (usage): Use PACKAGE_BUGREPORT as bugreporting address. * util/i386/pc/pupa-setup.c (usage): Likewise, (main): Call pupa_ext2_init and pupa_ext2_fini. * fs/fat.c (log2): Renamed to ... (fat_log2): ... this. All callers changed. * kern/misc.c (memcpy): Alias to pupa_memmove. * loader/i386/pc/multiboot.c (pupa_rescue_cmd_multiboot): Fix lvalue cast. * util/console.c (pupa_ncurses_fini): Return 0. * util/i386/pc/biosdisk.c (pupa_util_biosdisk_open)[__linux__]: Move fail label here. [__GNU__]: Don't warn when using stat. (open_device)[!__linux__]: Check if FD < 0 instead of !FD. (pupa_util_biosdisk_get_pupa_dev)[__GNU__]: Change type of N to long int. Use strtol instead of strtoul.
This commit is contained in:
parent
db1771cfbe
commit
8c8cc20511
12 changed files with 149 additions and 115 deletions
27
ChangeLog
27
ChangeLog
|
@ -1,3 +1,30 @@
|
||||||
|
2004-03-14 Jeroen Dekkers <jeroen@dekkers.cx>
|
||||||
|
|
||||||
|
* Makefile.in: Update copyright.
|
||||||
|
* genmodsrc.sh: Likewise.
|
||||||
|
* gensymlist.sh: Likewise.
|
||||||
|
* term/i386/pc/vga.c: Indent correctly.
|
||||||
|
|
||||||
|
* util/i386/pc/pupa-mkimage.c (usage): Use PACKAGE_BUGREPORT as
|
||||||
|
bugreporting address.
|
||||||
|
* util/i386/pc/pupa-setup.c (usage): Likewise,
|
||||||
|
(main): Call pupa_ext2_init and pupa_ext2_fini.
|
||||||
|
|
||||||
|
* fs/fat.c (log2): Renamed to ...
|
||||||
|
(fat_log2): ... this.
|
||||||
|
All callers changed.
|
||||||
|
* kern/misc.c (memcpy): Alias to pupa_memmove.
|
||||||
|
* loader/i386/pc/multiboot.c (pupa_rescue_cmd_multiboot): Fix
|
||||||
|
lvalue cast.
|
||||||
|
* util/console.c (pupa_ncurses_fini): Return 0.
|
||||||
|
|
||||||
|
* util/i386/pc/biosdisk.c (pupa_util_biosdisk_open)[__linux__]:
|
||||||
|
Move fail label here.
|
||||||
|
[__GNU__]: Don't warn when using stat.
|
||||||
|
(open_device)[!__linux__]: Check if FD < 0 instead of !FD.
|
||||||
|
(pupa_util_biosdisk_get_pupa_dev)[__GNU__]: Change type of N to
|
||||||
|
long int. Use strtol instead of strtoul.
|
||||||
|
|
||||||
2004-03-14 Marco Gerards <metgerards@student.han.nl>
|
2004-03-14 Marco Gerards <metgerards@student.han.nl>
|
||||||
|
|
||||||
* commands/boot.c: New file.
|
* commands/boot.c: New file.
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# -*- makefile -*-
|
# -*- makefile -*-
|
||||||
#
|
#
|
||||||
# Copyright (C) 1994,1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
|
# Copyright (C) 1994,95,96,97,98,99,2000,01,02,04 Free Software Foundation, Inc.
|
||||||
# Copyright (C) 2002 Yoshinori K. Okuji <okuji@enbug.org>
|
|
||||||
#
|
#
|
||||||
# This Makefile.in is free software; the author
|
# This Makefile.in is free software; the author
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
9
fs/fat.c
9
fs/fat.c
|
@ -1,7 +1,7 @@
|
||||||
/* fat.c - FAT filesystem */
|
/* fat.c - FAT filesystem */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2000,2001,2002,2003 Free Software Foundation, Inc.
|
* Copyright (C) 2000,2001,2002,2003,2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -130,7 +130,7 @@ static pupa_dl_t my_mod;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
log2 (unsigned x)
|
fat_log2 (unsigned x)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -165,12 +165,13 @@ pupa_fat_mount (pupa_disk_t disk)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
/* Get the sizes of logical sectors and clusters. */
|
/* Get the sizes of logical sectors and clusters. */
|
||||||
data->logical_sector_bits = log2 (pupa_le_to_cpu16 (bpb.bytes_per_sector));
|
data->logical_sector_bits =
|
||||||
|
fat_log2 (pupa_le_to_cpu16 (bpb.bytes_per_sector));
|
||||||
if (data->logical_sector_bits < PUPA_DISK_SECTOR_BITS)
|
if (data->logical_sector_bits < PUPA_DISK_SECTOR_BITS)
|
||||||
goto fail;
|
goto fail;
|
||||||
data->logical_sector_bits -= PUPA_DISK_SECTOR_BITS;
|
data->logical_sector_bits -= PUPA_DISK_SECTOR_BITS;
|
||||||
|
|
||||||
data->cluster_bits = log2 (bpb.sectors_per_cluster);
|
data->cluster_bits = fat_log2 (bpb.sectors_per_cluster);
|
||||||
if (data->cluster_bits < 0)
|
if (data->cluster_bits < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
data->cluster_bits += data->logical_sector_bits;
|
data->cluster_bits += data->logical_sector_bits;
|
||||||
|
|
|
@ -20,7 +20,7 @@ cat <<EOF
|
||||||
/* This file is automatically generated by genmodsrc.sh. DO NOT EDIT! */
|
/* This file is automatically generated by genmodsrc.sh. DO NOT EDIT! */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2002 Yoshinori K. Okuji <okuji@enbug.org>
|
* Copyright (C) 2002 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -15,7 +15,7 @@ cat <<EOF
|
||||||
/* This file is automatically generated by gensymlist.sh. DO NOT EDIT! */
|
/* This file is automatically generated by gensymlist.sh. DO NOT EDIT! */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2002 Yoshinori K. Okuji <okuji@enbug.org>
|
* Copyright (C) 2002 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* misc.c - definitions of misc functions */
|
/* misc.c - definitions of misc functions */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 1999,2000,2001,2002,2003 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -45,6 +45,9 @@ pupa_memmove (void *dest, const void *src, pupa_size_t n)
|
||||||
|
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
/* GCC emits references to memcpy() for struct copies etc. */
|
||||||
|
void *memcpy (void *dest, const void *src, pupa_size_t n)
|
||||||
|
__attribute__ ((alias ("pupa_memmove")));
|
||||||
|
|
||||||
char *
|
char *
|
||||||
pupa_strcpy (char *dest, const char *src)
|
pupa_strcpy (char *dest, const char *src)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* multiboot.c - boot a multiboot OS image. */
|
/* multiboot.c - boot a multiboot OS image. */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2003 Free Software Foundation, Inc.
|
* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -119,7 +119,7 @@ pupa_rescue_cmd_multiboot (int argc, char *argv[])
|
||||||
be at least 12 bytes and aligned on a 4-byte boundary. */
|
be at least 12 bytes and aligned on a 4-byte boundary. */
|
||||||
for (header = (struct pupa_multiboot_header *) buffer;
|
for (header = (struct pupa_multiboot_header *) buffer;
|
||||||
((char *) header <= buffer + len - 12) || (header = 0);
|
((char *) header <= buffer + len - 12) || (header = 0);
|
||||||
(char *)header += 4)
|
header = (struct pupa_multiboot_header *) ((char *)header + 4))
|
||||||
{
|
{
|
||||||
if (header->magic == PUPA_MB_MAGIC
|
if (header->magic == PUPA_MB_MAGIC
|
||||||
&& !(header->magic + header->flags + header->checksum))
|
&& !(header->magic + header->flags + header->checksum))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2000,2001,2002,2003 Free Software Foundation, Inc.
|
* Copyright (C) 2000,2001,2002,2003,2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -407,15 +407,15 @@ pupa_vga_putchar (pupa_uint32_t c)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static pupa_uint16_t
|
static pupa_uint16_t
|
||||||
pupa_vga_getxy (void)
|
pupa_vga_getxy (void)
|
||||||
{
|
{
|
||||||
return ((xpos << 8) | ypos);
|
return ((xpos << 8) | ypos);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pupa_vga_gotoxy (pupa_uint8_t x, pupa_uint8_t y)
|
pupa_vga_gotoxy (pupa_uint8_t x, pupa_uint8_t y)
|
||||||
{
|
{
|
||||||
if (x >= TEXT_WIDTH || y >= TEXT_HEIGHT)
|
if (x >= TEXT_WIDTH || y >= TEXT_HEIGHT)
|
||||||
{
|
{
|
||||||
pupa_error (PUPA_ERR_OUT_OF_RANGE, "invalid point (%u,%u)",
|
pupa_error (PUPA_ERR_OUT_OF_RANGE, "invalid point (%u,%u)",
|
||||||
|
@ -431,11 +431,11 @@ pupa_vga_putchar (pupa_uint32_t c)
|
||||||
|
|
||||||
if (cursor_state)
|
if (cursor_state)
|
||||||
write_cursor ();
|
write_cursor ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pupa_vga_cls (void)
|
pupa_vga_cls (void)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < TEXT_WIDTH * TEXT_HEIGHT; i++)
|
for (i = 0; i < TEXT_WIDTH * TEXT_HEIGHT; i++)
|
||||||
|
@ -450,11 +450,11 @@ pupa_vga_putchar (pupa_uint32_t c)
|
||||||
pupa_memset (VGA_MEM, 0, VGA_WIDTH * VGA_HEIGHT / 8);
|
pupa_memset (VGA_MEM, 0, VGA_WIDTH * VGA_HEIGHT / 8);
|
||||||
|
|
||||||
xpos = ypos = 0;
|
xpos = ypos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pupa_vga_setcolorstate (pupa_term_color_state state)
|
pupa_vga_setcolorstate (pupa_term_color_state state)
|
||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case PUPA_TERM_COLOR_STANDARD:
|
case PUPA_TERM_COLOR_STANDARD:
|
||||||
|
@ -469,18 +469,18 @@ pupa_vga_putchar (pupa_uint32_t c)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pupa_vga_setcolor (pupa_uint8_t normal_color __attribute__ ((unused)),
|
pupa_vga_setcolor (pupa_uint8_t normal_color __attribute__ ((unused)),
|
||||||
pupa_uint8_t highlight_color __attribute__ ((unused)))
|
pupa_uint8_t highlight_color __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pupa_vga_setcursor (int on)
|
pupa_vga_setcursor (int on)
|
||||||
{
|
{
|
||||||
if (cursor_state != on)
|
if (cursor_state != on)
|
||||||
{
|
{
|
||||||
if (cursor_state)
|
if (cursor_state)
|
||||||
|
@ -490,9 +490,9 @@ pupa_vga_putchar (pupa_uint32_t c)
|
||||||
|
|
||||||
cursor_state = on;
|
cursor_state = on;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct pupa_term pupa_vga_term =
|
static struct pupa_term pupa_vga_term =
|
||||||
{
|
{
|
||||||
.name = "vga",
|
.name = "vga",
|
||||||
.init = pupa_vga_init,
|
.init = pupa_vga_init,
|
||||||
|
|
|
@ -177,6 +177,7 @@ static pupa_err_t
|
||||||
pupa_ncurses_fini (void)
|
pupa_ncurses_fini (void)
|
||||||
{
|
{
|
||||||
endwin ();
|
endwin ();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* biosdisk.c - emulate biosdisk */
|
/* biosdisk.c - emulate biosdisk */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 1999,2000,2001,2002,2003 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -190,11 +190,12 @@ pupa_util_biosdisk_open (const char *name, pupa_disk_t disk)
|
||||||
|
|
||||||
return PUPA_ERR_NONE;
|
return PUPA_ERR_NONE;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
# warning "No special routine to get the size of a block device is implemented for your OS. This is not possibly fatal."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
/* In GNU/Hurd, stat() will return the right size. */
|
||||||
|
#elif !defined (__GNU__)
|
||||||
|
# warning "No special routine to get the size of a block device is implemented for your OS. This is not possibly fatal."
|
||||||
|
#endif
|
||||||
if (stat (map[drive], &st) < 0)
|
if (stat (map[drive], &st) < 0)
|
||||||
return pupa_error (PUPA_ERR_BAD_DEVICE, "cannot stat `%s'", map[drive]);
|
return pupa_error (PUPA_ERR_BAD_DEVICE, "cannot stat `%s'", map[drive]);
|
||||||
|
|
||||||
|
@ -325,7 +326,7 @@ open_device (const pupa_disk_t disk, unsigned long sector, int flags)
|
||||||
}
|
}
|
||||||
#else /* ! __linux__ */
|
#else /* ! __linux__ */
|
||||||
fd = open (map[disk->id], flags);
|
fd = open (map[disk->id], flags);
|
||||||
if (! fd)
|
if (fd < 0)
|
||||||
{
|
{
|
||||||
pupa_error (PUPA_ERR_BAD_DEVICE, "cannot open `%s'", map[disk->id]);
|
pupa_error (PUPA_ERR_BAD_DEVICE, "cannot open `%s'", map[disk->id]);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -815,11 +816,11 @@ pupa_util_biosdisk_get_pupa_dev (const char *os_dev)
|
||||||
p = strrchr (os_dev, 's');
|
p = strrchr (os_dev, 's');
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
unsigned long n;
|
long int n;
|
||||||
char *q;
|
char *q;
|
||||||
|
|
||||||
p++;
|
p++;
|
||||||
n = strtoul (p, &q, 10);
|
n = strtol (p, &q, 10);
|
||||||
if (p != q && n != LONG_MIN && n != LONG_MAX)
|
if (p != q && n != LONG_MIN && n != LONG_MAX)
|
||||||
{
|
{
|
||||||
dos_part = (int) n;
|
dos_part = (int) n;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* pupa-mkimage.c - make a bootable image */
|
/* pupa-mkimage.c - make a bootable image */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2002,2003 Free Software Foundation, Inc.
|
* Copyright (C) 2002,2003,2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -192,8 +192,8 @@ Make a bootable image of PUPA.\n\
|
||||||
-V, --version print version information and exit\n\
|
-V, --version print version information and exit\n\
|
||||||
-v, --verbose print verbose messages\n\
|
-v, --verbose print verbose messages\n\
|
||||||
\n\
|
\n\
|
||||||
Report bugs to <okuji@enbug.org>.\n\
|
Report bugs to <%s>.\n\
|
||||||
", PUPA_DATADIR);
|
", PUPA_DATADIR, PACKAGE_BUGREPORT);
|
||||||
|
|
||||||
exit (status);
|
exit (status);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* pupa-setup.c - make PUPA usable */
|
/* pupa-setup.c - make PUPA usable */
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 1999,2000,2001,2002,2003 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -470,10 +470,10 @@ DEVICE must be a PUPA device (e.g. ``(hd0,0)'').\n\
|
||||||
-V, --version print version information and exit\n\
|
-V, --version print version information and exit\n\
|
||||||
-v, --verbose print verbose messages\n\
|
-v, --verbose print verbose messages\n\
|
||||||
\n\
|
\n\
|
||||||
Report bugs to <okuji@enbug.org>.\n\
|
Report bugs to <%s>.\n\
|
||||||
",
|
",
|
||||||
DEFAULT_BOOT_FILE, DEFAULT_CORE_FILE,
|
DEFAULT_BOOT_FILE, DEFAULT_CORE_FILE, DEFAULT_DIRECTORY,
|
||||||
DEFAULT_DIRECTORY, DEFAULT_DEVICE_MAP);
|
DEFAULT_DEVICE_MAP, PACKAGE_BUGREPORT);
|
||||||
|
|
||||||
exit (status);
|
exit (status);
|
||||||
}
|
}
|
||||||
|
@ -594,6 +594,7 @@ main (int argc, char *argv[])
|
||||||
|
|
||||||
/* Initialize filesystems. */
|
/* Initialize filesystems. */
|
||||||
pupa_fat_init ();
|
pupa_fat_init ();
|
||||||
|
pupa_ext2_init ();
|
||||||
|
|
||||||
if (root_dev)
|
if (root_dev)
|
||||||
{
|
{
|
||||||
|
@ -625,6 +626,7 @@ main (int argc, char *argv[])
|
||||||
root_dev, dest_dev);
|
root_dev, dest_dev);
|
||||||
|
|
||||||
/* Free resources. */
|
/* Free resources. */
|
||||||
|
pupa_ext2_fini ();
|
||||||
pupa_fat_fini ();
|
pupa_fat_fini ();
|
||||||
|
|
||||||
pupa_util_biosdisk_fini ();
|
pupa_util_biosdisk_fini ();
|
||||||
|
|
Loading…
Reference in a new issue