#define MIN_REGION_SECTORS (1024*1024*min_region_mb/SECTOR_SIZE)
-#define MAX_REGION_MB 4095
-#define MAX_REGION_SECTORS (1024*(1024/SECTOR_SIZE)*MAX_REGION_MB)
-
#define arraysize(a) (sizeof(a) / sizeof((a)[0]))
#define arraylimit(a) ((a) + arraysize(a))
if (curdev->rdev != DEV_C0D0) curdev= firstdev;
}
-void getdevices()
+void getdevices(void)
/* Get all block devices from /dev that look interesting. */
{
DIR *d;
{
int ex, changed = 0, i;
struct part_entry *newpart;
- if(reg->is_used_part && reg->used_part.size > MAX_REGION_SECTORS) {
- reg->used_part.size = MAX_REGION_SECTORS;
- changed = 1;
- cylinderalign(reg);
- }
if(!reg->is_used_part) {
ex = reg->free_sec_last - reg->free_sec_start + 1;
- if(ex > MAX_REGION_SECTORS) {
- reg->free_sec_last -= ex - MAX_REGION_SECTORS;
- changed = 1;
- cylinderalign(reg);
- }
if(made_new) *made_new = 1;
} else if(made_new) *made_new = 0;
if(!reg->is_used_part) {
echo -n "
MINIX needs one primary partition of $TOTALMB MB for a full install,
plus what you want for /home.
-The maximum file system currently supported is 4 GB.
If there is no free space on your disk then you have to choose an option:
(1) Delete one or more partitions
* reporting a 0-sized device (displays usage).
*/
if(blocks < 1) {
- fprintf(stderr, "%s: this device can't hold a filesystem.\n",
- progname);
+ fprintf(stderr, "%s: zero size device.\n", progname);
return 1;
}
}
/* Read the entire file. Try it in large chunks, but if an error
* occurs, go to single reads for a while. */
while (1) {
- if(lseek(fd, BLOCK_SIZE * b, SEEK_SET) < 0) {
- perror("lseek");
+ if(lseek64(fd, mul64u(BLOCK_SIZE, b), SEEK_SET, NULL) < 0) {
+ perror("lseek64");
return 1;
}
s = read(fd, a, BLOCK_SIZE * chunk);
};
_PROTOTYPE( static void rtl_init, (struct dpeth *dep) );
+#if 0
_PROTOTYPE( static u16_t get_ee_word, (dpeth_t *dep, int a) );
_PROTOTYPE( static void ee_wen, (dpeth_t *dep) );
_PROTOTYPE( static void set_ee_word, (dpeth_t *dep, int a, U16_t w) );
_PROTOTYPE( static void ee_wds, (dpeth_t *dep) );
+#endif
_PROTOTYPE( static void micro_delay, (unsigned long usecs) );
PUBLIC int rtl_probe(dep)
for(;;)
{
- for (i= 0; pcitab[i].vid != 0; i++)
+ for (i= 0; pcitab[i].vid != 0 || pcitab[i].did != 0; i++)
{
if (pcitab[i].vid != vid)
continue;
}
break;
}
- if (pcitab[i].vid != 0)
+ if (pcitab[i].vid != 0 || pcitab[i].did != 0)
break;
if (just_one)
dname= "unknown device";
printf("%s: %s (%04X/%04X) at %s\n",
dep->de_name, dname, vid, did, pci_slot_name(devind));
- pci_reserve(devind);
+ if(pci_reserve_ok(devind) != OK)
+ return 0;
/* printf("cr = 0x%x\n", pci_attr_r16(devind, PCI_CR)); */
bar= pci_attr_r32(devind, PCI_BAR) & 0xffffffe0;
printf("\n");
#endif
+#if 0
if (getenv("RTL8029MN"))
{
ee_wen(dep);
assert(get_ee_word(dep, 0x76/2) == 0x8029);
}
+#endif
}
+#if 0
static u16_t get_ee_word(dep, a)
dpeth_t *dep;
int a;
outb_reg3(dep, 1, 0x00); /* back to normal */
outb_reg0(dep, DP_CR, CR_PS_P0); /* back to bank 0 */
}
+#endif
static void micro_delay(unsigned long usecs)
{
return EPERM;
}
- if (ex64hi(pos64) != 0)
+ /* ZERO_DEV and NULL_DEV are infinite in size. */
+ if (m_device != ZERO_DEV && m_device != NULL_DEV && ex64hi(pos64) != 0)
return OK; /* Beyond EOF */
position= cv64ul(pos64);
{
/* Ignore all init calls for a process after the first one */
}
-#if 0
else
pci_release(names[i].name);
-#endif
names[i].tasknr= mp->m_source;
mp->m_type= 0;
return OK;
}
-#if 0
/*===========================================================================*
* pci_release *
*===========================================================================*/
pcidev[i].pd_inuse= 0;
}
}
-#endif
/*===========================================================================*
* pci_ids *
/usr/lib/em_opt 208000
/usr/lib/i386/as 55000
/usr/lib/i386/cg 50655
-/bin/sh 102400
-/usr/bin/make 337920
+/bin/sh 142400
+/usr/bin/make 380000
*===========================================================================*/
PRIVATE char *flags_str(int flags)
{
- static char str[10];
+ static char str[13];
str[0] = (flags & WAITING) ? 'W' : '-';
str[1] = (flags & ZOMBIE) ? 'Z' : '-';
str[2] = (flags & PAUSED) ? 'P' : '-';
* arguments vector is: path, arguments, NULL.
*/
arg_count = 0; /* initialize arg count */
- rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */
+ rp->r_file = rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */
cmd_ptr = rp->r_cmd; /* do some parsing */
while(*cmd_ptr != '\0') { /* stop at end of string */
if (*cmd_ptr == ' ') { /* next argument */
* arguments vector is: path, arguments, NULL.
*/
arg_count = 0; /* initialize arg count */
- rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */
+ rp->r_file = rp->r_argv[arg_count++] = rp->r_cmd; /* start with path */
cmd_ptr = rp->r_cmd; /* do some parsing */
while(*cmd_ptr != '\0') { /* stop at end of string */
if (*cmd_ptr == ' ') { /* next argument */
setuid(rp->r_uid);
if (!use_copy)
{
- execve(rp->r_argv[0], rp->r_argv, NULL); /* POSIX execute */
- file_only = strrchr(rp->r_argv[0], '/') + 1;
+ rp->r_argv[0] = rp->r_label;
+ execve(rp->r_file, rp->r_argv, NULL); /* POSIX execute */
+ file_only = strrchr(rp->r_file, '/') + 1;
execve(file_only, rp->r_argv, NULL); /* POSIX execute */
}
printf("RS: exec failed for %s: %d\n", rp->r_argv[0], errno);
char r_cmd[MAX_COMMAND_LEN]; /* raw command plus arguments */
char r_script[MAX_SCRIPT_LEN]; /* name of the restart script executable */
char *r_argv[MAX_NR_ARGS+2]; /* parsed arguments vector */
+ char *r_file; /* path to binary to exec */
int r_argc; /* number of arguments */
/* Resources */
FORWARD _PROTOTYPE( int safe_io_conversion, (endpoint_t,
cp_grant_id_t *, int *, cp_grant_id_t *, int, endpoint_t *,
- void **, int *, vir_bytes, off_t *));
+ void **, int *, vir_bytes, u32_t *));
FORWARD _PROTOTYPE( void safe_io_cleanup, (cp_grant_id_t, cp_grant_id_t *,
int));
* safe_io_conversion *
*===========================================================================*/
PRIVATE int safe_io_conversion(driver, gid, op, gids, gids_size,
- io_ept, buf, vec_grants, bytes, pos)
+ io_ept, buf, vec_grants, bytes, pos_lo)
endpoint_t driver;
cp_grant_id_t *gid;
int *op;
void **buf;
int *vec_grants;
vir_bytes bytes;
-off_t *pos;
+u32_t *pos_lo;
{
int access = 0, size;
int j;
*buf = new_iovec;
break;
case VFS_DEV_IOCTL:
- *pos = *io_ept; /* Old endpoint in POSITION field. */
+ *pos_lo = *io_ept; /* Old endpoint in POSITION field. */
*op = DEV_IOCTL_S;
if(_MINIX_IOCTL_IOR(m_in.REQUEST)) access |= CPF_WRITE;
if(_MINIX_IOCTL_IOW(m_in.REQUEST)) access |= CPF_READ;
return;
}
+#if 0
/*===========================================================================*
* dev_bio *
*===========================================================================*/
return(m.REP_STATUS);
}
}
+#endif
/*===========================================================================*
* dev_io *
*===========================================================================*/
-PUBLIC int dev_io(op, dev, proc_e, buf, posX, bytes, flags)
+PUBLIC int dev_io(op, dev, proc_e, buf, pos, bytes, flags)
int op; /* DEV_READ, DEV_WRITE, DEV_IOCTL, etc. */
dev_t dev; /* major-minor device number */
int proc_e; /* in whose address space is buf? */
void *buf; /* virtual address of the buffer */
-u64_t posX; /* byte position */
+u64_t pos; /* byte position */
int bytes; /* how many bytes to transfer */
int flags; /* special flags, like O_NONBLOCK */
{
/* Read or write from a device. The parameter 'dev' tells which one. */
struct dmap *dp;
- off_t pos;
+ u32_t pos_lo, pos_high;
message dev_mess;
cp_grant_id_t gid = GRANT_INVALID;
static cp_grant_id_t gids[NR_IOREQS];
void *buf_used;
endpoint_t ioproc;
- if (ex64hi(posX) != 0)
- panic(__FILE__, "dev_io: postition too high", NO_NUM);
- pos= ex64lo(posX);
+ pos_lo= ex64lo(pos);
+ pos_high= ex64hi(pos);
/* Determine task dmap. */
dp = &dmap[(dev >> MAJOR) & BYTE];
buf_used = buf;
safe = safe_io_conversion(dp->dmap_driver, &gid,
&op, gids, NR_IOREQS, &dev_mess.IO_ENDPT, &buf_used,
- &vec_grants, bytes, &pos);
+ &vec_grants, bytes, &pos_lo);
if(buf != buf_used)
panic(__FILE__,"dev_io: safe_io_conversion changed buffer", NO_NUM);
/* Set up the rest of the message passed to task. */
dev_mess.m_type = op;
dev_mess.DEVICE = (dev >> MINOR) & BYTE;
- dev_mess.POSITION = pos;
+ dev_mess.POSITION = pos_lo;
dev_mess.COUNT = bytes;
- dev_mess.HIGHPOS = 0;
+ dev_mess.HIGHPOS = pos_high;
/* This will be used if the i/o is suspended. */
ioproc = dev_mess.IO_ENDPT;
REVTAG=""
PACKAGES=1
-while getopts "pchu?r:" c
+FILENAMEOUT=""
+
+while getopts "s:pchu?r:f:" c
do
case "$c" in
\?)
- echo "Usage: $0 [-p] [-c] [-h] [-r <tag>] [-u]" >&2
+ echo "Usage: $0 [-p] [-c] [-h] [-r <tag>] [-u] [-f <filename>] [-s <username>]" >&2
exit 1
;;
h)
HDEMU=1
USB=1
;;
+ f)
+ FILENAMEOUT="$OPTARG"
+ ;;
+ s) USERNAME="--username=$OPTARG"
+ ;;
esac
done
fi
echo " * Cleanup old files"
-rm -rf $RELEASEDIR $IMG $IMAGE $ROOTIMAGE $IMGBZ $CDFILES image*
+rm -rf $RELEASEDIR $IMG $IMAGE $ROOTIMAGE $CDFILES image*
mkdir -p $CDFILES || exit
mkdir -p $RELEASEDIR
mkfs -B $BS -b $ROOTBLOCKS $TMPDISK3 || exit
then
echo " * Doing new svn export"
REPO=https://gforge.cs.vu.nl/svn/minix/trunk/$SRC
- REVISION="`svn info $SVNREV $REPO | grep '^Revision: ' | awk '{ print $2 }'`"
+ REVISION="`svn info $USERNAME $SVNREV $REPO | grep '^Revision: ' | awk '{ print $2 }'`"
echo "Doing export of revision $REVISION from $REPO."
- ( cd $RELEASEDIR/usr && svn export -r$REVISION $REPO )
+ ( cd $RELEASEDIR/usr && svn $USERNAME export -r$REVISION $REPO )
REVTAG=r$REVISION
echo "
else
IMG=${IMG_BASE}_${REVTAG}.iso
fi
-IMGBZ=${IMG}.bz2
-echo "Making $IMGBZ"
echo " * Fixups for owners and modes of dirs and files"
chown -R bin $RELEASEDIR/usr/$SRC
hdemu_root_changes
fi
-echo $version_pretty >$RELEASEDIR/etc/version
+echo $version_pretty, SVN revision $SVNREV, generated `date` >$RELEASEDIR/etc/version
echo " * Counting files"
extrakb=`du -s $RELEASEDIR/usr/install | awk '{ print $1 }'`
expr `df $TMPDISK | tail -1 | awk '{ print $4 }'` - $extrakb >$RELEASEDIR/.usrkb
partition -m $IMG 0 81:$isosects 81:$ROOTSECTS 81:$USRSECTS
fi
fi
+
+if [ "$FILENAMEOUT" ]
+then echo "$IMG" >$FILENAMEOUT
+fi