Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dadigang
Ventoy
Commits
bfe194c1
Commit
bfe194c1
authored
Dec 31, 2020
by
longpanda
Browse files
DragonFly BSD support
parent
fb7008f4
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1407 additions
and
0 deletions
+1407
-0
INSTALL/ventoy/dragonfly.mfs.xz
INSTALL/ventoy/dragonfly.mfs.xz
+0
-0
Unix/ventoy_unix/DragonFly/dmtable
Unix/ventoy_unix/DragonFly/dmtable
+0
-0
Unix/ventoy_unix/DragonFly/mkinitrd.sh
Unix/ventoy_unix/DragonFly/mkinitrd.sh
+30
-0
Unix/ventoy_unix/DragonFly/sbin/dmsetup
Unix/ventoy_unix/DragonFly/sbin/dmsetup
+0
-0
Unix/ventoy_unix/DragonFly/sbin/init
Unix/ventoy_unix/DragonFly/sbin/init
+0
-0
Unix/ventoy_unix_src/DragonFly/build.sh
Unix/ventoy_unix_src/DragonFly/build.sh
+13
-0
Unix/ventoy_unix_src/DragonFly/mount_cd9660.c
Unix/ventoy_unix_src/DragonFly/mount_cd9660.c
+216
-0
Unix/ventoy_unix_src/DragonFly/mount_null.c
Unix/ventoy_unix_src/DragonFly/mount_null.c
+106
-0
Unix/ventoy_unix_src/DragonFly/mount_tmpfs.c
Unix/ventoy_unix_src/DragonFly/mount_tmpfs.c
+371
-0
Unix/ventoy_unix_src/DragonFly/mount_tmpfs.h
Unix/ventoy_unix_src/DragonFly/mount_tmpfs.h
+37
-0
Unix/ventoy_unix_src/DragonFly/oinit.c
Unix/ventoy_unix_src/DragonFly/oinit.c
+199
-0
Unix/ventoy_unix_src/DragonFly/vfs/isofs/cd9660/cd9660_mount.h
...ventoy_unix_src/DragonFly/vfs/isofs/cd9660/cd9660_mount.h
+54
-0
Unix/ventoy_unix_src/DragonFly/vfs/nullfs/null.h
Unix/ventoy_unix_src/DragonFly/vfs/nullfs/null.h
+65
-0
Unix/ventoy_unix_src/DragonFly/vfs/tmpfs/tmpfs_mount.h
Unix/ventoy_unix_src/DragonFly/vfs/tmpfs/tmpfs_mount.h
+63
-0
Unix/ventoy_unix_src/DragonFly/vtutil.h
Unix/ventoy_unix_src/DragonFly/vtutil.h
+33
-0
Unix/ventoy_unix_src/DragonFly/walk_disk.c
Unix/ventoy_unix_src/DragonFly/walk_disk.c
+220
-0
No files found.
INSTALL/ventoy/dragonfly.mfs.xz
0 → 100644
View file @
bfe194c1
File added
Unix/ventoy_unix/DragonFly/dmtable
0 → 100644
View file @
bfe194c1
File added
Unix/ventoy_unix/DragonFly/mkinitrd.sh
0 → 100644
View file @
bfe194c1
#!/bin/bash
INITRD_SIZE
=
12
INITRD_FILE
=
dragonfly.mfs
rm
-f
${
INITRD_FILE
}
rm
-f
${
INITRD_FILE
}
.xz
VN_DEV
=
$(
vnconfig
-c
-S
${
INITRD_SIZE
}
m
-Z
-T
vn
${
INITRD_FILE
}
)
newfs
-i
131072
-m
0 /dev/
${
VN_DEV
}
s0
mount_ufs /dev/
${
VN_DEV
}
s0 /mnt
cp
-a
sbin /mnt/
chmod
-R
777 /mnt/sbin
mkdir
/mnt/dev
mkdir
/mnt/new_root
mkdir
/mnt/tmp
dd
if
=
/dev/zero
of
=
./data
bs
=
1M
count
=
8
cat
./dmtable ./data ./dmtable
>
/mnt/dmtable
umount /mnt
rm
-f
./data
xz
${
INITRD_FILE
}
vnconfig
-u
${
VN_DEV
}
Unix/ventoy_unix/DragonFly/sbin/dmsetup
0 → 100644
View file @
bfe194c1
File added
Unix/ventoy_unix/DragonFly/sbin/init
0 → 100644
View file @
bfe194c1
File added
Unix/ventoy_unix_src/DragonFly/build.sh
0 → 100644
View file @
bfe194c1
#!/bin/sh
rm
-f
init
gcc
-DMOUNT_NOMAIN
-Os
-static
*
.c
-I
.
-lutil
-lkiconv
-o
init
strip
--strip-all
init
if
[
-e
init
]
;
then
echo
-e
"
\n
========= SUCCESS ==============
\n
"
else
echo
-e
"
\n
========= FAILED ==============
\n
"
fi
Unix/ventoy_unix_src/DragonFly/mount_cd9660.c
0 → 100644
View file @
bfe194c1
/*
* Copyright (c) 1992, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley
* by Pace Willisson (pace@blitz.com). The Rock Ridge Extension
* Support code is derived from software contributed to Berkeley
* by Atsushi Murai (amurai@spec.co.jp).
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)mount_cd9660.c 8.7 (Berkeley) 5/1/95
*
* @(#) Copyright (c) 1992, 1993, 1994 The Regents of the University of California. All rights reserved.
* @(#)mount_cd9660.c 8.7 (Berkeley) 5/1/95
* $FreeBSD: src/sbin/mount_cd9660/mount_cd9660.c,v 1.15.2.3 2001/03/14 12:05:01 bp Exp $
*/
#include <sys/cdio.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/iconv.h>
#include <sys/linker.h>
#include <sys/module.h>
#include <vfs/isofs/cd9660/cd9660_mount.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <mntopts.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <sysexits.h>
#include <unistd.h>
static
struct
mntopt
mopts
[]
=
{
MOPT_STDOPTS
,
MOPT_UPDATE
,
{
"extatt"
,
0
,
ISOFSMNT_EXTATT
,
1
},
{
"gens"
,
0
,
ISOFSMNT_GENS
,
1
},
{
"rrip"
,
1
,
ISOFSMNT_NORRIP
,
1
},
{
"joliet"
,
1
,
ISOFSMNT_NOJOLIET
,
1
},
{
"strictjoliet"
,
1
,
ISOFSMNT_BROKENJOLIET
,
1
},
MOPT_NULL
};
static
int
get_ssector
(
const
char
*
dev
);
static
void
usage
(
void
);
int
set_charset
(
struct
iso_args
*
args
,
const
char
*
cs_local
,
const
char
*
cs_disk
);
int
mount_cd9660
(
char
*
dev
,
char
*
dir
)
{
struct
iso_args
args
;
int
ch
,
mntflags
,
opts
;
char
mntpath
[
MAXPATHLEN
];
struct
vfsconf
vfc
;
int
error
,
verbose
;
const
char
*
quirk
;
char
*
cs_local
=
NULL
;
mntflags
=
opts
=
verbose
=
0
;
memset
(
&
args
,
0
,
sizeof
args
);
args
.
ssector
=
0
;
/*
* Resolve the mountpoint with realpath(3) and remove unnecessary
* slashes from the devicename if there are any.
*/
checkpath
(
dir
,
mntpath
);
rmslashes
(
dev
,
dev
);
#define DEFAULT_ROOTUID -2
/*
* ISO 9660 filesystems are not writeable.
*/
mntflags
|=
MNT_RDONLY
;
args
.
export
.
ex_flags
=
MNT_EXRDONLY
;
args
.
fspec
=
dev
;
args
.
export
.
ex_root
=
DEFAULT_ROOTUID
;
args
.
flags
=
opts
;
if
(
args
.
ssector
==
-
1
)
{
/*
* The start of the session has not been specified on
* the command line. If we can successfully read the
* TOC of a CD-ROM, use the last data track we find.
* Otherwise, just use 0, in order to mount the very
* first session. This is compatible with the
* historic behaviour of mount_cd9660(8). If the user
* has specified -s <ssector> above, we don't get here
* and leave the user's will.
*/
if
((
args
.
ssector
=
get_ssector
(
dev
))
==
-
1
)
{
if
(
verbose
)
printf
(
"could not determine starting sector, "
"using very first session
\n
"
);
args
.
ssector
=
0
;
}
else
if
(
verbose
)
printf
(
"using starting sector %d
\n
"
,
args
.
ssector
);
}
error
=
getvfsbyname
(
"cd9660"
,
&
vfc
);
if
(
error
&&
vfsisloadable
(
"cd9660"
))
{
if
(
vfsload
(
"cd9660"
))
err
(
EX_OSERR
,
"vfsload(cd9660)"
);
endvfsent
();
/* flush cache */
error
=
getvfsbyname
(
"cd9660"
,
&
vfc
);
}
if
(
error
)
errx
(
1
,
"cd9660 filesystem is not available"
);
if
(
mount
(
vfc
.
vfc_name
,
mntpath
,
mntflags
,
&
args
)
<
0
)
err
(
1
,
"%s"
,
args
.
fspec
);
return
0
;
}
int
set_charset
(
struct
iso_args
*
args
,
const
char
*
cs_local
,
const
char
*
cs_disk
)
{
int
error
;
if
(
modfind
(
"cd9660_iconv"
)
<
0
)
{
if
(
kldload
(
"cd9660_iconv"
)
<
0
||
modfind
(
"cd9660_iconv"
)
<
0
)
{
warnx
(
"cannot find or load
\"
cd9660_iconv
\"
kernel module"
);
return
(
-
1
);
}
}
snprintf
(
args
->
cs_local
,
ICONV_CSNMAXLEN
,
"%s"
,
cs_local
);
error
=
kiconv_add_xlat16_cspairs
(
ENCODING_UNICODE
,
cs_local
);
if
(
error
)
return
(
-
1
);
if
(
!
cs_disk
)
cs_disk
=
strdup
(
ENCODING_UNICODE
);
snprintf
(
args
->
cs_disk
,
ICONV_CSNMAXLEN
,
"%s"
,
cs_disk
);
error
=
kiconv_add_xlat16_cspairs
(
cs_disk
,
cs_local
);
if
(
error
)
return
(
-
1
);
return
(
0
);
}
static
void
usage
(
void
)
{
fprintf
(
stderr
,
"usage: mount_cd9660 [-begjrv] [-C charset] [-o options] [-s startsector] special node
\n
"
);
exit
(
EX_USAGE
);
}
static
int
get_ssector
(
const
char
*
dev
)
{
struct
ioc_toc_header
h
;
struct
ioc_read_toc_entry
t
;
struct
cd_toc_entry
toc_buffer
[
100
];
int
fd
,
ntocentries
,
i
;
if
((
fd
=
open
(
dev
,
O_RDONLY
))
==
-
1
)
return
-
1
;
if
(
ioctl
(
fd
,
CDIOREADTOCHEADER
,
&
h
)
==
-
1
)
{
close
(
fd
);
return
-
1
;
}
ntocentries
=
h
.
ending_track
-
h
.
starting_track
+
1
;
if
(
ntocentries
>
100
)
{
/* unreasonable, only 100 allowed */
close
(
fd
);
return
-
1
;
}
t
.
address_format
=
CD_LBA_FORMAT
;
t
.
starting_track
=
0
;
t
.
data_len
=
ntocentries
*
sizeof
(
struct
cd_toc_entry
);
t
.
data
=
toc_buffer
;
if
(
ioctl
(
fd
,
CDIOREADTOCENTRYS
,
(
char
*
)
&
t
)
==
-
1
)
{
close
(
fd
);
return
-
1
;
}
close
(
fd
);
for
(
i
=
ntocentries
-
1
;
i
>=
0
;
i
--
)
if
((
toc_buffer
[
i
].
control
&
4
)
!=
0
)
/* found a data track */
break
;
if
(
i
<
0
)
return
-
1
;
return
ntohl
(
toc_buffer
[
i
].
addr
.
lba
);
}
Unix/ventoy_unix_src/DragonFly/mount_null.c
0 → 100644
View file @
bfe194c1
/*
* Copyright (c) 1992, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software donated to Berkeley by
* Jan-Simon Pendry.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#) Copyright (c) 1992, 1993, 1994 The Regents of the University of California. All rights reserved.
* @(#)mount_null.c 8.6 (Berkeley) 4/26/95
* $FreeBSD: src/sbin/mount_null/mount_null.c,v 1.13 1999/10/09 11:54:11 phk Exp $
*/
#include <sys/param.h>
#include <sys/mount.h>
#include <vfs/nullfs/null.h>
#include <err.h>
#include <mntopts.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
static
struct
mntopt
mopts
[]
=
{
MOPT_STDOPTS
,
MOPT_UPDATE
,
MOPT_NULL
};
static
void
usage
(
void
)
__dead2
;
int
mount_null
(
const
char
*
src
,
const
char
*
dst
)
{
struct
null_args
args
;
int
ch
,
mntflags
;
char
source
[
MAXPATHLEN
];
char
target
[
MAXPATHLEN
];
struct
vfsconf
vfc
;
int
error
;
bzero
(
&
args
,
sizeof
(
args
));
mntflags
=
0
;
args
.
target
=
target
;
checkpath
(
src
,
target
);
checkpath
(
dst
,
source
);
/*
* Mount points that did not use distinct paths (e.g. / on /mnt)
* used to be disallowed because mount linkages were stored in
* vnodes and would lead to endlessly recursive trees. DragonFly
* stores mount linkages in the namecache topology and does not
* have this problem, so paths no longer need to be distinct.
*/
error
=
getvfsbyname
(
"null"
,
&
vfc
);
if
(
error
&&
vfsisloadable
(
"null"
))
{
if
(
vfsload
(
"null"
))
err
(
EX_OSERR
,
"vfsload(null)"
);
endvfsent
();
error
=
getvfsbyname
(
"null"
,
&
vfc
);
}
if
(
error
)
errx
(
EX_OSERR
,
"null/loopback filesystem is not available"
);
if
(
mount
(
vfc
.
vfc_name
,
source
,
mntflags
,
&
args
))
err
(
1
,
NULL
);
return
0
;
}
static
void
usage
(
void
)
{
fprintf
(
stderr
,
"usage: mount_null [-o options] target_fs mount_point
\n
"
);
fprintf
(
stderr
,
" mount_null -u [-o options] mount_point
\n
"
);
exit
(
1
);
}
Unix/ventoy_unix_src/DragonFly/mount_tmpfs.c
0 → 100644
View file @
bfe194c1
/* $NetBSD: mount_tmpfs.c,v 1.24 2008/08/05 20:57:45 pooka Exp $ */
/*
* Copyright (c) 2005, 2006 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Julio M. Merino Vidal, developed as part of Google's Summer of Code
* 2005 program.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <vfs/tmpfs/tmpfs_mount.h>
#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <grp.h>
#include <mntopts.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
#include <inttypes.h>
#include <libutil.h>
//#include "defs.h"
#include "mount_tmpfs.h"
/* --------------------------------------------------------------------- */
#define MOPT_TMPFSOPTS \
{ "gid=", 0, MNT_GID, 1}, \
{ "uid=", 0, MNT_UID, 1}, \
{ "mode=", 0, MNT_MODE, 1}, \
{ "inodes=", 0, MNT_INODES, 1}, \
{ "size=", 0, MNT_SIZE, 1}, \
{ "maxfilesize=", 0, MNT_MAXFSIZE, 1}
static
const
struct
mntopt
mopts
[]
=
{
MOPT_STDOPTS
,
MOPT_TMPFSOPTS
,
MOPT_NULL
};
static
int
Cflag
;
/* --------------------------------------------------------------------- */
static
gid_t
a_gid
(
char
*
);
static
uid_t
a_uid
(
char
*
);
static
mode_t
a_mask
(
char
*
);
static
int64_t
a_number
(
char
*
s
);
static
void
usage
(
void
)
__dead2
;
/* --------------------------------------------------------------------- */
void
mount_tmpfs_parseargs
(
int
argc
,
char
*
argv
[],
struct
tmpfs_mount_info
*
args
,
int
*
mntflags
,
char
*
canon_dev
,
char
*
canon_dir
)
{
int
gidset
,
modeset
,
uidset
;
/* Ought to be 'bool'. */
int
ch
;
gid_t
gid
;
uid_t
uid
;
mode_t
mode
;
struct
stat
sb
;
int
extend_flags
=
0
;
char
*
ptr
,
*
delim
;
/* Set default values for mount point arguments. */
memset
(
args
,
0
,
sizeof
(
*
args
));
args
->
ta_version
=
TMPFS_ARGS_VERSION
;
args
->
ta_size_max
=
0
;
args
->
ta_nodes_max
=
0
;
args
->
ta_maxfsize_max
=
0
;
*
mntflags
=
0
;
gidset
=
0
;
gid
=
0
;
uidset
=
0
;
uid
=
0
;
modeset
=
0
;
mode
=
0
;
optind
=
optreset
=
1
;
while
((
ch
=
getopt
(
argc
,
argv
,
"Cf:g:m:n:o:s:u:"
))
!=
-
1
)
{
switch
(
ch
)
{
case
'C'
:
Cflag
=
1
;
break
;
case
'f'
:
args
->
ta_maxfsize_max
=
a_number
(
optarg
);
break
;
case
'g'
:
gid
=
a_gid
(
optarg
);
gidset
=
1
;
break
;
case
'm'
:
mode
=
a_mask
(
optarg
);
modeset
=
1
;
break
;
case
'n'
:
args
->
ta_nodes_max
=
a_number
(
optarg
);
break
;
case
'o'
:
getmntopts
(
optarg
,
mopts
,
mntflags
,
&
extend_flags
);
if
(
extend_flags
&
MNT_GID
)
{
ptr
=
strstr
(
optarg
,
"gid="
);
if
(
ptr
)
{
delim
=
strstr
(
ptr
,
","
);
if
(
delim
)
{
*
delim
=
'\0'
;
gid
=
a_gid
(
ptr
+
4
);
*
delim
=
','
;
}
else
gid
=
a_gid
(
ptr
+
4
);
gidset
=
1
;
}
extend_flags
^=
MNT_GID
;
}
if
(
extend_flags
&
MNT_UID
)
{
ptr
=
strstr
(
optarg
,
"uid="
);
if
(
ptr
)
{
delim
=
strstr
(
ptr
,
","
);
if
(
delim
)
{
*
delim
=
'\0'
;
uid
=
a_uid
(
ptr
+
4
);
*
delim
=
','
;
}
else
uid
=
a_uid
(
ptr
+
4
);
uidset
=
1
;
}
extend_flags
^=
MNT_UID
;
}
if
(
extend_flags
&
MNT_MODE
)
{
ptr
=
strstr
(
optarg
,
"mode="
);
if
(
ptr
)
{
delim
=
strstr
(
ptr
,
","
);
if
(
delim
)
{
*
delim
=
'\0'
;
mode
=
a_mask
(
ptr
+
5
);
*
delim
=
','
;
}
else
mode
=
a_mask
(
ptr
+
5
);
modeset
=
1
;
}
extend_flags
^=
MNT_MODE
;
}
if
(
extend_flags
&
MNT_INODES
)
{
ptr
=
strstr
(
optarg
,
"inodes="
);
if
(
ptr
)
{
delim
=
strstr
(
ptr
,
","
);
if
(
delim
)
{
*
delim
=
'\0'
;
args
->
ta_nodes_max
=
a_number
(
ptr
+
7
);
*
delim
=
','
;
}
else
args
->
ta_nodes_max
=
a_number
(
ptr
+
7
);
}
extend_flags
^=
MNT_INODES
;
}
if
(
extend_flags
&
MNT_SIZE
)
{
ptr
=
strstr
(
optarg
,
"size="
);
if
(
ptr
)
{
delim
=
strstr
(
ptr
,
","
);
if
(
delim
)
{
*
delim
=
'\0'
;
args
->
ta_size_max
=
a_number
(
ptr
+
5
);
*
delim
=
','
;
}
else
args
->
ta_size_max
=
a_number
(
ptr
+
5
);
}
extend_flags
^=
MNT_SIZE
;
}
if
(
extend_flags
&
MNT_MAXFSIZE
)
{
ptr
=
strstr
(
optarg
,
"maxfilesize="
);
if
(
ptr
)
{
delim
=
strstr
(
ptr
,
","
);
if
(
delim
)
{
*
delim
=
'\0'
;
args
->
ta_maxfsize_max
=
a_number
(
ptr
+
12
);
*
delim
=
','
;
}
else
args
->
ta_maxfsize_max
=
a_number
(
ptr
+
12
);
}
extend_flags
^=
MNT_MAXFSIZE
;
}
break
;
case
's'
:
args
->
ta_size_max
=
a_number
(
optarg
);
break
;
case
'u'
:
uid
=
a_uid
(
optarg
);
uidset
=
1
;
break
;
case
'?'
:
default:
usage
();
}
}
argc
-=
optind
;
argv
+=
optind
;
if
(
argc
!=
2
)
usage
();
strlcpy
(
canon_dev
,
argv
[
0
],
MAXPATHLEN
);
strlcpy
(
canon_dir
,
argv
[
1
],
MAXPATHLEN
);
if
(
stat
(
canon_dir
,
&
sb
)
==
-
1
)
err
(
EXIT_FAILURE
,
"cannot stat `%s'"
,
canon_dir
);
args
->
ta_root_uid
=
uidset
?
uid
:
sb
.
st_uid
;
args
->
ta_root_gid
=
gidset
?
gid
:
sb
.
st_gid
;
args
->
ta_root_mode
=
modeset
?
mode
:
sb
.
st_mode
;
}
/* --------------------------------------------------------------------- */
static
gid_t
a_gid
(
char
*
s
)
{
struct
group
*
gr
;
char
*
gname
;
gid_t
gid
;
if
((
gr
=
getgrnam
(
s
))
!=
NULL
)
gid
=
gr
->
gr_gid
;
else
{
for
(
gname
=
s
;
*
s
&&
isdigit
(
*
s
);
++
s
);
if
(
!*
s
)
gid
=
atoi
(
gname
);
else
errx
(
EX_NOUSER
,
"unknown group id: %s"
,
gname
);
}
return
(
gid
);
}
static
uid_t
a_uid
(
char
*
s
)
{
struct
passwd
*
pw
;
char
*
uname
;
uid_t
uid
;
if
((
pw
=
getpwnam
(
s
))
!=
NULL
)
uid
=
pw
->
pw_uid
;
else
{
for
(
uname
=
s
;
*
s
&&
isdigit
(
*
s
);
++
s
);
if
(
!*
s
)
uid
=
atoi
(
uname
);
else
errx
(
EX_NOUSER
,
"unknown user id: %s"
,
uname
);
}
return
(
uid
);
}
static
mode_t
a_mask
(
char
*
s
)
{
int
done
,
rv
=
0
;
char
*
ep
;
done
=
0
;
if
(
*
s
>=
'0'
&&
*
s
<=
'7'
)
{
done
=
1
;
rv
=
strtol
(
s
,
&
ep
,
8
);
}
if
(
!
done
||
rv
<
0
||
*
ep
)
errx
(
EX_USAGE
,
"invalid file mode: %s"
,
s
);
return
(
rv
);
}
static
int64_t
a_number
(
char
*
s
)
{
int64_t
rv
=
0
;
if
(
dehumanize_number
(
s
,
&
rv
)
<
0
||
rv
<
0
)
errx
(
EX_USAGE
,
"bad number for option: %s"
,
s
);
return
(
rv
);
}
static
void
usage
(
void
)
{
fprintf
(
stderr
,
"Usage: %s [-C] [-g group] [-m mode] [-n nodes] [-o options] [-s size]
\n
"
" [-u user] [-f maxfilesize] tmpfs mountpoint
\n
"
,
getprogname
());
exit
(
1
);
}
/* --------------------------------------------------------------------- */
int
mount_tmpfs
(
int
argc
,
char
*
argv
[])
{
struct
tmpfs_mount_info
args
;
char
canon_dev
[
MAXPATHLEN
],
canon_dir
[
MAXPATHLEN
];
int
mntflags
;
struct
vfsconf
vfc
;
int
error
;
//fsnode_t copyroot = NULL;
//fsnode_t copyhlinks = NULL;
mount_tmpfs_parseargs
(
argc
,
argv
,
&
args
,
&
mntflags
,
canon_dev
,
canon_dir
);
error
=
getvfsbyname
(
"tmpfs"
,
&
vfc
);
if
(
error
&&
vfsisloadable
(
"tmpfs"
))
{
if
(
vfsload
(
"tmpfs"
))
err
(
EX_OSERR
,
"vfsload(%s)"
,
"tmpfs"
);
endvfsent
();
error
=
getvfsbyname
(
"tmpfs"
,
&
vfc
);
}
if
(
error
)
errx
(
EX_OSERR
,
"%s filesystem not available"
,
"tmpfs"
);
//if (Cflag)
// copyroot = FSCopy(©hlinks, canon_dir);
if
(
mount
(
vfc
.
vfc_name
,
canon_dir
,
mntflags
,
&
args
)
==
-
1
)
err
(
EXIT_FAILURE
,
"tmpfs on %s"
,
canon_dir
);
//if (Cflag)
// FSPaste(canon_dir, copyroot, copyhlinks);
return
EXIT_SUCCESS
;
}
#ifndef MOUNT_NOMAIN
int
main
(
int
argc
,
char
*
argv
[])
{
setprogname
(
argv
[
0
]);
return
mount_tmpfs
(
argc
,
argv
);
}
#endif
Unix/ventoy_unix_src/DragonFly/mount_tmpfs.h
0 → 100644
View file @
bfe194c1
/* $NetBSD: mount_tmpfs.h,v 1.1 2008/08/05 20:57:45 pooka Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _SBIN_MOUNT_TMPFS_MOUNT_TMPFS_H_
#define _SBIN_MOUNT_TMPFS_MOUNT_TMPFS_H_
#include <vfs/tmpfs/tmpfs_mount.h>
int
mount_tmpfs
(
int
,
char
**
);
void
mount_tmpfs_parseargs
(
int
,
char
**
,
struct
tmpfs_mount_info
*
,
int
*
,
char
*
,
char
*
);
#endif
/* _SBIN_MOUNT_TMPFS_MOUNT_TMPFS_H_ */
Unix/ventoy_unix_src/DragonFly/oinit.c
0 → 100644
View file @
bfe194c1
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Donn Seeley at Berkeley Software Design, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#) Copyright (c) 1991, 1993 The Regents of the University of California. All rights reserved.
* @(#)init.c 8.1 (Berkeley) 7/15/93
* $FreeBSD: src/sbin/init/init.c,v 1.38.2.8 2001/10/22 11:27:32 des Exp $
*/
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <sys/sysctl.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <db.h>
#include <errno.h>
#include <fcntl.h>
#include <libutil.h>
#include <paths.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <time.h>
#include <ttyent.h>
#include <unistd.h>
#include <sys/reboot.h>
#include <sys/mount.h>
#include <err.h>
#include <stdarg.h>
#include <vtutil.h>
int
boot_verbose
=
0
;
int
prepare_dmtable
(
void
);
int
mount_cd9660
(
char
*
dev
,
char
*
dir
);
int
mount_null
(
const
char
*
src
,
const
char
*
dst
);
int
mount_tmpfs
(
int
argc
,
char
*
argv
[]);
static
int
setctty
(
const
char
*
name
)
{
int
fd
;
revoke
(
name
);
if
((
fd
=
open
(
name
,
O_RDWR
))
==
-
1
)
{
exit
(
1
);
}
if
(
login_tty
(
fd
)
==
-
1
)
{
exit
(
1
);
}
return
fd
;
}
static
void
ventoy_init
(
char
**
argv_orig
)
{
pid_t
pid
,
wpid
;
int
status
,
error
;
char
arg0
[
MAXPATHLEN
];
char
arg1
[
MAXPATHLEN
];
char
arg2
[
MAXPATHLEN
];
char
*
argv
[
8
];
struct
sigaction
sa
;
/* step1: mount tmpfs */
vdebug
(
"[VTOY] step 1: mount tmpfs ..."
);
strcpy
(
arg0
,
"mount_tmpfs"
);
strcpy
(
arg1
,
"tmpfs"
);
strcpy
(
arg2
,
"/tmp"
);
argv
[
0
]
=
arg0
;
argv
[
1
]
=
arg1
;
argv
[
2
]
=
arg2
;
argv
[
3
]
=
NULL
;
error
=
mount_tmpfs
(
3
,
argv
);
vdebug
(
" %d
\n
"
,
error
);
/* step 2: prepare dmtable */
vdebug
(
"[VTOY] step 2: prepare device-mapper table...
\n
"
);
(
void
)
prepare_dmtable
();
/* step 3: create device mapper */
vdebug
(
"[VTOY] step 3: create device-mapper ...
\n
"
);
if
((
pid
=
fork
())
==
0
)
{
sigemptyset
(
&
sa
.
sa_mask
);
sa
.
sa_flags
=
0
;
sa
.
sa_handler
=
SIG_IGN
;
sigaction
(
SIGTSTP
,
&
sa
,
NULL
);
sigaction
(
SIGHUP
,
&
sa
,
NULL
);
argv
[
0
]
=
"dmsetup"
;
argv
[
1
]
=
"create"
;
argv
[
2
]
=
"ventoy"
;
argv
[
3
]
=
"/tmp/dmtable"
;
argv
[
4
]
=
"--readonly"
;
argv
[
5
]
=
NULL
;
sigprocmask
(
SIG_SETMASK
,
&
sa
.
sa_mask
,
NULL
);
execv
(
"/sbin/dmsetup"
,
__DECONST
(
char
**
,
argv
));
exit
(
1
);
/* force single user mode */
}
do
{
wpid
=
waitpid
(
-
1
,
&
status
,
WUNTRACED
);
}
while
(
wpid
!=
pid
);
/* step 4: mount iso */
vdebug
(
"[VTOY] step 4: mount device-mapper ..."
);
strcpy
(
arg0
,
"/dev/mapper/ventoy"
);
strcpy
(
arg1
,
"/new_root"
);
error
=
mount_cd9660
(
arg0
,
arg1
);
vdebug
(
" %d
\n
"
,
error
);
/* step 5: mount devfs */
vdebug
(
"[VTOY] step 5: mount devfs ..."
);
strcpy
(
arg0
,
"/dev"
);
strcpy
(
arg1
,
"/new_root/dev"
);
mount_null
(
arg0
,
arg1
);
vdebug
(
" %d
\n
"
,
error
);
/* step 6: umount tmpfs */
error
=
unmount
(
"/tmp"
,
0
);
vdebug
(
"[VTOY] step 6: unmount tmpfs %d
\n
"
,
error
);
/* step 7: swich_root */
vdebug
(
"[VTOY] step 7: switch root ...
\n
"
);
error
=
chdir
(
"/new_root"
);
if
(
error
)
goto
chroot_failed
;
error
=
chroot_kernel
(
"/new_root"
);
if
(
error
)
goto
chroot_failed
;
error
=
chroot
(
"/new_root"
);
if
(
error
)
goto
chroot_failed
;
execv
(
"/sbin/init"
,
__DECONST
(
char
**
,
argv_orig
));
/* We failed to exec /sbin/init in the chroot, sleep forever */
chroot_failed:
while
(
1
)
{
sleep
(
3
);
};
}
int
main
(
int
argc
__unused
,
char
**
argv
)
{
size_t
varsize
=
sizeof
(
int
);
/* Dispose of random users. */
if
(
getuid
()
!=
0
)
errx
(
1
,
"%s"
,
strerror
(
EPERM
));
/* Init is not allowed to die, it would make the kernel panic */
signal
(
SIGTERM
,
SIG_IGN
);
setctty
(
_PATH_CONSOLE
);
sysctlbyname
(
"debug.bootverbose"
,
&
boot_verbose
,
&
varsize
,
NULL
,
0
);
vdebug
(
"======= Ventoy Init Start ========
\n
"
);
ventoy_init
(
argv
);
return
1
;
}
Unix/ventoy_unix_src/DragonFly/vfs/isofs/cd9660/cd9660_mount.h
0 → 100644
View file @
bfe194c1
/*-
* Copyright (c) 1995
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley
* by Pace Willisson (pace@blitz.com). The Rock Ridge Extension
* Support code is derived from software contributed to Berkeley
* by Atsushi Murai (amurai@spec.co.jp).
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)cd9660_mount.h 8.1 (Berkeley) 5/24/95
* $FreeBSD: src/sys/isofs/cd9660/cd9660_mount.h,v 1.3.2.2 2001/03/14 12:03:50 bp Exp $
*/
#include <sys/iconv.h>
/*
* Arguments to mount ISO 9660 filesystems.
*/
struct
iso_args
{
char
*
fspec
;
/* block special device to mount */
struct
export_args
export
;
/* network export info */
int
flags
;
/* mounting flags, see below */
int
ssector
;
/* starting sector, 0 for 1st session */
char
cs_disk
[
ICONV_CSNMAXLEN
];
/* disk charset for Joliet cs conversion */
char
cs_local
[
ICONV_CSNMAXLEN
];
/* local charset for Joliet cs conversion */
};
#define ISOFSMNT_NORRIP 0x00000001
/* disable Rock Ridge Ext.*/
#define ISOFSMNT_GENS 0x00000002
/* enable generation numbers */
#define ISOFSMNT_EXTATT 0x00000004
/* enable extended attributes */
#define ISOFSMNT_NOJOLIET 0x00000008
/* disable Joliet Ext.*/
#define ISOFSMNT_BROKENJOLIET 0x00000010
/* allow broken Joliet disks */
#define ISOFSMNT_KICONV 0x00000020
/* Use libiconv to convert chars */
Unix/ventoy_unix_src/DragonFly/vfs/nullfs/null.h
0 → 100644
View file @
bfe194c1
/*
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software donated to Berkeley by
* Jan-Simon Pendry.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)null.h 8.3 (Berkeley) 8/20/94
*
* $FreeBSD: src/sys/miscfs/nullfs/null.h,v 1.11.2.3 2001/06/26 04:20:09 bp Exp $
* $DragonFly: src/sys/vfs/nullfs/null.h,v 1.10 2008/09/18 16:08:32 dillon Exp $
*/
struct
null_args
{
char
*
target
;
/* Target of loopback */
struct
export_args
export
;
/* Network export information */
};
#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
struct
null_mount
{
struct
mount
*
nullm_vfs
;
struct
vnode
*
nullm_rootvp
;
/* Reference to root null_node */
struct
netexport
export
;
};
#endif
#ifdef _KERNEL
#define MOUNTTONULLMOUNT(mp) ((struct null_mount *)((mp)->mnt_data))
#ifdef NULLFS_DEBUG
#define NULLFSDEBUG(format, args...) kprintf(format ,## args)
#else
#define NULLFSDEBUG(format, args...)
#endif
/* NULLFS_DEBUG */
int
nullfs_export
(
struct
mount
*
mp
,
int
op
,
const
struct
export_args
*
export
);
#endif
/* _KERNEL */
Unix/ventoy_unix_src/DragonFly/vfs/tmpfs/tmpfs_mount.h
0 → 100644
View file @
bfe194c1
/* $NetBSD: tmpfs_args.h,v 1.3 2008/07/29 09:10:09 pooka Exp $ */
/* $DragonFly: tmpfs_mount.h,v 1.3 2017/10/29 09:10:09 markuspf Exp $ */
/*
* Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Julio M. Merino Vidal, developed as part of Google's Summer of Code
* 2005 program.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef VFS_TMPFS_TMPFS_MOUNT_H_
#define VFS_TMPFS_TMPFS_MOUNT_H_
/*
* This structure is used to communicate mount parameters between userland
* and kernel space.
*/
#define TMPFS_ARGS_VERSION 2
struct
tmpfs_mount_info
{
int
ta_version
;
/* Size counters. */
ino_t
ta_nodes_max
;
off_t
ta_size_max
;
size_t
ta_maxfsize_max
;
/* Root node attributes. */
uid_t
ta_root_uid
;
gid_t
ta_root_gid
;
mode_t
ta_root_mode
;
};
#define MNT_GID 0x00000001
#define MNT_UID 0x00000002
#define MNT_MODE 0x00000004
#define MNT_INODES 0x00000008
#define MNT_SIZE 0x00000010
#define MNT_MAXFSIZE 0x00000020
#endif
/* VFS_TMPFS_TMPFS_MOUNT_H_ */
Unix/ventoy_unix_src/DragonFly/vtutil.h
0 → 100644
View file @
bfe194c1
#ifndef __UTIL_H__
#define __UTIL_H__
extern
int
boot_verbose
;
#define vdebug(fmt, ...) if (boot_verbose) { printf(fmt, ##__VA_ARGS__); usleep(500000); }
#define verror printf
#pragma pack(4)
typedef
struct
ventoy_image_desc
{
uint64_t
disk_size
;
uint64_t
part1_size
;
uint8_t
disk_uuid
[
16
];
uint8_t
disk_signature
[
4
];
uint32_t
img_chunk_count
;
/* ventoy_img_chunk list */
}
ventoy_image_desc
;
typedef
struct
ventoy_img_chunk
{
uint32_t
img_start_sector
;
// sector size: 2KB
uint32_t
img_end_sector
;
// included
uint64_t
disk_start_sector
;
// in disk_sector_size
uint64_t
disk_end_sector
;
// included
}
ventoy_img_chunk
;
#pragma pack()
#endif
Unix/ventoy_unix_src/DragonFly/walk_disk.c
0 → 100644
View file @
bfe194c1
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Donn Seeley at Berkeley Software Design, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#) Copyright (c) 1991, 1993 The Regents of the University of California. All rights reserved.
* @(#)init.c 8.1 (Berkeley) 7/15/93
* $FreeBSD: src/sbin/init/init.c,v 1.38.2.8 2001/10/22 11:27:32 des Exp $
*/
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <dirent.h>
#include <err.h>
#include <errno.h>
#include <fts.h>
#include <grp.h>
#include <inttypes.h>
#include <limits.h>
#include <locale.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <vtutil.h>
static
int
find_disk_by_signature
(
uint8_t
*
uuid
,
uint8_t
*
sig
,
uint64_t
size
,
int
*
count
,
char
*
name
)
{
int
fd
;
int
len
;
int
cnt
=
0
;
FTS
*
ftsp
;
FTSENT
*
p
;
uint8_t
mbr
[
512
];
char
devname
[
MAXPATHLEN
];
static
char
dev
[]
=
"/dev"
,
*
devav
[]
=
{
dev
,
NULL
};
vdebug
(
"[VTOY] find_disk_by_signature %llu
\n
"
,
size
);
ftsp
=
fts_open
(
devav
,
FTS_PHYSICAL
|
FTS_NOCHDIR
,
NULL
);
while
((
p
=
fts_read
(
ftsp
))
!=
NULL
)
{
if
(
p
->
fts_level
==
1
&&
p
->
fts_statp
&&
p
->
fts_name
&&
p
->
fts_statp
->
st_size
==
size
)
{
sprintf
(
devname
,
"/dev/%s"
,
p
->
fts_name
);
fd
=
open
(
devname
,
O_RDONLY
);
if
(
fd
<
0
)
{
continue
;
}
memset
(
mbr
,
0
,
512
);
read
(
fd
,
mbr
,
512
);
close
(
fd
);
if
(
memcmp
(
mbr
+
0x180
,
uuid
,
16
)
==
0
&&
memcmp
(
mbr
+
0x1B8
,
sig
,
4
)
==
0
)
{
cnt
++
;
strcpy
(
name
,
p
->
fts_name
);
break
;
}
}
}
*
count
=
cnt
;
fts_close
(
ftsp
);
return
0
;
}
static
int
find_disk_by_size
(
uint64_t
size
,
const
char
*
prefix
,
int
*
count
,
char
*
name
)
{
int
len
;
int
cnt
=
0
;
FTS
*
ftsp
;
FTSENT
*
p
;
static
char
dev
[]
=
"/dev"
,
*
devav
[]
=
{
dev
,
NULL
};
if
(
prefix
)
{
len
=
strlen
(
prefix
);
}
name
[
0
]
=
0
;
ftsp
=
fts_open
(
devav
,
FTS_PHYSICAL
|
FTS_NOCHDIR
,
NULL
);
while
((
p
=
fts_read
(
ftsp
))
!=
NULL
)
{
if
(
p
->
fts_level
==
1
&&
p
->
fts_statp
&&
p
->
fts_name
&&
p
->
fts_statp
->
st_size
==
size
)
{
if
(
prefix
)
{
if
(
strncmp
(
p
->
fts_name
,
prefix
,
len
)
==
0
)
{
cnt
++
;
if
(
name
[
0
]
==
0
)
strcpy
(
name
,
p
->
fts_name
);
}
}
else
{
cnt
++
;
if
(
name
[
0
]
==
0
)
strcpy
(
name
,
p
->
fts_name
);
}
}
}
*
count
=
cnt
;
fts_close
(
ftsp
);
return
0
;
}
int
prepare_dmtable
(
void
)
{
int
count
=
0
;
uint32_t
i
=
0
;
uint32_t
sector_start
=
0
;
uint32_t
disk_sector_num
=
0
;
FILE
*
fIn
,
*
fOut
;
char
disk
[
MAXPATHLEN
];
char
prefix
[
MAXPATHLEN
];
ventoy_image_desc
desc
;
ventoy_img_chunk
chunk
;
fIn
=
fopen
(
"/dmtable"
,
"rb"
);
if
(
!
fIn
)
{
printf
(
"Failed to open dmtable
\n
"
);
return
1
;
}
fOut
=
fopen
(
"/tmp/dmtable"
,
"w+"
);
if
(
!
fOut
)
{
printf
(
"Failed to create /tmp/dmtable %d
\n
"
,
errno
);
fclose
(
fIn
);
return
1
;
}
fread
(
&
desc
,
1
,
sizeof
(
desc
),
fIn
);
vdebug
(
"[VTOY] disksize:%lu part1size:%lu chunkcount:%u
\n
"
,
desc
.
disk_size
,
desc
.
part1_size
,
desc
.
img_chunk_count
);
find_disk_by_size
(
desc
.
part1_size
,
NULL
,
&
count
,
disk
);
vdebug
(
"[VTOY] find disk by part1 size: %d %s
\n
"
,
count
,
disk
);
if
(
count
==
0
)
{
goto
end
;
}
else
if
(
count
>
1
)
{
find_disk_by_signature
(
desc
.
disk_uuid
,
desc
.
disk_signature
,
desc
.
disk_size
,
&
count
,
prefix
);
vdebug
(
"[VTOY] find disk by signature: %d %s
\n
"
,
count
,
prefix
);
if
(
count
!=
1
)
{
printf
(
"[VTOY] Failed to find disk by signature
\n
"
);
goto
end
;
}
find_disk_by_size
(
desc
.
part1_size
,
prefix
,
&
count
,
disk
);
vdebug
(
"[VTOY] find disk by part1 size with prefix %s : %d %s
\n
"
,
prefix
,
count
,
disk
);
}
for
(
i
=
0
;
i
<
desc
.
img_chunk_count
;
i
++
)
{
fread
(
&
chunk
,
1
,
sizeof
(
chunk
),
fIn
);
sector_start
=
chunk
.
img_start_sector
;
disk_sector_num
=
(
uint32_t
)(
chunk
.
disk_end_sector
+
1
-
chunk
.
disk_start_sector
);
fprintf
(
fOut
,
"%u %u linear /dev/%s %llu
\n
"
,
(
sector_start
<<
2
),
disk_sector_num
,
disk
,
(
unsigned
long
long
)
chunk
.
disk_start_sector
-
2048
);
vdebug
(
"%u %u linear /dev/%s %llu
\n
"
,
(
sector_start
<<
2
),
disk_sector_num
,
disk
,
(
unsigned
long
long
)
chunk
.
disk_start_sector
-
2048
);
}
end:
fclose
(
fIn
);
fclose
(
fOut
);
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment