rs changes (also use driver configurations in the image ramdisk)
This commit is contained in:
parent
9ac537eb7c
commit
0c1d433f60
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
PROGRAMS=at_wini bios_wini cdprobe dev2name floppy loadramdisk newroot \
|
PROGRAMS=at_wini bios_wini cdprobe dev2name floppy loadramdisk newroot \
|
||||||
pci sh service sysenv mfs
|
pci sh service sysenv mfs
|
||||||
|
EXTRA=drivers.conf passwd
|
||||||
|
|
||||||
MAKEDEV=/usr/bin/MAKEDEV
|
MAKEDEV=/usr/bin/MAKEDEV
|
||||||
|
|
||||||
all: image.c image.s
|
all: image.c image.s
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(PROGRAMS) bintoc image image.c image.s t proto.gen
|
rm -rf $(PROGRAMS) $(EXTRA) bintoc image image.c image.s t proto.gen
|
||||||
|
|
||||||
image.c: bintoc image
|
image.c: bintoc image
|
||||||
./bintoc -o $@ image
|
./bintoc -o $@ image
|
||||||
|
@ -21,7 +22,7 @@ image.s: image.c
|
||||||
bintoc: bintoc.c
|
bintoc: bintoc.c
|
||||||
$(CC) -o $@ bintoc.c
|
$(CC) -o $@ bintoc.c
|
||||||
|
|
||||||
image: proto.gen mtab rc $(PROGRAMS)
|
image: proto.gen mtab rc $(PROGRAMS) $(EXTRA)
|
||||||
mkfs -B 2048 image proto.gen || { rm -f image; false; }
|
mkfs -B 2048 image proto.gen || { rm -f image; false; }
|
||||||
|
|
||||||
at_wini: ../../at_wini/at_wini
|
at_wini: ../../at_wini/at_wini
|
||||||
|
@ -96,6 +97,12 @@ mfs: ../../../servers/mfs/mfs
|
||||||
../../../servers/mfs/mfs:
|
../../../servers/mfs/mfs:
|
||||||
cd ../../../servers/mfs && make
|
cd ../../../servers/mfs && make
|
||||||
|
|
||||||
|
drivers.conf: ../../../etc/drivers.conf
|
||||||
|
install -s ../../../etc/$@ $@
|
||||||
|
|
||||||
|
passwd: ../../../etc/passwd
|
||||||
|
install -s ../../../etc/$@ $@
|
||||||
|
|
||||||
depend:
|
depend:
|
||||||
/usr/bin/mkdep "$(CC) -E $(CPPFLAGS)" *.c > .depend
|
/usr/bin/mkdep "$(CC) -E $(CPPFLAGS)" *.c > .depend
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,9 @@ d--755 0 0
|
||||||
@DEV@
|
@DEV@
|
||||||
$
|
$
|
||||||
etc d--755 0 0
|
etc d--755 0 0
|
||||||
|
drivers.conf ---644 0 0 drivers.conf
|
||||||
mtab ---644 0 0 mtab
|
mtab ---644 0 0 mtab
|
||||||
|
passwd ---644 0 0 passwd
|
||||||
rc ---755 0 0 rc
|
rc ---755 0 0 rc
|
||||||
$
|
$
|
||||||
$
|
$
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -e
|
set -e
|
||||||
/bin/service up /bin/pci
|
/bin/service up /bin/pci -config /etc/drivers.conf
|
||||||
/bin/service -c up /bin/floppy -dev /dev/fd0
|
/bin/service -c up /bin/floppy -config /etc/drivers.conf -dev /dev/fd0
|
||||||
if [ X`/bin/sysenv bios_wini` = Xyes ]
|
if [ X`/bin/sysenv bios_wini` = Xyes ]
|
||||||
then
|
then
|
||||||
echo Using bios_wini.
|
echo Using bios_wini.
|
||||||
/bin/service -c up /bin/bios_wini -dev /dev/c0d0
|
/bin/service -c up /bin/bios_wini -dev /dev/c0d0
|
||||||
else
|
else
|
||||||
/bin/service -c up /bin/at_wini -dev /dev/c0d0
|
/bin/service -c up /bin/at_wini -dev /dev/c0d0 -script /etc/rs.single -config /etc/drivers.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rootdev=`sysenv rootdev` || echo 'No rootdev?'
|
rootdev=`sysenv rootdev` || echo 'No rootdev?'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
ETC=/etc/
|
ETC=/etc/
|
||||||
USRETC=/usr/etc/
|
USRETC=/usr/etc/
|
||||||
FILES1=fstab group hostname.file inet.conf motd.install mtab passwd profile protocols rc services termcap ttytab utmp rc.cd binary_sizes binary_sizes.big binary_sizes.xxl rc.rescue syslog.conf rc.daemons.dist
|
FILES1=fstab group hostname.file inet.conf motd.install mtab passwd profile protocols rc services termcap ttytab utmp rc.cd binary_sizes binary_sizes.big binary_sizes.xxl rc.rescue syslog.conf rc.daemons.dist rs.single
|
||||||
FILES2=shadow
|
FILES2=shadow
|
||||||
FILES3=daily dhcptags.conf rc
|
FILES3=daily dhcptags.conf rc
|
||||||
|
|
||||||
|
|
135
etc/drivers.conf
Normal file
135
etc/drivers.conf
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
driver floppy
|
||||||
|
{
|
||||||
|
irq 6;
|
||||||
|
io 3f0:8
|
||||||
|
0:10 # XXX DMA controller
|
||||||
|
81 # Also DMA
|
||||||
|
;
|
||||||
|
system
|
||||||
|
UMAP # 14
|
||||||
|
VIRCOPY # 15
|
||||||
|
IRQCTL # 19
|
||||||
|
DEVIO # 21
|
||||||
|
VDEVIO # 23
|
||||||
|
SETALARM # 24
|
||||||
|
TIMES # 25
|
||||||
|
SAFECOPYFROM # 31
|
||||||
|
SAFECOPYTO # 32
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver dp8390
|
||||||
|
{
|
||||||
|
system
|
||||||
|
KILL # 6
|
||||||
|
VIRCOPY # 15
|
||||||
|
IRQCTL # 19
|
||||||
|
DEVIO # 21
|
||||||
|
SDEVIO # 22
|
||||||
|
SETALARM # 24
|
||||||
|
GETINFO # 26
|
||||||
|
SAFECOPYFROM # 31
|
||||||
|
SAFECOPYTO # 32
|
||||||
|
SETGRANT # 34
|
||||||
|
;
|
||||||
|
pci device 10ec/8029;
|
||||||
|
uid 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver dumpcore
|
||||||
|
{
|
||||||
|
system
|
||||||
|
TRACE # 5
|
||||||
|
VIRCOPY # 15
|
||||||
|
GETINFO # 26
|
||||||
|
SETGRANT # 34
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver inet
|
||||||
|
{
|
||||||
|
system
|
||||||
|
KILL # 6
|
||||||
|
SETALARM # 24
|
||||||
|
TIMES # 25
|
||||||
|
SAFECOPYFROM # 31
|
||||||
|
SAFECOPYTO # 32
|
||||||
|
VSAFECOPY # 33
|
||||||
|
SETGRANT # 34
|
||||||
|
;
|
||||||
|
uid 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver random
|
||||||
|
{
|
||||||
|
system
|
||||||
|
KILL # 6
|
||||||
|
UMAP # 14
|
||||||
|
SETALARM # 24
|
||||||
|
GETINFO # 26
|
||||||
|
SAFECOPYFROM # 31
|
||||||
|
SAFECOPYTO # 32
|
||||||
|
SETGRANT # 34
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver cmos
|
||||||
|
{
|
||||||
|
io 70:2;
|
||||||
|
system
|
||||||
|
DEVIO # 21
|
||||||
|
TIMES # 25
|
||||||
|
SAFECOPYTO # 32
|
||||||
|
SETGRANT # 34
|
||||||
|
READBIOS # 35
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver is
|
||||||
|
{
|
||||||
|
system
|
||||||
|
GETINFO # 26
|
||||||
|
SETGRANT # 34
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver pci
|
||||||
|
{
|
||||||
|
io cf8:8 # PCI bus controller
|
||||||
|
4d0:2 # PIIX
|
||||||
|
;
|
||||||
|
system
|
||||||
|
PRIVCTL # 4
|
||||||
|
KILL # 6
|
||||||
|
DEVIO # 21
|
||||||
|
GETINFO # 26
|
||||||
|
SAFECOPYFROM # 31
|
||||||
|
SAFECOPYTO # 32
|
||||||
|
SETGRANT # 34
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver at_wini
|
||||||
|
{
|
||||||
|
io 1f0:8 # Controller 0
|
||||||
|
3f6 # Also controller 0
|
||||||
|
;
|
||||||
|
irq
|
||||||
|
14 # Controller 0
|
||||||
|
;
|
||||||
|
system
|
||||||
|
KILL # 6
|
||||||
|
UMAP # 14
|
||||||
|
IRQCTL # 19
|
||||||
|
DEVIO # 21
|
||||||
|
SDEVIO # 22
|
||||||
|
VDEVIO # 23
|
||||||
|
SETALARM # 24
|
||||||
|
TIMES # 25
|
||||||
|
GETINFO # 26
|
||||||
|
SAFECOPYFROM # 31
|
||||||
|
SAFECOPYTO # 32
|
||||||
|
SETGRANT # 34
|
||||||
|
READBIOS # 35
|
||||||
|
;
|
||||||
|
};
|
6
etc/rs.single
Normal file
6
etc/rs.single
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# 'Recovery' script that doesn't. This script is to be used for drivers that
|
||||||
|
# should not be restarted. Instead, the scripts configures the driver 'down'.
|
||||||
|
echo "Arguments: $@" >/dev/console
|
||||||
|
service down "$1"
|
|
@ -560,8 +560,7 @@
|
||||||
#define RS_UP_COPY (RS_RQ_BASE + 6) /* start system service and
|
#define RS_UP_COPY (RS_RQ_BASE + 6) /* start system service and
|
||||||
* keep the binary in memory
|
* keep the binary in memory
|
||||||
*/
|
*/
|
||||||
#define RS_RUN (RS_RQ_BASE + 7) /* run without restart */
|
#define RS_START (RS_RQ_BASE + 7) /* start a driver/service
|
||||||
#define RS_START (RS_RQ_BASE + 8) /* start a driver/service
|
|
||||||
* arguments are passed in
|
* arguments are passed in
|
||||||
* a struct rs_start
|
* a struct rs_start
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -83,7 +83,6 @@ PUBLIC int main(void)
|
||||||
switch(call_nr) {
|
switch(call_nr) {
|
||||||
case RS_UP: result = do_up(&m, FALSE, 0); break;
|
case RS_UP: result = do_up(&m, FALSE, 0); break;
|
||||||
case RS_UP_COPY: result = do_up(&m, TRUE, 0); break;
|
case RS_UP_COPY: result = do_up(&m, TRUE, 0); break;
|
||||||
case RS_RUN: result = do_up(&m, FALSE, RS_EXITING); break;
|
|
||||||
case RS_START: result = do_start(&m); break;
|
case RS_START: result = do_start(&m); break;
|
||||||
case RS_DOWN: result = do_down(&m); break;
|
case RS_DOWN: result = do_down(&m); break;
|
||||||
case RS_REFRESH: result = do_refresh(&m); break;
|
case RS_REFRESH: result = do_refresh(&m); break;
|
||||||
|
@ -139,7 +138,6 @@ PRIVATE void init_server(void)
|
||||||
for (s=0; s< NR_BOOT_PROCS; s++) {
|
for (s=0; s< NR_BOOT_PROCS; s++) {
|
||||||
ip = &image[s];
|
ip = &image[s];
|
||||||
if (ip->proc_nr >= 0) {
|
if (ip->proc_nr >= 0) {
|
||||||
nr_in_use ++;
|
|
||||||
rproc[s].r_flags = RS_IN_USE;
|
rproc[s].r_flags = RS_IN_USE;
|
||||||
rproc[s].r_proc_nr_e = ip->endpoint;
|
rproc[s].r_proc_nr_e = ip->endpoint;
|
||||||
rproc[s].r_pid = getnpid(ip->proc_nr);
|
rproc[s].r_pid = getnpid(ip->proc_nr);
|
||||||
|
|
|
@ -20,8 +20,6 @@
|
||||||
/* Allocate variables. */
|
/* Allocate variables. */
|
||||||
struct rproc rproc[NR_SYS_PROCS]; /* system process table */
|
struct rproc rproc[NR_SYS_PROCS]; /* system process table */
|
||||||
struct rproc *rproc_ptr[NR_PROCS]; /* mapping for fast access */
|
struct rproc *rproc_ptr[NR_PROCS]; /* mapping for fast access */
|
||||||
int nr_in_use; /* number of services */
|
|
||||||
extern int errno; /* error status */
|
|
||||||
|
|
||||||
/* Prototypes for internal functions that do the hard work. */
|
/* Prototypes for internal functions that do the hard work. */
|
||||||
FORWARD _PROTOTYPE( int start_service, (struct rproc *rp, int flags,
|
FORWARD _PROTOTYPE( int start_service, (struct rproc *rp, int flags,
|
||||||
|
@ -61,13 +59,11 @@ int flags; /* extra flags, if any */
|
||||||
endpoint_t ep; /* new endpoint no. */
|
endpoint_t ep; /* new endpoint no. */
|
||||||
|
|
||||||
/* See if there is a free entry in the table with system processes. */
|
/* See if there is a free entry in the table with system processes. */
|
||||||
if (nr_in_use >= NR_SYS_PROCS) return(EAGAIN);
|
|
||||||
for (slot_nr = 0; slot_nr < NR_SYS_PROCS; slot_nr++) {
|
for (slot_nr = 0; slot_nr < NR_SYS_PROCS; slot_nr++) {
|
||||||
rp = &rproc[slot_nr]; /* get pointer to slot */
|
rp = &rproc[slot_nr]; /* get pointer to slot */
|
||||||
if (! rp->r_flags & RS_IN_USE) /* check if available */
|
if (! rp->r_flags & RS_IN_USE) /* check if available */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nr_in_use ++; /* update administration */
|
|
||||||
|
|
||||||
/* Obtain command name and parameters. This is a space-separated string
|
/* Obtain command name and parameters. This is a space-separated string
|
||||||
* that looks like "/sbin/service arg1 arg2 ...". Arguments are optional.
|
* that looks like "/sbin/service arg1 arg2 ...". Arguments are optional.
|
||||||
|
@ -166,13 +162,11 @@ message *m_ptr; /* request message pointer */
|
||||||
if (s != OK) return(s);
|
if (s != OK) return(s);
|
||||||
|
|
||||||
/* See if there is a free entry in the table with system processes. */
|
/* See if there is a free entry in the table with system processes. */
|
||||||
if (nr_in_use >= NR_SYS_PROCS) return(EAGAIN);
|
|
||||||
for (slot_nr = 0; slot_nr < NR_SYS_PROCS; slot_nr++) {
|
for (slot_nr = 0; slot_nr < NR_SYS_PROCS; slot_nr++) {
|
||||||
rp = &rproc[slot_nr]; /* get pointer to slot */
|
rp = &rproc[slot_nr]; /* get pointer to slot */
|
||||||
if (! rp->r_flags & RS_IN_USE) /* check if available */
|
if (! rp->r_flags & RS_IN_USE) /* check if available */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nr_in_use ++; /* update administration */
|
|
||||||
|
|
||||||
/* Obtain command name and parameters. This is a space-separated string
|
/* Obtain command name and parameters. This is a space-separated string
|
||||||
* that looks like "/sbin/service arg1 arg2 ...". Arguments are optional.
|
* that looks like "/sbin/service arg1 arg2 ...". Arguments are optional.
|
||||||
|
@ -977,8 +971,8 @@ struct priv *privp;
|
||||||
src_bit, call_nr;
|
src_bit, call_nr;
|
||||||
unsigned long mask;
|
unsigned long mask;
|
||||||
|
|
||||||
/* Clear the privilege structure */
|
/* Clear s_k_call_mask */
|
||||||
memset(privp, '\0', sizeof(*privp));
|
memset(privp->s_k_call_mask, '\0', sizeof(privp->s_k_call_mask));
|
||||||
|
|
||||||
src_bits_per_word= 8*sizeof(rp->r_call_mask[0]);
|
src_bits_per_word= 8*sizeof(rp->r_call_mask[0]);
|
||||||
dst_bits_per_word= 8*sizeof(privp->s_k_call_mask[0]);
|
dst_bits_per_word= 8*sizeof(privp->s_k_call_mask[0]);
|
||||||
|
@ -1017,6 +1011,12 @@ int endpoint;
|
||||||
int i, r;
|
int i, r;
|
||||||
struct rs_pci rs_pci;
|
struct rs_pci rs_pci;
|
||||||
|
|
||||||
|
if (strcmp(rp->r_label, "pci") == 0)
|
||||||
|
{
|
||||||
|
printf("init_pci: not when starting 'pci'\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
len= strlen(rp->r_label);
|
len= strlen(rp->r_label);
|
||||||
if (len+1 > sizeof(rs_pci.rsp_label))
|
if (len+1 > sizeof(rs_pci.rsp_label))
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,7 +60,6 @@ extern struct rproc {
|
||||||
|
|
||||||
/* Mapping for fast access to the system process table. */
|
/* Mapping for fast access to the system process table. */
|
||||||
extern struct rproc *rproc_ptr[NR_PROCS];
|
extern struct rproc *rproc_ptr[NR_PROCS];
|
||||||
extern int nr_in_use;
|
|
||||||
|
|
||||||
/* Flag values. */
|
/* Flag values. */
|
||||||
#define RS_IN_USE 0x001 /* set when process slot is in use */
|
#define RS_IN_USE 0x001 /* set when process slot is in use */
|
||||||
|
|
|
@ -33,14 +33,15 @@ PRIVATE char *known_requests[] = {
|
||||||
"rescue",
|
"rescue",
|
||||||
"shutdown",
|
"shutdown",
|
||||||
"upcopy", /* fill for RS_UP_COPY */
|
"upcopy", /* fill for RS_UP_COPY */
|
||||||
"run",
|
|
||||||
"catch for illegal requests"
|
"catch for illegal requests"
|
||||||
};
|
};
|
||||||
#define ILLEGAL_REQUEST sizeof(known_requests)/sizeof(char *)
|
#define ILLEGAL_REQUEST sizeof(known_requests)/sizeof(char *)
|
||||||
|
|
||||||
/* Global error number set for failed system calls. */
|
/* Global error number set for failed system calls. */
|
||||||
#define OK 0
|
#define OK 0
|
||||||
extern int errno;
|
|
||||||
|
#define RUN_CMD "run"
|
||||||
|
#define RUN_SCRIPT "/etc/rs.single" /* Default script for 'run' */
|
||||||
|
|
||||||
/* Define names for arguments provided to this utility. The first few
|
/* Define names for arguments provided to this utility. The first few
|
||||||
* arguments are required and have a known index. Thereafter, some optional
|
* arguments are required and have a known index. Thereafter, some optional
|
||||||
|
@ -75,6 +76,7 @@ extern int errno;
|
||||||
* are stored globally in the following variables:
|
* are stored globally in the following variables:
|
||||||
*/
|
*/
|
||||||
PRIVATE int req_type;
|
PRIVATE int req_type;
|
||||||
|
PRIVATE int do_run= 0; /* 'run' command instead of 'up' */
|
||||||
PRIVATE char *req_label;
|
PRIVATE char *req_label;
|
||||||
PRIVATE char *req_path;
|
PRIVATE char *req_path;
|
||||||
PRIVATE char *req_args;
|
PRIVATE char *req_args;
|
||||||
|
@ -150,22 +152,38 @@ PRIVATE int parse_arguments(int argc, char **argv)
|
||||||
exit(EINVAL);
|
exit(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(argv[optind+ARG_REQUEST], RUN_CMD) == 0)
|
||||||
|
{
|
||||||
|
req_nr= RS_UP;
|
||||||
|
do_run= TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* Verify request type. */
|
/* Verify request type. */
|
||||||
for (req_type=0; req_type< ILLEGAL_REQUEST; req_type++) {
|
for (req_type=0; req_type< ILLEGAL_REQUEST; req_type++) {
|
||||||
if (strcmp(known_requests[req_type],argv[optind+ARG_REQUEST])==0) break;
|
if (strcmp(known_requests[req_type],argv[optind+ARG_REQUEST])==0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (req_type == ILLEGAL_REQUEST) {
|
if (req_type == ILLEGAL_REQUEST) {
|
||||||
print_usage(argv[ARG_NAME], "illegal request type");
|
print_usage(argv[ARG_NAME], "illegal request type");
|
||||||
exit(ENOSYS);
|
exit(ENOSYS);
|
||||||
}
|
}
|
||||||
req_nr = RS_RQ_BASE + req_type;
|
req_nr = RS_RQ_BASE + req_type;
|
||||||
|
}
|
||||||
|
|
||||||
if (req_nr == RS_UP || req_nr == RS_RUN) {
|
if (req_nr == RS_UP) {
|
||||||
|
|
||||||
rs_start.rss_flags= 0;
|
rs_start.rss_flags= 0;
|
||||||
if (c_flag)
|
if (c_flag)
|
||||||
rs_start.rss_flags |= RF_COPY;
|
rs_start.rss_flags |= RF_COPY;
|
||||||
|
|
||||||
|
if (do_run)
|
||||||
|
{
|
||||||
|
/* Set default recovery script for RUN */
|
||||||
|
req_script = RUN_SCRIPT;
|
||||||
|
req_nr = RS_START;
|
||||||
|
}
|
||||||
|
|
||||||
if (req_nr == RS_UP && c_flag)
|
if (req_nr == RS_UP && c_flag)
|
||||||
req_nr= RS_UP_COPY;
|
req_nr= RS_UP_COPY;
|
||||||
|
|
||||||
|
@ -640,6 +658,8 @@ struct
|
||||||
int call_nr;
|
int call_nr;
|
||||||
} system_tab[]=
|
} system_tab[]=
|
||||||
{
|
{
|
||||||
|
{ "PRIVCTL", SYS_PRIVCTL },
|
||||||
|
{ "TRACE", SYS_TRACE },
|
||||||
{ "KILL", SYS_KILL },
|
{ "KILL", SYS_KILL },
|
||||||
{ "UMAP", SYS_UMAP },
|
{ "UMAP", SYS_UMAP },
|
||||||
{ "VIRCOPY", SYS_VIRCOPY },
|
{ "VIRCOPY", SYS_VIRCOPY },
|
||||||
|
@ -652,7 +672,9 @@ struct
|
||||||
{ "GETINFO", SYS_GETINFO },
|
{ "GETINFO", SYS_GETINFO },
|
||||||
{ "SAFECOPYFROM", SYS_SAFECOPYFROM },
|
{ "SAFECOPYFROM", SYS_SAFECOPYFROM },
|
||||||
{ "SAFECOPYTO", SYS_SAFECOPYTO },
|
{ "SAFECOPYTO", SYS_SAFECOPYTO },
|
||||||
|
{ "VSAFECOPY", SYS_VSAFECOPY },
|
||||||
{ "SETGRANT", SYS_SETGRANT },
|
{ "SETGRANT", SYS_SETGRANT },
|
||||||
|
{ "READBIOS", SYS_READBIOS },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -865,7 +887,6 @@ PUBLIC int main(int argc, char **argv)
|
||||||
switch(request) {
|
switch(request) {
|
||||||
case RS_UP:
|
case RS_UP:
|
||||||
case RS_UP_COPY:
|
case RS_UP_COPY:
|
||||||
case RS_RUN:
|
|
||||||
/* Build space-separated command string to be passed to RS server. */
|
/* Build space-separated command string to be passed to RS server. */
|
||||||
strcpy(command, req_path);
|
strcpy(command, req_path);
|
||||||
command[strlen(req_path)] = ' ';
|
command[strlen(req_path)] = ' ';
|
||||||
|
|
Loading…
Reference in a new issue