711 Commits

Author SHA1 Message Date
David van Moolenbroek
972156d595 TTY: "nobeep" setting to disable beeps
Disable the speaker by passing in "nobeep=1" as a boot option.
The option is preserved when updating the boot configuration.
Currently i386 only.
2013-02-15 11:06:34 +01:00
David van Moolenbroek
09b729b328 rtl8169: reduce verbosity 2013-02-15 11:05:43 +01:00
David van Moolenbroek
91cea699bb rtl8169: add support for RTL8101E family
All cards in this family (RTL8101E, RTL8102E, RTL8103E, RTL8105E,
possibly others) should be recognized based on the added PCI ID.
The hardware version number of the RTL8105E has been added only to
serve as an example of a card that does not require modification of
certain undocumented registers.
2013-02-15 11:05:35 +01:00
Ben Gras
d6be9725c9 pkgin_all: script to auto-install all packages
Change-Id: I858c6d2b1c117c1fb5f702ab9c4921e86fb0cec5
2013-02-14 22:58:29 +00:00
Kees Jongenburger
6a290814ae mmc:Ignore SIGTERM if open count > 0
Change-Id: I996497335b4209ff7ef95dfa977d97e5557456e9
2013-02-14 10:20:21 +01:00
Ben Gras
38c4489ef0 release.sh: allow REPO and GITBRANCH env override
patch by Antoine Leca

Change-Id: Iabcf1189d8b5250536bb17e650f48f0e73fcde2c
2013-02-13 19:20:33 +00:00
Ben Gras
9a3d76d0ca ash: default to an editing mode
. otherwise line editing is not initialized at all

Change-Id: I4b1aa5659720b1fd955ab0450b111085dcdc9dee
2013-02-13 16:19:15 +00:00
David van Moolenbroek
9d89e72a5c ahci: more robustness against flaky devices
- if supported, override BSY/DRQ flags and start the port anyway if it
  times out with DET=3h status during device detection;
- no longer rely on the device signature to be set; unless a valid
  signature is obtained, try both ATA and ATAPI device identification.
2013-02-13 14:29:44 +00:00
David van Moolenbroek
eb89b33d39 ahci: device detection rewrite
- do not start a port before the BSY and DRQ flags have been cleared;
  as such, poll on device status rather than signature availability.
- change "ahci_sig_timeout" to "ahci_device_timeout" variable setting
  accordingly; this variable determines the polling duration before a
  newly attached device is given up on, and uses 30 seconds as default;
- use port connect changes (PCS/X/DET->1h) to kick off polling for an
  attached device; detachment is still detected by means of PhyRdy
  status changes (PRCS/N/DET<->3h).
2013-02-13 14:26:48 +00:00
David van Moolenbroek
23b12e29a2 ahci: rewrite timeout initialization code
- the "ahci_sig_timeout" variable now denotes the entire checking
  period, and the delay between checks has been hardcoded; what was
  previously "ahci_sig_checks" is now computed from those two;
- timeout values are no longer used for both millisecond and clock
  tick values, and better typed;
- the computation of timeouts is no longer off by half a second.
2013-02-12 13:53:09 +00:00
David van Moolenbroek
ad0b58fe83 ahci: centralize, fix port reset 2013-02-12 13:52:52 +00:00
David van Moolenbroek
f2de719cfe ahci: link FIS receive mode to memory allocation
There is no need to set/clear PxCMD.FRE on every port start/stop.

Also remove some already useless and now also incomplete port
reinitialization at startup.
2013-02-12 13:52:33 +00:00
David van Moolenbroek
3c55fcbc13 ahci: use macros to access HBA and port registers 2013-02-12 13:52:01 +00:00
Ben Gras
de57a53027 __aeabi_ldivmod: fix sign logic
. signed 64-bit divide incorrectly tested for sign compensation
	  bits in the NEG (R5) register, causing the signedness of the
	  quotient and modulus to be wrong for negative numerators.

Fixes test45 on ARM.

Change-Id: Id0df8fd97ea67cd0722db8cdd70a07e01b3d7870
2013-02-11 21:37:10 +01:00
Ben Gras
3bc6d7df06 impove memory accounting
. the total amount of memory in the system didn't include the memory
	  used by the boot-time modules and some dynamic allocation by the
	  kernel at boot time (to map in VM). especially apparent on our
	  ARM board with 'only' 512MB of memory and a huge ramdisk.
	. also: *add* the VM loaded module to the freelist after it has
	  been allocated for & mapped in instead of cutting it *out* of the
	  freelist! so we get a few more MB free..

Change-Id: If37ac32b21c9d38610830e21421264da4f20bc4f
2013-02-11 19:31:57 +01:00
Ben Gras
d1df256de9 VM: slight pagedir mapping generalization
. allow any number of pde's used for pagedir mapping
	. allows >1024 NR_PROCS on x86, >64 on ARM
	. allows NR_PROCS to be the same in both cases
	. also cleanup: allocating spare PDE's is not necessary
	  throw that function out

Change-Id: Ibb8f8cf6e7db6a4d6384b6911d1a3f3f5e5d8256
2013-02-10 21:50:34 +01:00
Ben Gras
7df45744ad libexec: quiet
. harmless errors in the case of shell scripts

Change-Id: I461776024a21233e291102ca6d05dc7fa767f71a
2013-02-10 19:52:25 +01:00
Ben Gras
5a0585359d ARM divsi3.S: raise(SIGFPE) when called for
. raise(SIGFPE) for modulo-0/divide-0 operations in
	  internal int division functions
	. gcc: do not link with -lgcc anywhere so these internal
	  functions are always used from libc instead of (sometimes)
	  masked by -lgcc
	. together fixes test53 on ARM

Change-Id: I31ec19dfdd68b8a92695595da901874e63106f9d
2013-02-09 22:24:59 +01:00
Ben Gras
4ac7206c6f t40c term[] count fix
. term[] did not have the promised number of entries

Change-Id: I06a45ca0d948a6876bf1bffd0ec4706c88b7a3b0
2013-02-09 18:51:56 +01:00
Ben Gras
1f6e0c8fa6 drivers: build random for arm too
Change-Id: I801643281fdacc6cb7950cc79a29bec28dcf40ec
2013-02-09 17:13:16 +01:00
Ben Gras
95513e73da opendir change: refinement
Change-Id: I90cc6929c9e7678da8e200688dcd40441efe030f
2013-02-08 23:09:21 +00:00
Ben Gras
4505b4a30a add opendir alias
Change-Id: Ib121e763bac7bea44a2f2533c454ff7d9361dc8d
2013-02-08 21:40:57 +00:00
Ben Gras
f5cfab17d6 ldivmod, uldivmod: fix qdivrem calls
. ldivmod, uldivmod were passing the modulo argument pointer
	  in R4, which is bogus, as qdivrem expects it on the stack as
	  per the EABI, causing essentially 'random' memory to be trampled
	  by qdivrem. fix by pushing R4 before the call.
	. also add these functions to -minc so -lminc clients can be
	  linked without -lgcc

Change-Id: I90b0b28b51a188c93da5de6afb108224749ea794
2013-02-08 14:09:45 +01:00
Ben Gras
46e7c7a920 ramdisk Makefile: CLEANFILES fix 2013-02-07 23:09:18 +01:00
Ben Gras
702d90b6fe test41: relax maximum timer tick rate
. on ARM (hz=1000) does not give code a chance to stop the timer

Change-Id: Id626bfed088400c3c3962ddfc5e8fbe23dd2a797
2013-02-06 17:40:04 +01:00
Kees Jongenburger
3357fcb24a GPIO:further development
* Generalize GPIO handling.
* Add libs to configure gpio's clocks and pads
* Add Interrupt handling.
* Introduce mmio.h and log.h

Change-Id: I928e4c807d15031de2eede4b3ecff62df795f8ac
2013-02-06 16:07:43 +01:00
Kees Jongenburger
47e47cfdd6 build:remove minix-sys.plist from version management.
Remove minix-sys.plist from version management it is generated by
the build system.

Change-Id: I6fc831992ea619e598130450f0f46b6fc01145ed
2013-02-06 16:07:06 +01:00
Ben Gras
3045d2870b arm: protect state after signal handler
. set MF_CONTEXT_SET after signal handler state
	  is set so it doesn't get clobbered by the kernel
	  afterwards (i.e. by delivermsg()).

fixes at least test41.

Change-Id: I7e5e0e9311c8bbc1c0a9c7ca466ceddd9edfa03f
2013-02-05 17:25:38 +01:00
Ben Gras
298b41b523 libexec: detect short files
if an exec() fails partway through reading in the sections, the target
process is already gone and a defunct process remains. sanity checking
the binary beforehand helps that.

test10 mutilates binaries and exec()s them on purpose; making an exec()
fail cleanly in such cases seems like acceptable behaviour.

fixes test10 on ARM.

Change-Id: I1ed9bb200ce469d4d349073cadccad5503b2fcb0
2013-02-04 12:04:35 +01:00
Ben Gras
57bab02d57 kernel, libc: signals fixes
. kernel: signal handler args for ARM
	. kernel: sanity check return address (LSB indicates thumb mode)
	. libc: properly retrieve signal mask for ARM

together fix test37 on ARM.

Change-Id: I4e00f754c50104ed85c7fdf8ec5ad54568f20a81
2013-02-04 12:03:46 +01:00
Ben Gras
ccdc3ff73f umount: getopt return value is int, not char
. causes infinite loop on ARM (default unsigned char?)

Change-Id: If00184f37317c8597a8203f68ec96f1ce5030853
2013-02-04 12:03:05 +01:00
Ben Gras
8ea66915f2 kernel: scheduling fix for ARM
. make read_tsc_64 use the free-running clock, significantly
	  improving scheduling behaviour

Change-Id: Idf6a12f6e26be7fe3b3664c278cae846d8b2a442
2013-02-03 22:49:05 +01:00
af18db5668 Fix warning about double rule for rc in ramdisk
Change-Id: I870364455e5cbfe178b3dba44a1c944ca7ed9d19
2013-02-02 01:20:09 +01:00
5f59a986e2 Upgrading sync
Change-Id: Ied34ebd1d2dc963f5a2af8fc3bbf8e6c94df61cf
2013-02-02 01:20:09 +01:00
b7ef8cfb52 Upgrading ls
Change-Id: Ie0bacf04e727fac5c6df7b2bcf5039e9ce800616
2013-02-02 01:20:09 +01:00
Ben Gras
b7ea9f3fd1 vm: fix sanity checks on arm
The 'polarity' of the RW bit is inversed on ARM, causing one
of the sanity check compensations to fail. ARM now runs basic
stuff with sanity checks passing.

Change-Id: Iee28ab63e430e759f204eeb204b24c301d5ea3c9
2013-02-01 16:45:56 +00:00
Kees Jongenburger
3de9b14567 mmc:development
* let busy loops timeout.
* Start using interrupt handlers.
* Allocate the ramdisk only when used.

Change-Id: Ie08d66eefef3c8cd3ee16c04f74a9a50cc12b021
2013-02-01 13:31:10 +01:00
c31c70743a Importing bin/ln
Change-Id: I318e79f2d02dcff10bda8af335d286a78be5c5a2
2013-02-01 11:41:48 +01:00
7104bb23a9 Upgrading kill
Change-Id: I9ad71f08998ac17651d243afecbcc362e0f91b56
2013-02-01 11:41:48 +01:00
06f3970b9e Upgrading pwd
Change-Id: I3bab8335ac58f2d0af20c5cee4b772b1175c2ede
2013-02-01 11:41:48 +01:00
5debab0eb0 Importing NetBSD expr
Change-Id: Ifdb1160cbfeb1324f6fcd612e66112fa0940227c
2013-02-01 11:41:47 +01:00
059578953d Upgrading echo
Change-Id: Idaa5da742b3cc9a1ee2f5c03f10e0627690556fa
2013-02-01 11:41:47 +01:00
3a19ae756f Upgrading test
Change-Id: I1cd8e24475030989c95ba60b4e7462dacf945b9f
2013-02-01 11:41:47 +01:00
2c96f0541b Upgrading printf
Change-Id: I78dbbf0d14e4d61f5dfbec53d3938453b3e03ee6
2013-02-01 11:41:47 +01:00
252a83f614 Fix command line history in ash
Also did some cleanup in ash sources, to make minix modifications
more obvious, as well as some simplifications (by removing code which
is never compiled)

Removed EDITLINE support, use libedit, which does the termcap/terminfo
handling.

Change-Id: I19f7f425ed6a61298844631f9d7f3173cf7f30c0
2013-02-01 11:41:47 +01:00
a8d553408d Fix file permissions in usr.bin/tput
Change-Id: Ieb29d7a91bbd90273e37406f5454e23c3131634a
2013-02-01 11:41:47 +01:00
Thomas Veerman
db8c1ee9d0 ARM: provide free running clock to replace ccnt
The Cycle CouNTer on ARM cannot be used reliably as it wraps around
rather quickly and can be altered by user space (on Minix). Furthermore,
it's buggy when wrapping and is not implemented at all on the Linaro
Beagleboard emulator.

This patch programs GPTIMER10 as a free running clock at 1.625 MHz (it
doesn't generate interrupts). It's memory mapped into every process,
which enables libsys to provide micro_delay().

Change-Id: Iba004c6c62976762fe154ea390d69e518eec1531
2013-01-31 15:19:11 +00:00
Ben Gras
e3e5cf6d34 arm: make signal handlers work
A few kernel and calling convention adjustments to make sigsend and
sigreturn work for arm.

	. provide a arch_proc_setcontext for earm in kernel
	. set LR in context of signal handler to provide a proper
	  return address (to __sigreturn)
	. change __sigreturn to retrieve the sigcontext pointer
	  from the sigframe struct and pass it to _sigreturn() in r0

Change-Id: Icd135a70595382c79d11d8dd9876f6a6f1df41f8
2013-01-30 04:10:12 +00:00
Ben Gras
b6d285faba libc: add stat aliases
. add non-internal aliases for stat, lstat, fstat

Change-Id: I87e025b2bf073ff56a5742fc1dcf5badb2b7b321
2013-01-29 20:11:16 +00:00
Ben Gras
08cb986d3f vm: fix kernel-requested mappings for arm
. make vm tell kernel virtual locations of mappings
	. makes _minix_kerninfo feature work
	. fix for mappings being larger than what 1 pde can address
	  (e.g. devices memory requested on arm)
	. still requires a special case for devices memory for the
	  kernel, which has to switch to virtual addressing

Change-Id: I2e94090aa432346fa4da0edeba72f0b7406c2ad7
2013-01-29 17:57:04 +00:00
Kees Jongenburger
e641d42a37 gpio:Initial GPIO driver.(ARM)
Small GPIO driver that exports a few pins using a virtual file
system. Currently the two user leds and the user button are exported.

Change-Id: I001d017ae27cd17b635587873f7da981054da459
2013-01-28 15:51:20 +01:00
Antoine Leca
5139afee6b Import infocmp from NetBSD
Convert the content of the terminfo database into human-readable
form, the same as used by the tic(1) command already present.
2013-01-25 20:11:01 +01:00
Antoine Leca
1999c518b6 import tput from NetBSD
Posix tool to allow direct use of the terminfo database.
The clear script is adjusted accordingly.
The (MINIX-specific) clr equivalent is now gone.
2013-01-25 20:09:20 +01:00
Antoine Leca
fc1c7a3483 Mined: allow Ins to mark 2013-01-25 18:44:17 +01:00
Antoine Leca
eabd612b15 make: correct a typo of NetBSD source 2013-01-25 18:44:17 +01:00
Antoine Leca
40b67629c5 Replace tell_config with NetBSD osrelease.sh 2013-01-25 18:44:17 +01:00
Antoine Leca
da26ee9d09 Ramdisk: remove mtab, as now obsolete 2013-01-25 18:44:17 +01:00
Antoine Leca
b9cb8440d7 mkdep: restore NetBSD behaviour
Since MINIX has a working cc, do not introduce spurious differences
2013-01-25 18:42:58 +01:00
Antoine Leca
866355d930 GNU tools: improvements to fetching process
- Do not run the fetch.sh script every time
- Do not run the configure script with MKUPDATE=yes (build.sh -u)
- The fetched GNU source are hidden from `git status`
- With CLEANFETCHED=yes, `nbmake -C tools cleandir` will remove the
fetched GNU source and return the MINIX tree to its pristine state.
- Avoid (harmless) message when building in parallel, about find
running against an inexistant path

Notice that the GNU tools are "installed" on every run, even with
MKUPDATE=yes; this is a feature of the NetBSD build system, because
in case of changes in dependencies it is impossible to know them.
See commit 1.27 2004-06-12 of tools/Makefile.gnuhost in NetBSD's src/

The downloaded tarballs are not removed with CLEANFETCHED:
they are supposed to be unmodified, and the exact name is not known
to the Makefile's, since it is engraved in each fetch.sh script (and
we do not want to have the same information in several places.)
2013-01-25 18:42:58 +01:00
Thomas Veerman
06e2adbeaa VFS: fix select again
Change-Id: Ia5e26cdbfe38e3fb293dd57269a76b15c1fe236b
2013-01-25 17:42:36 +00:00
Thomas Veerman
cb87646dac ARM: run with 64 processes only for now 2013-01-25 17:07:02 +00:00
Thomas Veerman
df0c35f0f5 Kernel/ARM: faster context save 2013-01-25 17:07:02 +00:00
Thomas Veerman
fb4b3da7da Kernel/ARM: use modern srsdb invocation 2013-01-25 17:07:02 +00:00
Thomas Veerman
fe892c5e66 libcsu: store argc and argv on the stack 2013-01-25 17:07:02 +00:00
Thomas Veerman
31c6dc292d Ramdisk: fix ramdisk creation for ARM 2013-01-25 17:07:02 +00:00
Thomas Veerman
a5f7ba46f5 Also build and install log for ARM 2013-01-25 17:07:02 +00:00
Thomas Veerman
fe45ee7ed0 ARM: disable __minix_init for now
On ARM we can't yet globally map pages into every process. So now that
we correctly receive the pointer to the globally mapped kern_info
struct, we have to ignore it on ARM because attempting to dereference
the pointer yields a segfault.
2013-01-25 17:07:02 +00:00
Thomas Veerman
e52ecfbf5d ARM: correctly store kernel_info_struct pointer 2013-01-25 17:07:02 +00:00
Thomas Veerman
b3250450fe VM: ARM needs more spare pages 2013-01-25 17:07:02 +00:00
Thomas Veerman
dad3b4e8c8 ARM: Provide linker script for VM 2013-01-25 17:07:01 +00:00
Thomas Veerman
264c20159d Split libsys in arch dependent parts
The ARM part is not finished yet and will be fixed in a later commit.
2013-01-25 17:07:01 +00:00
Thomas Veerman
1a60a84cb7 ARM: clear BSS upon boot 2013-01-25 17:07:01 +00:00
Thomas Veerman
c96cd5e1a0 ARM: provide means to pass boot cmdline 2013-01-25 17:07:01 +00:00
Thomas Veerman
0968a93748 PFS: verify nrbytes 2013-01-25 17:03:06 +00:00
Ben Gras
042ecb4231 tests: print error locations verbosely
So we don't have to figure out which line generated this error by
searching for the subtest/error code combination.

Change-Id: Icca0a776fd19f0f3d250ddb76916f5f932dd9b5e
2013-01-25 11:54:24 +00:00
Ben Gras
8ebdbed79c getifaddrs: add un-namespaced alias
. needed for security/heimdal, needed for git

Change-Id: I8638945dffd0abffd487c47281ad7616da1b70db
2013-01-24 21:57:15 +00:00
3e1db26a5a Termcap update, replacing elvis by nvi.
Removing elvis, importing nvi, ctags, updating libedit.

Change-Id: I881eb04d2dc64cf112facd992de1114e1a59107f
2013-01-24 07:44:38 +01:00
f9f6c9251a Re-adding extended keys in minix termcap entry 2013-01-23 21:28:17 +01:00
96836647f8 Fixing cross build i386 on minix 2013-01-23 21:03:38 +01:00
Kees Jongenburger
bdcbfa90ca build:fixes Files in DESTDIR but missing from flist.
* virtio

Change-Id: I0c3262cb346692b6caaed0b80ffc1e725dbc0c66
2013-01-23 12:48:21 +01:00
Kees Jongenburger
a348d0ed4f build:fixes Files in DESTDIR but missing from flist.
Change-Id: I9bf6de1697d1173898de2eda03f042f316427007
2013-01-23 11:26:46 +01:00
Thomas Veerman
b180f32ab3 VFS/PFS: remove remnants of file position in pipes 2013-01-23 11:14:34 +00:00
Thomas Veerman
306f3ccd6f VFS: fix select bug on pipes 2013-01-23 11:14:34 +00:00
Thomas Veerman
28b81f9c3b ramdisk: traditional-cpp does not work with clang 2013-01-23 11:14:33 +00:00
Kees Jongenburger
65fdb4cffe build:fixes Files in DESTDIR but missing from flist.
Change-Id: Idb3d53a22bee6731fb22f435bf672a0ff180b863
2013-01-23 11:12:49 +01:00
Joachim Henke
eddc5dd581 ramdisk: add virtio-blk to proto and boot option 2013-01-23 09:03:03 +00:00
Arne Welzel
d19844d69c virtio: virtio-net driver 2013-01-23 09:03:03 +00:00
Arne Welzel
a27b60af75 virtio: virtio-blk driver 2013-01-23 09:03:03 +00:00
Joachim Henke
ac11e38fd5 pci: add virtio pci device ids 2013-01-23 09:03:03 +00:00
Arne Welzel
a58c735738 virtio: generic virtio library 2013-01-23 09:03:03 +00:00
Ben Gras
dcff984d6a kernel: fix sanity check 2013-01-18 21:38:28 +00:00
Ben Gras
4c6c911fdc Replace previous change by different test
. so contents always get overwritten in out-of-tree case
2013-01-17 16:05:50 +00:00
f0a513440d drivers/ramdisk/Makefile fixup
Change-Id: I481830f19b650ff0d93bf319ca4d8e901657b8f8
2013-01-17 15:54:48 +01:00
Nicholas Heath
1bbba6353d Fixed bug in getrlimit as core dumps are supported now. 2013-01-17 14:06:35 +00:00
b1c4ba4ab6 ARM updates
Due to the ABI we are using we have to use the earm architecture
moniker for the build system to behave correctly. This involves
then some headers to move around.

There is also a few related Makefile updates as well as minor
source code corrections.
2013-01-17 10:03:58 +01:00
b86af8be0b Toolchain adaptation for ARM MINIX support 2013-01-17 10:03:58 +01:00
13c63491af Reverting back to default value of MKARZERO
The value was changed to no for cross-building as the old binutils
could not handle the required flag. As this is now possible, the
default is restored.

This flags make sure that AR zeroes out some timestamps and uid/gid
fields in libraries, which would change for every build of the
library otherwise, preventing comparison between to builds.
2013-01-17 10:03:58 +01:00
ebae0113f8 Removing useless __NBSD_LIBC define in libcurses 2013-01-17 10:03:58 +01:00
Kees Jongenburger
86466eaa18 misc:Add gerrit code review support.
Add gerrit code review support by adding a git-review configuration
file.

Change-Id: I63c2d22b946c6b64c90be120983ce81df890f6aa
2013-01-16 09:44:16 +01:00
Ben Gras
1cd76c7513 sys/arch/x86/include updates
. primary purpose is to synchronize with <ieeefp.h> which
	  expects a fp_prec from sys/arch/x86/include/ieeefp.h
2013-01-15 12:14:01 +00:00
Ben Gras
287c0e3b92 csu: restore crt1.o symlink
. minix gcc package uses crt1.o to link
2013-01-15 09:20:27 +00:00
Ben Gras
c096911b97 sprofalyze fixes
. accumulate sprof_info
	. reset 'seen' endpoints for every file to keep in sync with kernel
	  profile stream
2013-01-15 08:23:19 +00:00
Ben Gras
e9a6abd046 tar: use utime() to restore timestamps
. otherwise all extracted files get 'now'
2013-01-15 07:28:58 +00:00
22aad3f26b UPDATING instructions for libc/terminfo update 2013-01-14 13:20:00 +01:00
0ac803292e Fix warnings trivial warnings.
Fix warnings about:
 . Unused variables
 . format mismatch in printf/scanf format string and arguments
 . Missing parenthesis around assignment as truth values
 . Clang warnings anout unknown GCC pragma
2013-01-14 11:44:31 +01:00
77399bd649 Changing field utmp.ut_time from int to time_t
This makes sure the types are coherent, and right now, time_t is
defined as an long, through _BSD_TIME_T_. It previously was
hardcoded as an int, so the structure's size does not change.

Change-Id: If29e94ab53f605d1480fadb540f5b67be4ddaf5b
2013-01-14 11:36:27 +01:00
44bedb31d8 Importing common/dist/zlib
Change-Id: I46de716a98ccc501ca32b2a9445d9964594ddc61
2013-01-14 11:36:27 +01:00
f5435c74b7 Updating lib/libcrypt
Change-Id: I4dc5ca7c86abc5295ffc57386a14dd1d790fd489
2013-01-14 11:36:27 +01:00
e8235bc09a Updating usr.bin/passwd
Change-Id: I5512cd44cb9f1684350050d4e3fb5bb4d1c9b6b1
2013-01-14 11:36:27 +01:00
2bc7c627ac Updating usr.bin/make
Change-Id: I66b137a0368cf99267cd47a9625da8a12d8a1df7
2013-01-14 11:36:27 +01:00
71c7dcb9ce Updating usr.bin/m4
Change-Id: I6edfb294639490da27f6abd132822b901de0d650
2013-01-14 11:36:26 +01:00
927829ed36 nbsd_ports cleanups
Change-Id: Ib538a7b12a46a5052fb37e4ba74c32ebc43dbf64
2013-01-14 11:36:26 +01:00
22e69f558e Cleaning usage of MAJOR/MINOR
Change-Id: I4d7718c51967930375a5f0657b61f869745cf644
2013-01-14 11:36:26 +01:00
0c3ae37f52 Updating libcurses, libterminfo and terminfo.
The three are updated together as they are tightly coupled.

Change-Id: I9e1f07b6adc6e8ae10833e6f1402f8472d2d34b8
2013-01-14 11:36:26 +01:00
f14fb60209 Libraries updates and cleanup
* Updating common/lib
 * Updating lib/csu
 * Updating lib/libc
 * Updating libexec/ld.elf_so
 * Corrected test on __minix in featuretest to actually follow the
   meaning of the comment.
 * Cleaned up _REENTRANT-related defintions.
 * Disabled -D_REENTRANT for libfetch
 * Removing some unneeded __NBSD_LIBC defines and tests

Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
2013-01-14 11:36:26 +01:00
f6aac1c3b5 Moving all NetBSD headers back where they belong.
Moving include/sys NetBSD headers to /sys/sys
Moving include/arch/*/ NetBSD headers to /sys/arch/*/include

Change-Id: Ia1a45d4e83ab806c84093ec2b61bdbea9bed65a0
2013-01-14 11:36:25 +01:00
be89757ef5 common upgrades
Change-Id: I567fc15845b601019d346569ecfcef4f89687fd2
2013-01-14 11:36:25 +01:00
Kees Jongenburger
65c5a092c1 ramdisk:add support for cross building a dso ramdisk.
Change-Id: Ib2840bceab10cf98cb0abfbdb2393af4d59be102
2013-01-13 17:00:13 +01:00
Kees Jongenburger
aacce8f40c ramdisk:replace proto.sh by the c processor.
Replace proto.sh by the c processor to generate proto.gen in order
for us to have a more flexible way of selecting the files we want
in the ramdisk.

Change-Id: Id82b9f1b73b498c4d885bb3156fcefaeb9d157e0
2013-01-13 17:00:13 +01:00
Thomas Veerman
bdfef53dbf VFS: initialize variables 2013-01-11 12:46:44 +00:00
Thomas Veerman
aa521228a5 VFS: Coverity appeasements 2013-01-11 09:42:01 +00:00
Thomas Veerman
c77228c77b ARM: fix clock
The GPTIMER1 clock is configured to run at 32 kHz and generate
(overflow) interrupts every 1 ms. However, the Timer Overflow Wrappping
Register (TOWR) was configured to filter every other interrupt. This
caused to the internal 'realtime' value to be off.
2013-01-11 09:18:36 +00:00
Thomas Veerman
aa3623d873 ARM: make cycle counter available to userspace 2013-01-11 09:18:36 +00:00
Thomas Veerman
ea8ff9284a Add stack trace dumps for VFS over serial 2013-01-11 09:18:36 +00:00
Thomas Veerman
625f4ae4a3 VFS: add documentation about internal working 2013-01-11 09:18:36 +00:00
Thomas Veerman
23c5f56e32 VFS: change locking to ease concurrent FSes
This patch uses stricter locking for REQ_LINK, REQ_MKDIR, REQ_MKNOD,
REQ_RENAME, REQ_RMDIR, REQ_SLINK and REQ_UNLINK. For all requests, VFS
locks the directory in which we add or remove an inode with VNODE_WRITE.
I.e., the operations have exclusive access to that directory.

Furthermore, REQ_CHOWN, REQ_CHMOD, and REQ_FTRUNC now lock the vmnt
VMNT_READ; VMNT_WRITE was unnecessary.
2013-01-11 09:18:35 +00:00
Thomas Veerman
93103f497f libmthread: add possibility to randomize scheduler 2013-01-11 09:18:35 +00:00
Thomas Veerman
3de8d1cf6e VFS/PFS: remove notion of position in pipes
Because pipes have no file position. VFS maintained (file) offsets into a
buffer internal to PFS and stored them in vnodes for simplicity, mixing
the responsibilities of filp and vnode objects.

With this patch PFS ignores the position field in REQ_READ and REQ_WRITE
requests making VFS' job a lot simpler.
2013-01-11 09:18:35 +00:00
Thomas Veerman
7c8b3ddfed VFS: fix locking bugs
.sync and fsync used unnecessarily restrictive locking type
.fsync violated locking order by obtaining a vmnt lock after a filp lock
.fsync contained a TOCTOU bug
.new_node violated locking rules (didn't upgrade lock upon file creation)
.do_pipe used unnecessarily restrictive locking type
.always lock pipes exclusively; even a read operation might require to do
 a write on a vnode object (update pipe size)
.when opening a file with O_TRUNC, upgrade vnode lock when truncating
.utime used unnecessarily restrictive locking type
.path parsing:
  .always acquire VMNT_WRITE or VMNT_EXCL on vmnt and downgrade to
   VMNT_READ if that was what was actually requested. This prevents the
   following deadlock scenario:
   thread A:
     lock_vmnt(vmp, TLL_READSER);
     lock_vnode(vp, TLL_READSER);
     upgrade_vmnt_lock(vmp, TLL_WRITE);

   thread B:
     lock_vmnt(vmp, TLL_READ);
     lock_vnode(vp, TLL_READSER);

   thread A will be stuck in upgrade_vmnt_lock and thread B is stuck in
   lock_vnode. This happens when, for example, thread A tries create a
   new node (open.c:new_node) and thread B tries to do eat_path to
   change dir (stadir.c:do_chdir). When the path is being resolved, a
   vnode is always locked with VNODE_OPCL (TLL_READSER) and then
   downgraded to VNODE_READ if read-only is actually requested. Thread
   A locks the vmnt with VMNT_WRITE (TLL_READSER) which still allows
   VMNT_READ locks. Thread B can't acquire a lock on the vnode because
   thread A has it; Thread A can't upgrade its vmnt lock to VMNT_WRITE
   (TLL_WRITE) because thread B has a VMNT_READ lock on it.

   By serializing vmnt locks during path parsing, thread B can only
   acquire a lock on vmp when thread A has completely finished its
   operation.
2013-01-11 09:18:35 +00:00
Ben Gras
ecf9b40841 vm: fix region reporting bug
. logic was backwards, causing no reporting ever
	. this broke coredumps ('Warning: Program has too many regions')
2013-01-09 19:50:52 +00:00
Ben Gras
a5f09d5196 service: nonfatally ignore unknown call keywords
. makes switching between revisions with new system.conf
	  keywords less risky
2013-01-08 18:54:04 +00:00
Ben Gras
4c3a751f9b release.sh: restore -jJAILDIR option
. also make copying a bit more informative and succinct
2013-01-08 18:50:32 +00:00
Antoine Leca
ffdb12bc9b Drop obsolete klib16.S
The 16-bit poweroff16() function is not called any more.
2013-01-08 16:00:37 +00:00
Antoine Leca
715aecd7e8 gzip: fix warning messages with off_t
NetBSD assumes off_t is 64-bit, but on MINIX it is still 32-bit.
So cast the calls to use big_off_t, as stat(2) uses.
Only used in warning messages, was not a real production bug.
2013-01-08 15:59:10 +00:00
Ben Gras
017ce5a503 libc, libutil: remove compat hacks 2013-01-08 15:47:37 +00:00
Ben Gras
604046faf3 kernel: trap-dependent state restore, trace fixes
. restore state depends on how saving of state was done;
	  also remember trap style in sig context
	. actually set and restore TRACEBIT with new trap styles;
	  have to remove it once process enters kernel though, done
	  in debug trap exception handler
	. introduce MF_STEP that makes arch-specific code
	  turn on trace bit instead of setting TRACEBIT directly,
	  a bit more arch-friendly and avoids keeping precious
	  state in per-process PSW arch-dependently
2013-01-08 15:47:37 +00:00
Ben Gras
b258ab0e66 vm: restore stacktrace on SIGSEGV 2013-01-08 15:47:37 +00:00
Ben Gras
51a3e84a97 kernel: separate state for trace-deferred syscalls
state is usually not in p_reg any more with sysenter/syscall trap entries,
so when saving/restarting do_ipc invocations the state has to be remembered
explicitly.
2013-01-08 15:47:37 +00:00
Ben Gras
7f1018b145 kernel: restore setting KTS_NONE
The 'trap style' variable records how a process has trapped into the
kernel (hardware/software interrupt, or one of the other trap
instructions). KTS_NONE indicates the process isn't trapped into the
kernel at all and is useful for sanity checking. The KTS_NONE reset was
inadvertently removed while removing some debugging code and this commit
restores it.
2013-01-08 15:47:37 +00:00
Kees Jongenburger
75c515e5f8 kernel:add a some information in backtraces.
* Display the pid and process name in the backtrace as we can
currently not read stackframes.

Change-Id: I2435d4098553c5b02adfe36f08b5aa3f47e9b531
2013-01-08 13:40:32 +01:00
Kees Jongenburger
09895f86fc vm:enable the instruction and data caches.
Enable the instruction and data caches. Whether data is cached
will depend on the MMU entries.

Change-Id: I51e9ebc38924db5525d4e7ad9ab69b2a5b1ca7b4
2013-01-08 13:40:32 +01:00
Kees Jongenburger
5e3b51ba96 test:update tests to fix compiler warnings.
Change-Id: Id2c757f61fe5e8b52dffadfeb129024625c76f48
2013-01-08 10:39:53 +01:00
Ben Gras
9ee8c2c75f kernel: restore stacktraces
When processes have entered the kernel with one of the new
trap modes, %ebp is not valid, used for stacktraces, so we
need an alternative way to retrieve it to make the stacktraces
valid again.
2013-01-07 20:18:48 +00:00
Kees Jongenburger
c0c581a635 vfs:fix for variable 'rfp' set but not used.
mount.c: In function 'mount_pfs':
mount.c:395:17: error: variable 'rfp' set but not used [-Werror=unused-but-set-variable]

Change-Id: I2f22590ab4e3a4a1678e9096626ebca53d2660e6
2013-01-07 09:12:27 +01:00
Kees Jongenburger
fce5ff6513 vm: Fix sparepage resource leak.
Fix a sparepage resource leak by preventing to call
vm_getsparepage twice.

Change-Id: I06557d47b90a7cca74e0a86921c2579f9618685d
2013-01-07 09:12:09 +01:00
Ben Gras
f26ce0ba44 unstack - fix ipcvecs 2013-01-04 16:17:07 +00:00
Ben Gras
73d95c770f unstack: add shared libraries symbols 2013-01-04 09:46:12 +00:00
Ben Gras
d36ce68582 libexec exec fix
. restores executing shell scripts without explicit interpreter
2012-12-29 01:41:24 +00:00
Ben Gras
0c1b8ba3c3 include: reduce default stack size 2012-12-29 00:56:52 +00:00
Ben Gras
125fc7a918 kernel: vm kernel call can't suspend 2012-12-29 00:56:46 +00:00
Ben Gras
59ff758441 kernel debug: priv can be NULL early on 2012-12-29 00:56:42 +00:00
Ben Gras
29edcad310 vm: replace phys avl by array
. make vm be able to use malloc() by overriding brk()
   and minix_mmap() functions
 . phys regions can then be malloc()ed and free()d instead
   of being in an avl tree, which is slightly faster
 . 'offset' field in phys_region can go too (offset is implied
   by position in array) but leads to bigger code changes
2012-12-26 16:14:41 +00:00
cee2d9a296 Removing warning about OSNAME.
Change-Id: I224105bee39ea24ecee031832dd4a059ddf2112a
2012-12-11 17:29:54 +01:00
2dc480bd58 Shell tests now complain more loudly.
Adding the bomb function which takes as a parameter a string
to be printed, print it, cleans up and exits with an error
code. It also means they will exit after the first error, unlike
previous behaviour.

Change-Id: Id0ffdf3938da43586c9dae7c566ee130533c5577
2012-12-11 16:59:54 +01:00
Ben Gras
8aeac26999 vfs: fix clobbering fd_nr
dumpcore: fd_nr can be in use as blocking fd but will then be clobbered
by common_open, causing disaster for exiting unpause().
2012-12-11 12:00:57 +01:00
Ben Gras
faa032f15c pax: workaround for mkstemp() and long filenames
. symptom: mkstemp() looping forever trying to find a unique
	  filename
	. reported by pikpik as "BSDTar Endless Extraction of
	  NCurses' Distfiles"
2012-12-11 12:00:37 +01:00
Ben Gras
e286ccc05b sort: add -x hex sort feature back
. so unstack works again
2012-12-11 11:59:44 +01:00
Kees Jongenburger
f44fb1784b Make test3 fail on the first error.
test3 performs tests for null pointers but after that still continues
and uses them.  This results in segfault's. Fixing this issue by failing
on the first error.
2012-12-11 10:13:15 +01:00
Kees Jongenburger
d8e600db17 Allow tests to fail on the first encountered error.
Pre increment errct in test to be able to fail on the first error.
2012-12-11 10:13:15 +01:00
Ben Gras
53f1f3e4a8 deduplicate some installed files
. zcat link
	. old install manpage
2012-12-10 16:52:33 +01:00
Ben Gras
59ba14bb1d libutil: add O_NOCTTY back to old pty open code
restores fix 4f78dfcabc

	. fixes e.g. ssh sessions not getting their own
	  controlling tty
2012-12-10 15:22:12 +01:00
Thomas Veerman
11184894e2 testsh?.sh: fix sort(1) invocations
Newly imported sort(1) works slightly differently. In fact, the old
sort(1) had a bug and the tests invoked sort(1) the wrong way.
2012-12-07 15:44:28 +00:00
Thomas Veerman
1915403ff6 docs/UPDATING: some tools have been added/upgraded 2012-12-07 14:24:25 +00:00
8e5df35e84 Importing NetBSD tsort
Change-Id: I110de8037b9253f4fe53cbe13dc8fc281aeea2ec
2012-12-07 13:58:07 +01:00
6e0ed9c90c Replacing join with NetBSD join
Change-Id: I1257736f755eab0ce39124f0d78bfa48426ba820
2012-12-07 13:58:07 +01:00
c75851fccb Importing nbperf
Change-Id: I87eb5bd3d0596370ade272f22c6df739d0483006
2012-12-07 13:58:07 +01:00
d71cc7b9f6 Importing lorder
Change-Id: I0043c56a40a69ea809c909285c06de0273bada9f
2012-12-07 13:58:07 +01:00
0fbbaa43e9 Upgrading sort, which is needed by lorder
Change-Id: I64ac0509f4360c947a677600db77e7612a7cbebd
2012-12-07 13:58:07 +01:00
a7ab29bf57 genassym.sh update
Change-Id: Ibacd47683f7a668eb1dd717014f904581ecebccb
2012-12-07 13:58:06 +01:00
456a46e6bf Removing useless minix/types.h header
Change-Id: If5f922279b87f075f301b64c7786caa18b434c2a
2012-12-07 13:58:06 +01:00
95d6c86c51 Removing COMPILER_TYPE define which is now unused.
Change-Id: I0332b53e5de6bb2b85759325559c89c02b437e41
2012-12-07 13:58:06 +01:00
100babf0e0 Removing last reference to NETBSDINCLUDES
Also removing minix-config.inc and placing its content in
Makefile.inc, as the file is modified anyway. Simplifies diff.

Change-Id: I6262fdb790a5455b59e07acdccdc221fd5dd41f8
2012-12-07 13:58:06 +01:00
73817adec0 Ensure correct NetBSD sources checkout
Previously, under some circumstances, the make command could
yield netbsdsrc in other directories than the source directory,
as expected.

This patch fixes this behaviour, by first changing to the expected
directory, and only at the end going back to the original directory.
2012-12-07 13:58:06 +01:00
7faf801d1f fixing warning about uninitialized variable in libsys/vprintf.c
Change-Id: I8764a57b502edc3d50a32b3e2db56c4f94592309
2012-12-07 13:58:06 +01:00
a83e3a14fe Fixing warning about incorrect test in some build environment
Change-Id: I17c69e96b4278fb39a95c7b0554c779c4d1f637c
2012-12-07 13:58:05 +01:00
David van Moolenbroek
ec10840b9e gitignore: ignore some more generated files 2012-12-06 13:29:20 +00:00
David van Moolenbroek
f4737c94ee vbfs: add DS to system.conf IPC list 2012-12-06 13:27:26 +00:00
David van Moolenbroek
3027cf8694 RS: do not zero process name for boot processes
This bug was preventing services with IPC restrictions from being
started before the boot processes are edited from /etc/rc.
2012-12-06 13:24:30 +00:00
David van Moolenbroek
766047123a VFS: fix off-by-one in get_name() 2012-11-30 12:24:47 +00:00
David van Moolenbroek
130b082121 Fix buffer overflows in df(1), format(1) 2012-11-30 10:54:40 +00:00
Thomas Veerman
179261a9b6 mtab: support moving mount points
Also fix canonical_path function; it fails to parse some paths
2012-11-29 10:50:51 +00:00
9f7fb97000 Adding missing symlink to dynamic loader.
As the release script does not copy over files from the currently
running system anymore, it has appeared that some binaries are
looking for the dynamic loader in /lib instead of /usr/lib.

It has been replaced by a symlink to ensure compatibility with
binaries, until the path is updated in all the toolchains to be
the same.
2012-11-28 17:35:56 +01:00
3ba3608c5f Simplifying release.sh script.
As the build system can now generate a full root file system,
there is no need to bootstrap the iso image by copying over
files from the currently system.

The SVN references have also been mostly taken out, as they are
not anymore valid. Some cleanup have been done to try to improve
the readability of the script.
2012-11-28 17:35:55 +01:00
Thomas Veerman
b73a0e570b docs/UPDATING: create mtab symlink 2012-11-27 17:36:53 +00:00
Thomas Veerman
c65ac3136e test65: simply skip if ntfs binaries are not present 2012-11-27 10:19:26 +00:00
9584051449 Adapting build target to also execute hdboot.
The 'hdboot' target was setup as a dependency of 'distribution'
instead of 'build' as it previously was for the now deprecated world
target.

Change-Id: Icd10f3bd92df38e411600923e7f62e6075eb3008
2012-11-26 23:42:32 +01:00
Thomas Veerman
ac7451d11b mkfs.mfs: __dead and __UNCONST are unknown on Linux
Including nbtool_config.h takes care of that deficiency when cross
compiling.
2012-11-26 16:18:32 +00:00
Thomas Veerman
c248e23d93 Remove obsolete sum 2012-11-26 15:20:18 +00:00
Thomas Veerman
d9f4f71916 Implement dynamic mtab support
With this patch /etc/mtab becomes obsolete.
2012-11-26 15:20:18 +00:00
Thomas Veerman
de83b2a9d9 VFS: change 'last_dir' to match locking assumption
new_node makes the assumption that when it does last_dir on a path, a
successive advance would not yield a lock on a vmnt, because last_dir
already locked the vmnt. This is true except when last_dir resolves
to a directory on the parent vmnt of the file that was the result of
advance. For example,
 # cd /
 # echo foo > home
where home is on a different (sub) partition than / is (default
install). last_dir would resolve to / and advance would resolve to
/home.

With this change, last_dir resolves to the root node on the /home
partition, making the assumption valid again.
2012-11-26 15:20:18 +00:00
Thomas Veerman
d67db9b39c Add NTFS test to test suite 2012-11-26 15:20:18 +00:00
9903b9fb96 Fixing wrong dependency from libc on libsys. 2012-11-26 13:53:02 +01:00
b0814fec4e Fix release.sh to work with NetBSD Build system.
Also fix a potential issue where host tools would be compiled
dynamically under MINIX.

This also updates proto.common.dynamic to use the new placement
of the dynamic libraries (/usr/lib)
2012-11-26 10:46:19 +01:00
Ben Gras
bcbee7d9e1 RS: fix for fix 2012-11-22 16:25:07 +01:00
Erik van der Kouwe
57c748b968 Remove ability to pass commands to bootloader 2012-11-22 19:16:17 +01:00
4a711bea63 Upgrading bzip2
Change-Id: I6968b0f0401f3f42dc55a0f4938a7e12a3a55ae7
2012-11-21 18:32:06 +01:00
Erik van der Kouwe
22fa466268 Restore poweroff to some of it's former glory (on QEMU, at least) 2012-11-21 20:28:37 +01:00
0181ec6beb etcforce and etcfiles fixup
The way etcfiles was re-implemented was wrong as it would overwrite the
password database. This patch adds back a proper etcfiles (safe) target,
and a etcforce (unsafe) target.

Change-Id: I141c37b29a449fca1ee362b7416750be0298dbfb
2012-11-19 16:44:38 +01:00
420b1799d9 Fix wrong access permission on /tmp and /usr/tmp
With the build system upgrade, the list of system directories was
recreated, and the sticky bit was forgotten.

Change-Id: Ie2f2241734dde9f1e217cd38588296dc21d07b81
2012-11-19 16:44:38 +01:00
ad85a577a6 Do not overwrite vi and ex links by default
Revert (and document) to the old behaviour of the elvis Makefile.

Change-Id: I800dba23f5c35d4c1676974962806dd824659539
2012-11-19 16:44:38 +01:00
0e33224aa2 Fixup for non-fatal mkisofs error.
The corresponding rules have been commented out through .ifdef blocks.

Change-Id: I36afb75f049b39806ede1f7dd6950710826b3555
2012-11-19 16:44:38 +01:00
Ben Gras
6e535c3aaf kernel: kill proc with bogus ipc address 2012-11-19 10:53:17 +01:00
Thomas Veerman
05fddc7d36 Make build system less verbose 2012-11-19 09:25:03 +00:00
Ben Gras
15e5aba748 tests: link dynamically again 2012-11-16 20:20:55 +01:00
Ben Gras
a89ec8bc3b can't get_block(NO_DEV) any more
. 'anonymous' cache blocks (retrieved with NO_DEV as dev
	  parameter) were used to implement read()s from holes in
	  inodes that should return zeroes
	. this is an awkward special case in the cache code though
	  and there's a more direct way to implement the same functionality:
	  instead of copying from a new, anonymous, zero block, to
	  the user target buffer, simply sys_safememset the user target
	  buffer directly. as this was the only use of this feature,
	  this is all that's needed to simplify the cache code a little.
2012-11-16 16:37:44 +01:00
Ben Gras
2d43bf5807 RS: invoke a shell explicitly for scripts
. don't rely on the scripts to be executable
	  (and they aren't any more)
2012-11-16 16:34:14 +01:00
Ben Gras
d27f8afc45 iso9660fs: initialize buffer cache 2012-11-16 11:09:03 +00:00
Tomas Hruby
10f30159a9 struct minix_ipcvecs - pretty-print
- the _ptr suffix is not needed anymore :-)
2012-11-15 16:52:00 +01:00
Tomas Hruby
dedb53fb10 ipc.h - IPC defined as functions again
- CHOOSETRAP define makes impossible to use some common words
  like send, receive and notify in any other context, for
  instance as members or structures

- any reasonable compiler inlines the static inline functions so
  no extra function call overhead is introduced by this change

- this gets us back to the situation before the SYSCALL/SYSENTER
  change. It is not perfect, but it used to work and still does.
2012-11-15 16:51:59 +01:00
54624a62f1 Adding the required steps to docs/UPDATING
Change-Id: If0cbfd473374cfbc0c174ae5ccd52668adbcfcf7
2012-11-15 16:15:31 +01:00
53da2c9940 Adding back the world target, as well as a warning.
The 'world' target is a legacy target from the previous build system,
it is equivalent to the 'build' target in the netbsd build system.

A warning has been added to stop using it, but it still works as
expected.

Change-Id: I704a5c43d9775b6d66c15a43ba927ddb515aab80
2012-11-15 16:12:45 +01:00
2f5c1ee87d Restablishing old behaviour of make hdboot
Change-Id: Idfa4dabbbbdbab31feedc2c541d0c989df5475a2
2012-11-15 16:12:45 +01:00
a020815b8b Detect clang version, instead of assuming default one
Change-Id: I559fe4251169f489d89e30b3576f8da08fb0941b
2012-11-15 16:12:45 +01:00
8335a475fc Updating nbsd_port
Change-Id: I8c2cdbe150b5bced8f013fb0a2e4094f4527a950
2012-11-15 16:07:30 +01:00
Lionel Sambuc
b8a678ef1d Cross compile on minix support
* Remade patch so it works with minix patch tool.

 * New MINIX tar support -ox, so revert back to it

   In fetch scripts, tar had been replaced by bsdtar as the prebvious
   tar did not support the -o flag under minix, which is required to
   prevent usage of tar file stored user and group information.

   This introduces portability problems. As our new tar tool now
   support that flag revert back to improve portability.
2012-11-15 16:07:30 +01:00
6227378147 Update README and file 2012-11-15 16:07:30 +01:00
6ee158d26a ignoring mkubootimage 2012-11-15 16:07:30 +01:00
Lionel Sambuc
b84b829e35 Removing binaries from sources.
Removing imported binaries in dist/bzip2.
2012-11-15 16:07:30 +01:00
c7c2299cbe Removing hacky defines from top.c 2012-11-15 16:07:30 +01:00
cd554e7284 Hack for unresolved symbol read_tsc_64 2012-11-15 16:07:30 +01:00
7d73223f08 Removing test on __MINIX_w which is never defined 2012-11-15 16:07:30 +01:00
d19d7d58aa Toolchain upgrade and portability improvements.
upgrade to NetBSD CVS release from 2012/10/17 12:00:00 UTC

Makefiles updates to imporve portability

Made sure to be consistent in the usage of braces/parenthesis at
least on a per file basis. For variables, it is recommended to
continue to use braces.
2012-11-15 16:07:29 +01:00
9152e1c5a7 Upgrading build system to new NetBSD revision
The tested targets are the followgin ones:
 * tools
 * distribution
 * sets
 * release

The remaining NetBSD targets have not been disabled nor tested
*at all*. Try them at your own risk, they may reboot the earth.

For all compliant Makefiles, objects and generated files are put in
MAKEOBJDIR, which means you can now keep objects between two branch
switching. Same for DESTDIR, please refer to build.sh options.

Regarding new or modifications of Makefiles a few things:
 * Read share/mk/bsd.README
 * If you add a subdirectory, add a Makefile in it, and have it called
   by the parent through the SUBDIR variable.
 * Do not add arbitrary inclusion which crosses to another branch of
   the hierarchy; If you can't do without it, put a comment on why.
   If possible, do not use inclusion at all.
 * Use as much as possible the infrastructure, it is here to make
   life easier, do not fight it.

Sets and package are now used to track files.
We have one set called "minix", composed of one package called "minix-sys"
2012-11-15 16:07:29 +01:00
bdb3f57135 Adding shlib_version for libsys 2012-11-15 16:07:29 +01:00
e415d48872 Libc update to simplify merge.
Bumping libc files for unsupported architectures, to simplify merging.
A bunch of small fixes:
 * in libutil update
 * the macro in endian.h
 * some undefined types due to clear separation from host.
 * Fix a warning for cdbr.c

Some modification which were required for the new build system:
 * inclusion path for const.h in sconst, still hacky
 * Removed default malloc.c which conflicts on some occasions.
2012-11-15 16:07:29 +01:00
dba3562d78 Updating libutil from netbsd 2012-11-15 16:07:29 +01:00
e1c1f5bfd9 Replaced tar with bsdtar to ensure disponibility of -o, which is
needed during builds as root
2012-11-15 16:07:29 +01:00
David van Moolenbroek
7dd286e6b8 VFS: do not save device node for new regular files
The VFS/FS protocol does not require the file server to supply a
special device node number in response to a REQ_CREATE request, as
this call creates only regular files. Therefore, VFS should not
erroneously save this piece of information from the REQ_CREATE reply
either.
2012-11-15 14:29:59 +00:00
Thomas Veerman
2773b5efb7 Use proper uid when mounting NTFS partition 2012-11-14 13:42:13 +00:00
Thomas Veerman
14e470be81 VFS: fix TOCTOU bug in sync 2012-11-14 13:24:53 +00:00
Thomas Veerman
ed23a7a7d2 VFS: fix reboot panic with mounted FUSE FS
Upon reboot VFS semi-exits all processes and unmounts the file system.
However, upon unmount, exiting FUSE file systems might need service from
the file system (due to libc). As the FUSE process is halfway the exit
procedure, it doesn't have a valid root directory and working directory.
Trying to do system calls then triggers a sanity check in VFS.

This fix first exits normal processes which should then allow for
unmounting FUSE file systems. Then VFS exits all processes including
File Servers and unmounts the rest of the file system.
2012-11-14 13:18:16 +00:00
Thomas Veerman
badec36b33 VFS: fix deadlock when out of worker threads
There is a deadlock vulnerability when there are no worker threads
available and all of them blocked on a worker thread that's waiting for a
reply from a driver or a reply from an FS that needs to make a back call. In
these cases the deadlock resolver thread should kick in, but didn't in all
cases. Moreover, POSIX calls from File Servers weren't handled properly
anymore, which also could lead to deadlocks.
2012-11-14 13:12:37 +00:00
Ben Gras
6cf98dbe00 vm: reduce noise in merged pagetable.c 2012-11-09 19:00:46 +01:00
Ben Gras
3771a0833d vm: merge i386 and arm pagetable code 2012-11-09 18:46:03 +01:00
Ben Gras
b1da7fafd0 vm: fix a null dereference on out-of-memory
. also make other out-of-memory conditions less fatal
	. add a test case for a user program using all the memory
	  it can
	. remove some diagnostic prints for situations that are normal
	  when running out of memory so running the test isn't noisy
2012-11-09 18:36:51 +01:00
David van Moolenbroek
ff84d11216 PM: do not panic if sys_sigsend returns ENOMEM 2012-11-09 16:11:02 +00:00
Ben Gras
3e4db5ee55 remove extra mkfs.1 2012-11-08 12:36:38 +01:00
Ben Gras
ba05f39d1e kernel: some boottime sanitychecks
. Check if we have the right number of boot modules
	. Check if the ELF parsing of VM actually succeeded

Both these are root causes of less-than-obvious other
errors/asserts a little further down the line; uncovered
while experimenting with booting by iPXE, specifically
(a) iPXE having a 8-multiboot-modules limit and
(b) trying to boot a gzipped VM.
2012-11-08 11:40:35 +01:00
Ben Gras
77b6e2dcaa mkfs: support indirect blocks in directories 2012-11-07 23:16:42 +01:00
Ben Gras
6463554619 mkfs: move directory entry manipulation 2012-11-07 23:16:41 +01:00
Ben Gras
960c93c6f7 mkfs: drop support for zone != block 2012-11-07 23:16:40 +01:00
Ben Gras
9d9a90c118 mkfs: drop support for running on DOS 2012-11-07 23:16:39 +01:00
Ben Gras
ca2255201b mkfs: separate inode retrieval function 2012-11-07 23:16:38 +01:00
Ben Gras
ba468a6052 mkfs: drop support for creating non-v3 FSes 2012-11-07 23:16:37 +01:00
Ben Gras
253b6e965c mkfs: symlink support
. mkproto too
2012-11-07 23:16:18 +01:00
Ben Gras
cf6fa5ad92 mkfs, mkproto: minor improvements
. mkfs: -x feature for extra space
	. rename manpage to mkfs.mfs.1 to follow the binary
	. move mkproto so it can become part of the tools easily
2012-11-07 23:15:52 +01:00
Ben Gras
62aac7f191 retire nonsymbolic rootdev, dev2name 2012-11-06 12:22:12 +01:00
David van Moolenbroek
71d5865b10 TTY: fix crash obtaining kernel messages
Also fix a case of potential message loss in TTY and LOG.
2012-11-06 00:17:44 +01:00
7f007284e6 /bin/pax: Fix cross compilation problem on some platform by removing
unneeded dependency on libutil.
2012-11-01 13:04:03 +01:00
Ben Gras
196021cd82 drop safemap code 2012-10-30 13:55:42 +01:00
Thomas Veerman
f1b9e8249b testsh2.sh: change output to new cksum util 2012-10-30 13:08:45 +00:00
Thomas Veerman
b01e9ebfdb TTY: seperate hardware dependent parts + add new serial driver
.Split TTY in order to support both x86 and ARM.
.Add support for the TI 16750 UARTs on OMAP35x.
.Various other improvements:
  .Kernel messages are printed using generic terminal write
   functions. That is, they are no longer directly displayed
   on the console.
  .The console can now be displayed on any terminal. This
   is configured by the "console={tty00,tty01,ttyc2,ttyc3,ttyc4}"
   boot variable -- basically any valid /dev/tty* terminal.
  .Cutify kernel messages with colors. Configured by
   "kernelclr={1,2,3,4,5,6,7}" boot variable.
2012-10-30 11:33:29 +00:00
Thomas Veerman
aeda8e5c7b Kernel: reenable interrupts before halting 2012-10-30 11:32:05 +00:00
Thomas Veerman
87de141141 Kernel: busy wait until serial out has finished 2012-10-30 11:32:04 +00:00
Ben Gras
aefc6db005 vm: fix potential null deref 2012-10-24 19:47:47 +02:00
0ab81d2491 Upgrading bsdtar
* Removing commands/tar
 * Updated external/bsd/libarchive
 * Adding external/bsd/libarchive/bin/tar compiled bsdtar instead
   of just tar
 * (tar is taken care of through the pax utility)

Change-Id: Ie773b4502fbf4e3880f28f01bb528b063a60c668
2012-10-24 13:42:44 +02:00
85fee539f4 Upgrading pax.
This also means importing librmt.

Change-Id: Ie5b314aeaad28dca46acb64f20f2d70746ea52d0
2012-10-24 13:42:44 +02:00
6ab1df59f6 Fixed up new mtree description file NetBSD.dist.base (removed end of line spaces, added a few missing directories)
Fixed lchflags error under MINIX3 as host OS

Change-Id: I00f708e82753fdae85ac54bc903db06a7775ab5a
2012-10-24 13:42:44 +02:00
Ben Gras
a8ef09103d mtree mknod
Change-Id: I887437c7b84839fc644da4c55bd59b6a414408ef
2012-10-24 13:42:44 +02:00
David van Moolenbroek
7dd6189cc7 drivers: fix various sys_irqsetpolicy calls 2012-10-24 11:29:10 +00:00
Ben Gras
bd3cde4571 Move primary cache code to libminixfs.
Add primary cache management feature to libminixfs as mfs and ext2
currently do separately, remove cache code from mfs and ext2, and make
them use the libminixfs interface. This makes all fields of the buf
struct private to libminixfs and FS clients aren't supposed to access
them at all. Only the opaque 'void *data' field (the FS block contents,
used to be called bp) is to be accessed by the FS client.

The main purpose is to implement the interface to the 2ndary vm cache
just once, get rid of some code duplication, and add a little
abstraction to reduce the code inertia of the whole caching business.

Some minor sanity checking and prohibition done by mfs in this code
as removed from the generic primary cache code as a result:
        - checking all inodes are not in use when allocating/resizing
          the cache
        - checking readonly filesystems aren't written to
        - checking the superblock isn't written to on mounted filesystems

The minixfslib code relies on fs_blockstats() in the client filesystem to
return some FS usage information.
2012-10-23 19:48:38 +02:00
280d8c668e Importing cksum (needed by NetBSD build system)
Change-Id: I47308635f6307066643f83f07b6751b1f2a05eb4
2012-10-23 12:02:51 +02:00
Kees Jongenburger
9a5aca794e mmc:Fixes for coverity.
Change-Id: I25e406126deb9172276844e1bb756e22e1f449f8
2012-10-22 13:40:22 +02:00
23a61ee0eb Importing postinstall
Change-Id: I5813064164e2d6ca4cf353fb184194b2aaa8caa3
2012-10-22 11:37:43 +02:00
ece05d227f Adding -nt flag to test
This is needed by build.sh.
2012-10-22 11:37:43 +02:00
265d9b456d Patch mkdep to make sure tested values are not mistaken
as test flags.
2012-10-22 11:37:42 +02:00
Kees Jongenburger
de291cdb60 mmc:driver development added dummy driver.
* Add dummy driver to allow independent testing of mmcblk.
* Always build the mmc driver to prevent breakage.
* Allow to specify the mmc driver to be used at load time.

Change-Id: I4e14b912fb8f3612e252864b53733968b23ac023
2012-10-19 14:55:03 +02:00
David van Moolenbroek
23907fa712 libvboxfs: fix setting file mtimes 2012-10-17 23:01:24 +02:00
David van Moolenbroek
a459232eed mount(1)/umount(1)/format(1): remove setuid bits
This is a security measure. We may want to bring back user access to
mounting and formatting media in the future, but this should be done
only once we are sure that this is safe from a security perspective.
2012-10-17 23:01:13 +02:00
David van Moolenbroek
cc6895f6c6 mount(1): do not include system headers 2012-10-17 23:01:05 +02:00
David van Moolenbroek
de58c13271 Retire checkhier(8) 2012-10-17 23:00:59 +02:00
David van Moolenbroek
77d964e574 format(1): access floppy as block device
Accessing block devices as character devices is no longer supported.
2012-10-17 23:00:51 +02:00
David van Moolenbroek
01de9eddd6 MAKEDEV(8): don't make /dev/filter user-accessible 2012-10-17 23:00:46 +02:00
David van Moolenbroek
638cb5b3c2 Retire badblocks(8) and readall(1) 2012-10-17 23:00:44 +02:00
David van Moolenbroek
21e6836bb7 release.sh: call df(1) with -k 2012-10-17 22:54:36 +02:00
David van Moolenbroek
0075a21504 setup(8): only call df(1) on mounted file systems 2012-10-17 22:54:27 +02:00
David van Moolenbroek
870f6d08af df(1): use statvfs instead of raw disk access
As of this patch, df(1) no longer performs raw disk access; it
operates exclusively on mounted file systems. This also means
that df no longer needs to be setuid.
2012-10-17 22:51:17 +02:00
David van Moolenbroek
3399c2c966 part(8)/autopart(8): remove partition hack
We have actually had lseek64 for quite a while now, so it's no longer
necessary to do horrible things to the partition table just to be able
to access large offsets into a device.

Also fix the compiler warnings in these commands.
2012-10-16 15:24:26 +02:00
David van Moolenbroek
ab12636b79 Installation CD: add AHCI option to boot menu 2012-10-16 10:34:58 +02:00
David van Moolenbroek
ceefd434f1 update_bootcfg(8): various improvements
- inherit a predefined set of system environment variables
  (the current set of inherited variables is: ahci; acpi; no_apic);
- auto-adjust the default menu option when lines are auto-removed;
- add variable substitution support for /etc/boot.cfg.local;
- make default menu options in boot.cfg.local relative to itself,
  allowing one to set the default to a menu option from this file.
2012-10-16 10:34:58 +02:00
Kees Jongenburger
3fab01cdb2 mmc:Indenting and code cleanup.
Change-Id: Ia1156c6b5e4dbc6c8af37d61b118258053f347ce
2012-10-16 08:40:43 +02:00
Kees Jongenburger
2d5f58d5ef mmc:Small fixup to run the driver on hardware.
Change-Id: I8e8d048da7cdfce5c9f2091969b0db5240e3e89f
2012-10-16 08:40:43 +02:00
Prasanna Kumar T S M
8de781761f Remove some usage of 64bit functions (minix/u64.h)
. Removed the usage of 64 bit functions in top.c. Compiles successfully.
. Scaling 64 bit values to 32 bit is removed.
. Retain make64 instead of using | with shift.
. Add order cycling display
2012-10-15 18:24:30 +02:00
David van Moolenbroek
2e26c872c4 blocktest: make fewer assumptions about driver
In particular, allow partial results to be returned in some cases,
and do not require that the driver fail on word-unaligned access.
2012-10-15 11:50:59 +00:00
David van Moolenbroek
d2be2e7b41 mmc: various small fixes
- call blockdriver_announce() on startup;
- restart statelessly after a crash;
- resolve a clang warning.
2012-10-15 11:50:58 +00:00
David van Moolenbroek
46fca87456 VM: munmap fix 2012-10-13 19:08:28 +02:00
Ben Gras
e12fdad66d expose some terminal definitions by default 2012-10-13 03:15:14 +02:00
Mohamed Katri
d21a633ffb mkfs.mfs: dynamically size image from proto 2012-10-12 15:13:43 +02:00
Ben Gras
d343041caa VM: make mapping types explicit
Introduce explicit abstractions for different mapping types,
handling the instantiation, forking, pagefaults and freeing of
anonymous memory, direct physical mappings, shared memory and
physically contiguous anonymous memory as separate types, making
region.c more generic.

Also some other genericification like merging the 3 munmap cases
into one.

COW and SMAP safemap code is still implicit in region.c.
2012-10-12 14:52:01 +02:00
Ben Gras
fd4ddef49a VM: munmap used by VM for itself is no longer used 2012-10-12 14:51:35 +02:00
David van Moolenbroek
9733fcdb43 bootloader: usability improvements
- add "edit" menu option, to edit menu commands before executing them;
- add "menu" boot command, to return to the menu from the prompt;
- provide more line editing features when getting input;
- fix a few potential buffer overflows as a side effect.
2012-10-12 01:03:36 +02:00
David van Moolenbroek
52cf951fdc tests: fix IPC test set fix
Partial rollback of git-df39752.
2012-10-11 20:38:41 +02:00
Tomas Hruby
420dfe1145 Merge branch 'master' of git.minix3.org:minix 2012-10-11 09:47:24 +00:00
Tomas Hruby
ee99bb81b9 LIBC - getifaddrs() fix
ifpa must be set to something meaningful every time it returns 0.
2012-10-11 09:43:33 +00:00
Ben Gras
39393e7046 minor fixes for safecopy & safemap tests 2012-10-10 19:12:42 +02:00
Kees Jongenburger
49246fcdd5 MMC driver.
Change-Id: I0d460d63070855df9b11eaf3d33eb7bb89c570f1
2012-10-08 09:11:17 +02:00
Kees Jongenburger
4fda063232 Import MMC related bsd headers.
Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>

Change-Id: Ia183d522a6ef1528b045a6fc6cd2e8930c669c32
2012-10-08 09:11:16 +02:00
Arun Thomas
471a03a362 ARM support for kernel and vm 2012-10-07 21:38:03 -04:00
Arne Welzel
e35c4f78d2 VFS: fix check_bsf() locking
The check_bsf() macro uses assert(mutex_trylock(&bsf_lock)) and
assumes bsf_lock is locked afterwards. This breaks when compiling
with NOASSERTS="yes". Also: macro to function transition.
2012-09-28 14:57:34 +02:00
Arne Welzel
7e1074732b VFS: resolve unused parameter if NOASSERTS="yes"
If VFS is compiled with NOASSERTS="yes", ctty_opcl() does not
use the op parameter. Change to "non-assert()" sanity check.
2012-09-28 14:57:32 +02:00
pikpik
be81e4ec74 daily: makewhatis -f
. use a little less memory and the processor will be
	  freer during start-up.
2012-09-27 23:12:14 +02:00
Ben Gras
c595699ca7 unstack, sort: cleanup and improvement
lets unstack
(a) know about in-kernel ipc entry points and
(b) be able handle >2GB symbol offsets.

	. sort: add -x for hex numerical sort
	. unstack: gnm is obsolete
	. unstack: datasizes is obsolete (use nm --size-sort instead)
	. unstack: add ipc entry points read from procfs (hex)
	. unstack: use sort -x to sort symbol order so the procfs ones are
	  sorted independent of position and original ordering
2012-09-26 18:44:55 +02:00
Ben Gras
2cdbb3041d procfs: make ipc vectors available 2012-09-26 17:14:14 +02:00
Arne Welzel
362e4c37a1 memory: use sys_safememset() for /dev/zero 2012-09-26 02:18:00 +02:00
Arne Welzel
bf33a1c097 libsys: add sys_safememset() 2012-09-26 02:18:00 +02:00
Arne Welzel
d8a89dcbe6 kernel: add safememset() kernel call 2012-09-26 02:18:00 +02:00
Arne Welzel
0617743bd1 kernel: handle pagefaults in vm_memset() 2012-09-26 02:17:59 +02:00
Thomas Veerman
e61268c454 TTY: printer better diagnostics
.tell when a line is not initialized
.don't print when a request has failed, we use error codes for that
2012-09-25 09:07:09 +00:00
Thomas Veerman
a458e9d00d getty: return speed option 2012-09-25 09:07:09 +00:00
Ben Gras
2d72cbec41 SYSENTER/SYSCALL support
. add cpufeature detection of both
	. use it for both ipc and kernelcall traps, using a register
	  for call number
	. SYSENTER/SYSCALL does not save any context, therefore userland
	  has to save it
	. to accomodate multiple kernel entry/exit types, the entry
	  type is recorded in the process struct. hitherto all types
	  were interrupt (soft int, exception, hard int); now SYSENTER/SYSCALL
	  is new, with the difference that context is not fully restored
	  from proc struct when running the process again. this can't be
	  done as some information is missing.
	. complication: cases in which the kernel has to fully change
	  process context (i.e. sigreturn). in that case the exit type
	  is changed from SYSENTER/SYSEXIT to soft-int (i.e. iret) and
	  context is fully restored from the proc struct. this does mean
	  the PC and SP must change, as the sysenter/sysexit userland code
	  will otherwise try to restore its own context. this is true in the
	  sigreturn case.
	. override all usage by setting libc_ipc=1
2012-09-24 15:53:43 +02:00
Arne Welzel
629829e69c phys_memset improvements
. verify length argument
	. use rep stosl / stosb
2012-09-21 14:15:44 +02:00
Ben Gras
8a3b6ca3bb remove unused <tools.h> 2012-09-20 12:24:22 +02:00
Ben Gras
b16aacc7f3 vm: fix failed alloc condition 2012-09-19 22:24:56 +02:00
Ben Gras
b6aab00c37 top task uid clear 2012-09-19 19:38:19 +02:00
Thomas Veerman
6cb94cc91b tests: don't chmod 777 everything upon cleanup
rm -rf works just fine no matter what mode bits are set (modulo
file ownership and current user id). Test 43 creates a symlink
to / and the chmod operation would change file permissions outside
of the test directory.
2012-09-19 16:20:41 +00:00
Ben Gras
bc4c07f4f1 coverity appeasement - redundant check 2012-09-19 17:19:57 +02:00
Ben Gras
60014efb3e vfs: pm_dumpcore: always clean up process
. whenever this function is called, pm will expect
	  the process to be cleaned up
	. so don't abort the process entirely on error
	. fixes a later 'forking on top of in-use child' vfs panic
2012-09-19 17:13:17 +02:00
Ben Gras
25817b0854 vm: change NO_MEM to a more impossible value
fixes an assert() firing when starting X. thanks to the report by pikpik.

	. NO_MEM was 0, which is actually an existing piece
	  of physical memory. it can't be allocated because it's reserved
	  for bios data (by the kernel), but it can be mapped in (e.g.
	  by X), causing sanity check disaster.
	. NONCONTIGUOUS is also obsolete as all allocations are single-page
	  now, i.e. NONCONTIGUOUS is really the default and only mode.
2012-09-19 15:31:36 +02:00
Ben Gras
24776434f5 worldstone: add -s for statistical profiling 2012-09-19 13:43:17 +02:00
Ben Gras
7047e014c9 coverity appeasement 2012-09-19 13:07:18 +02:00
Ben Gras
fe6e291f59 vm, kernel, top: report memory usage of vm, kernel 2012-09-18 23:43:52 +02:00
Ben Gras
aa82e375c6 VM: remove dead code 2012-09-18 18:40:57 +02:00
Ben Gras
d526f1a0db some coverity fixes. 2012-09-18 15:11:51 +02:00
Ben Gras
ddf1981004 VM: restore >4k secondary cache functionality
. by storing length in the yielded blocks node again
2012-09-18 13:17:52 +02:00
Ben Gras
ed1af3c86c VM: full munmap
complete munmap implementation; single-page references made
a general munmap() implementation possible to write cleanly.

	. memory: let the MIOCRAMSIZE ioctl set the imgrd device
	  size (but only to 0)
	. let the ramdisk command set sizes to 0
	. use this command to set /dev/imgrd to 0 after mounting /usr
	  in /etc/rc, so the boot time ramdisk is freed (about 4MB
	  currently)
2012-09-18 13:17:52 +02:00
Ben Gras
16c3870b2e VM: abstract datastructures a bit
. a little less duplication in region.c
2012-09-18 13:17:51 +02:00
Ben Gras
0d1f2e6be2 VM: simplify slab allocator
. only keep a list of non-empty, non-full pages with slab objects
	. simplifies alloc/free operations and reduces list management overhead
2012-09-18 13:17:50 +02:00
Ben Gras
19e6dad47b VM: only single page chunks
. only reference single pages in process data structures
   to simplify page faults, copy-on-write, etc.
 . this breaks the secondary cache for objects that are
   not one-page-sized; restored in a next commit
2012-09-18 13:17:49 +02:00
Ben Gras
6d7b770761 VM: static data structure for mem allocation
. allocate physical memory using a fixed, pre-allocated bitmap so there
   are no call cycles and it's avilable earlier
2012-09-18 13:17:48 +02:00
Ben Gras
2cb560297c VM: remove unused dma memory support functions from vm
. unused calls / data structures
2012-09-18 13:17:47 +02:00
Ben Gras
8821c73a9e VM: forget about 'holes'
. unused data structures and code
2012-09-18 13:17:46 +02:00
Ben Gras
6410f4b5db VM: some sanitycheck fixes
minor fixes to restore SANITYCHECKS
2012-09-18 13:17:45 +02:00
Ben Gras
d3d8c30c2e libc/libminc malloc reorganization
. rename minix malloc sources to minix-* so Makefile
    references aren't ambiguous
  . throw out malloc source file copies in libminc
  . make libminc use phkmalloc instead of minix malloc (slightly faster)
2012-09-18 13:17:44 +02:00
Thomas Veerman
c087a60ed2 VFS: fix GCC compilation error 2012-09-17 15:29:38 +00:00
Thomas Veerman
8152b3ac4c INET: fix crash recovery script 2012-09-17 11:01:48 +00:00
Thomas Veerman
edefb7b35f PM: don't deliver signals to VM 2012-09-17 11:01:46 +00:00
Thomas Veerman
3881e732a9 VFS: panic when unmount_all fails 2012-09-17 11:01:46 +00:00
Thomas Veerman
992799b91f VFS: make all IPC asynchronous
By decoupling synchronous drivers from VFS, we are a big step closer to
supporting driver crashes under all circumstances. That is, VFS can't
become stuck on IPC with a synchronous driver (e.g., INET) and can
recover from crashing block drivers during open/close/ioctl or during
communication with an FS.

In order to maintain serialized communication with a synchronous driver,
the communication is wrapped by a mutex on a per driver basis (not major
numbers as there can be multiple majors with identical endpoints). Majors
that share a driver endpoint point to a single mutex object.

In order to support crashes from block drivers, the file reopen tactic
had to be changed; first reopen files associated with the crashed
driver, then send the new driver endpoint to FSes. This solves a
deadlock between the FS and the block driver;
  - VFS would send REQ_NEW_DRIVER to an FS, but he FS only receives it
    after retrying the current request to the newly started driver.
  - The block driver would refuse the retried request until all files
    had been reopened.
  - VFS would reopen files only after getting a reply from the initial
    REQ_NEW_DRIVER.

When a character special driver crashes, all associated files have to
be marked invalid and closed (or reopened if flagged as such). However,
they can only be closed if a thread holds exclusive access to it. To
obtain exclusive access, the worker thread (which handles the new driver
endpoint event from DS) schedules a new job to garbage collect invalid
files. This way, we can signal the worker thread that was talking to the
crashed driver and will release exclusive access to a file associated
with the crashed driver and prevent the garbage collecting worker thread
from dead locking on that file.

Also, when a character special driver crashes, RS will unmap the driver
and remap it upon restart. During unmapping, associated files are marked
invalid instead of waiting for an endpoint up event from DS, as that
event might come later than new read/write/select requests and thus
cause confusion in the freshly started driver.

When locking a filp, the usage counters are no longer checked. The usage
counter can legally go down to zero during filp invalidation while there
are locks pending.

DS events are handled by a separate worker thread instead of the main
thread as reopening files could lead to another crash and a stuck thread.
An additional worker thread is then necessary to unlock it.

Finally, with everything asynchronous a race condition in do_select
surfaced. A select entry was only marked in use after succesfully sending
initial select requests to drivers and having to wait. When multiple
select() calls were handled there was opportunity that these entries
were overwritten. This had as effect that some select results were
ignored (and select() remained blocking instead if returning) or do_select
tried to access filps that were not present (because thrown away by
secondary select()). This bug manifested itself with sendrecs, but was
very hard to reproduce. However, it became awfully easy to trigger with
asynsends only.
2012-09-17 11:01:45 +00:00
Zachary Storer
7c9e3e24d7 keymap(5) manpage - update location 2012-09-13 23:20:34 +02:00
Ben Gras
4eca12cde5 top: clarify ordering in blocked mode 2012-09-11 15:39:00 +02:00
Ben Gras
17e41d3081 top: add memory order, order cycling key 2012-09-11 02:17:25 +02:00
Sbastien Boisvert
373cb6526c IPC server: do not loop to find syscall handler
Instead of using a loop to find a matching ipc (inter process
communication) system call type, the offset in the call table can be
simply calculated in constant time.

Also, when the interprocess communication server receives an ipc
system call from a process, ipc should tell VM to watch the process
only once. This patch fixes that also.

(Patch and commit message slightly edited by committer.)
2012-09-10 19:20:03 +02:00
David van Moolenbroek
df3975243b tests: fix IPC test set
- use one single library instead of loose library files
- we don't have ftime() anymore
- shmat(non-NULL) is currently broken, fix shmt test set to bypass this
- some other small issues
2012-09-10 19:20:03 +02:00
David van Moolenbroek
c9f644bd68 blocktest: switch from rand() to lrand48()
Apparently, with NetBSD's libc, the exclusive OR of the lower eight
bits of 4096 consecutive rand() values is zero, breaking some tests.
2012-09-10 11:35:04 +02:00
Arne Welzel
4fbdf1946d blocktest: fix segfault on vectored read 2012-09-10 11:32:38 +02:00
David van Moolenbroek
66ef912042 tests: fix DS tests' README too 2012-09-08 16:42:32 +02:00
David van Moolenbroek
2fbc9b274b blocktest: make script more newbie-friendly 2012-09-07 14:25:46 +00:00
Erik van der Kouwe
0e83262042 Fix uninitialized variable in sprofalyze 2012-09-04 11:56:18 +02:00
David van Moolenbroek
41df1b59f1 libsys: let optset parse largeish positive values
Note that strtoul() also parses negative numbers correctly.
2012-09-03 12:20:17 +00:00
David van Moolenbroek
087ace4459 tests: fix DS tests 2012-09-03 12:20:16 +00:00
Erik van der Kouwe
2a0e9af32f Two frees to appease Coverity 2012-08-31 20:12:57 +02:00
Ben Gras
3c57102616 devman: initialize libvtreefs hooks
. uninitialized cleanup hook was causing devman crashes
	  on reboot, calling uninitialized cleanup hook whenever it
	  didn't happen to be 0
2012-08-31 19:12:49 +02:00
David van Moolenbroek
6b97790a38 libblockdriver: minor whitespace fix 2012-08-31 12:36:17 +00:00
Erik van der Kouwe
6a83cf3e70 sprofdiff: give some more info in case of bad input 2012-08-31 17:01:43 +00:00
Ben Gras
053fa581b5 vm: remove stack handling for signals
. moved to the kernel as the handling was only
	  reading it; the kernel may as well write it too
2012-08-29 17:31:38 +02:00
Ben Gras
860224a4d4 stat.h: abi-compatible way to make st_size off_t 2012-08-29 01:20:30 +02:00
Arun Thomas
fd43d93ce5 ARM support for system libraries 2012-08-28 13:49:27 -04:00
Arun Thomas
9a9d555f56 machine/ipcconst.h for arch-specific constants 2012-08-27 19:46:41 -04:00
Ben Gras
e4ac80eb60 various warning/errorwarning fixes for gcc47
. warnings (sometimes promoted to errors) in servers/ and kernel/
 . -Os for ext2 boot module to make it small enough
2012-08-27 16:19:18 +02:00
Kees Jongenburger
2af02e0d5d Amd64 cross-compilation fix.
* Remove usage of _MINIX and __i386__ in mkfs.c  to make
  conditional compilation orthogonal.
2012-08-27 15:31:03 +00:00
Ben Gras
41ab295654 hide block_t behind _MINIX (for gcc) 2012-08-24 18:07:37 +02:00
David van Moolenbroek
201031fb38 libaudiodriver: properly deallocate memory 2012-08-24 09:17:27 +00:00
David van Moolenbroek
9821bbf780 libaudiodriver: call drv_init() again 2012-08-24 09:17:26 +00:00
David van Moolenbroek
ca216b3d97 libaudiodriver: resolve Coverity warnings 2012-08-24 09:17:25 +00:00
Ben Gras
caa7efa117 kernel: rely on alignment directive for stacks
. unnecessary to do it manually with ELF
	. also makes 1 extra alignment page unnecessary
2012-08-19 01:04:51 +02:00
Arun Thomas
7ca1ce7968 VM: Add PTF_READ page table flag 2012-08-17 00:17:52 +02:00
Arun Thomas
fc9b3f9bdd VM: allow for 16KB chunk alignment 2012-08-17 00:17:52 +02:00
Arun Thomas
c78b56a9e5 RS: Make PCI code optional 2012-08-17 00:17:51 +02:00
Arun Thomas
a57a591f25 Reorganize arch consts and types
-DEFAULT_HZ const moved to archconst.h
-cpu_info struct moved to archtypes.h
2012-08-16 17:07:43 +02:00
Ben Gras
d69cc76e03 rename struct mem_range to minix_mem_range
. avoid a name clash with gdb
2012-08-15 15:17:25 +02:00
David van Moolenbroek
8e116b71a1 Kernel: resolve Coverity warnings 2012-08-15 11:12:11 +00:00
David van Moolenbroek
0b5c2a058c Kernel: use okendpt() to resolve stored endpoints
This adds an integrity check at very little cost, and should stop
Coverity from flagging array overruns on the result.
2012-08-15 08:50:30 +00:00
David van Moolenbroek
c0aa9bf6ed Kernel: resolve -Wall warnings for SMP 2012-08-14 16:38:03 +00:00
David van Moolenbroek
cf9a4ec79b Kernel: clean up include statements a bit
Coverity was flagging a recursive include between kernel.h and
cpulocals.h. As cpulocals.h also included proc.h, we can move that
include statement into kernel.h, and clean up the source files'
include statements accordingly.
2012-08-14 16:29:05 +00:00
David van Moolenbroek
5456f2728e ext2: resolve Coverity warnings 2012-08-14 09:11:19 +00:00
David van Moolenbroek
4aec9db571 dp8390: resolve Coverity warnings (encore) 2012-08-14 09:11:18 +00:00
David van Moolenbroek
bc404a9401 TTY: resolve Coverity warnings 2012-08-14 09:11:17 +00:00
David van Moolenbroek
533f61249b random: resolve Coverity warnings 2012-08-14 09:11:16 +00:00
Arun Thomas
93eadc7040 Make memory driver arch-neutral
-Use PAGE_SIZE instead of I386_PAGE_SIZE
-No need to grant ioport access for ARM
2012-08-13 17:21:47 +02:00
Arun Thomas
697f0d097f Rename sys_vmctl_get_cr3_i386 2012-08-12 23:30:54 +02:00
Arun Thomas
263ec1e885 pm: update for ARM 2012-08-12 23:30:54 +02:00
Arun Thomas
cdfb5ab81f common/libc: build for ARM 2012-08-12 23:30:54 +02:00
Arun Thomas
ed9152a1a3 csu: build for ARM 2012-08-12 23:30:54 +02:00
Ben Gras
31d8526346 libexec: add load_offset feature, used for ld.so
. ld.so is linked at 0 but it can relocate itself; we
	  wish to load ld.so higher though to trap NULL dereferences.
	  if we know we have to execute ld.so, vfs tells libexec to put it
	  higher.
2012-08-12 23:22:54 +02:00
Erik van der Kouwe
ad898517ac sprofdiff for comparing sprofile results
This patch adds the sprofdiff tool, which compares two sets of profiling
output files. It sorts processes and symbols by difference in average
number of samples, placing those that took more time on the left first
and those that took more time on the right last. If multiple runs are
combined, a standard deviation is computed and this is used to compute
the significance level, which gives an indication of which differences
are likely to be due to chance.

This tool is run not on the raw profiling files, but on the output of
sprofalyze -d (a new option). Though having to use two tools and an
intermediate file seems a bit awkward, the advantage is that the
original source tree is not needed to resolve the symbols. For
comparisons, this is very useful. Also, the intermediate file is in a
text format that can easily be processed by scripts, which may be useful
for other purposes as well.
2012-08-11 22:09:42 +00:00
Arun Thomas
fbd456ee2b libc/mallocdebug: Make arch-generic 2012-08-10 22:45:35 +02:00
Arun Thomas
caa798bbe1 brksize: Remove non-ELF code 2012-08-10 22:45:35 +02:00
pikpik
90f82bb33e Fix minimal ISO installation
- Minimal ISO's have little in /usr/src
 - Copy boot.cfg from /etc instead
2012-08-10 22:21:59 +02:00
pikpik
445f634a90 Removed legacy floppy boot support
- fdbootparams and fdboot are removed
 - fdboot manual references are removed
2012-08-10 22:21:58 +02:00
Arun Thomas
7fcec4ef61 drivers.h: fix machine includes 2012-08-10 22:12:13 +02:00
Arun Thomas
65a87d5bcb Fix prototypes for getdents, read, readlink 2012-08-10 22:09:43 +02:00
Arun Thomas
fbad9eaf95 Clean up arch Makefiles for libminc 2012-08-10 19:02:38 +02:00
Arun Thomas
3131ad3154 ARM headers 2012-08-10 19:02:19 +02:00
Erik van der Kouwe
10cbc9bd11 Write raw sprofile traces to preserve all information as well as save space 2012-08-10 18:49:40 +00:00
Arun Thomas
ad95bad8f7 Restore and use C version of oneC_sum 2012-08-10 14:48:48 +02:00
David van Moolenbroek
378164d359 libnetsock: resolve Coverity warnings 2012-08-09 00:16:36 +02:00
David van Moolenbroek
ebc85e54c4 libsys: resolve Coverity warnings 2012-08-09 00:16:36 +02:00
David van Moolenbroek
49aed1ad97 libsys: remove unused stacktrace variant 2012-08-09 00:16:35 +02:00
David van Moolenbroek
be87fdda3d PM: resolve Coverity warnings 2012-08-09 00:16:35 +02:00
David van Moolenbroek
aa5531fc67 IS: resolve Coverity warnings 2012-08-09 00:16:35 +02:00
David van Moolenbroek
fd8c6c1d30 IPC: resolve Coverity warnings 2012-08-09 00:16:35 +02:00
David van Moolenbroek
8c5d506b8a procfs: resolve Coverity warnings 2012-08-09 00:16:34 +02:00
Ben Gras
b3f47f5835 vm: ignore RS pin (pre-allocate) requests for now
. done by RS to reduce/remove dependency on VM for recovery
	. RS has the default stack size of 64MB since the nosegments
	  change, using a huge amount of unused memory to pre-allocate
	. ignore these requests until actually required (i.e. being able
	  to survive VM crashes)

Thanks to pikpik for investigating why RS was so huge.
2012-08-08 15:51:10 +02:00
Arun Thomas
0ae2e2df94 libc: ARM generateasm 2012-08-07 17:01:25 +02:00
Erik van der Kouwe
fc42f78836 Re-write sprofalyze in C for better performance, more options and to fix problems with the gap the kernel now has 2012-08-07 13:09:02 +00:00
David van Moolenbroek
cff95276d9 pci: resolve Coverity warnings
Or rather, slightly improve the code based on a false positive.
2012-08-06 16:18:40 +00:00
David van Moolenbroek
2289c91010 lance: resolve Coverity warnings 2012-08-06 16:18:39 +00:00
David van Moolenbroek
431cd9f69c fxp: resolve Coverity warnings
This removes some unused and unsupported features, and leaves in support
for another currently unused feature that might be used in the future.
2012-08-06 16:18:38 +00:00
David van Moolenbroek
c984359bb0 floppy: resolve Coverity warnings 2012-08-06 16:18:37 +00:00
David van Moolenbroek
4f877afeb6 e1000: resolve Coverity warnings 2012-08-06 16:18:36 +00:00
David van Moolenbroek
6199f090c8 dpeth: resolve Coverity warnings 2012-08-06 16:18:35 +00:00
David van Moolenbroek
6e3824d78b dp8390: resolve Coverity warnings 2012-08-06 16:18:34 +00:00
David van Moolenbroek
ab6e62a523 dec21140A: resolve Coverity warnings 2012-08-06 16:18:33 +00:00
Arun Thomas
19ffad7692 Remove ACK EM_WSIZE/EM_PSIZE macro usage 2012-08-06 17:49:22 +02:00
Arun Thomas
6723dcfab7 Replace MACHINE/CHIP macros with compiler macros 2012-08-06 17:49:22 +02:00
Arun Thomas
5919360736 NetBSD ARM headers 2012-08-06 17:49:02 +02:00
David van Moolenbroek
2d20088881 MFS: fix block estimation computation 2012-08-03 13:25:56 +00:00
Tomas Hruby
9c7bae4e16 LWIP - fix, removed segments
- compiles again
2012-08-03 00:20:34 -07:00
David van Moolenbroek
d18f3a9bc9 ext2: remove -Werror from CFLAGS
This breaks the Coverity build at the moment.
2012-08-01 12:39:14 +00:00
David van Moolenbroek
5909c8ba20 libvtreefs: resolve Coverity warnings 2012-07-30 14:00:22 +00:00
David van Moolenbroek
90e2b939ab rtl8139: resolve Coverity warnings 2012-07-30 13:59:43 +00:00
David van Moolenbroek
e34f611be3 rtl8169: resolve Coverity warnings 2012-07-30 12:10:15 +00:00
David van Moolenbroek
ee71bbbcb5 libsffs: resolve Coverity warnings 2012-07-30 12:10:14 +00:00
David van Moolenbroek
0b30c0a1bb libchardriver: resolve Coverity warnings 2012-07-30 12:10:13 +00:00
David van Moolenbroek
55c3f4800e libbdev: resolve Coverity warnings 2012-07-30 12:10:12 +00:00
David van Moolenbroek
db7a45926b filter: resolve Coverity warnings 2012-07-30 12:10:11 +00:00
David van Moolenbroek
da915d36b7 atl2: resolve Coverity warnings 2012-07-30 12:10:10 +00:00
David van Moolenbroek
0ae9652177 at_wini: resolve Coverity warnings 2012-07-30 12:10:09 +00:00
David van Moolenbroek
d75ef5a05c ahci: resolve Coverity warnings 2012-07-30 12:10:08 +00:00
David van Moolenbroek
85edabcb42 btrace(8): resolve Coverity warnings 2012-07-30 12:10:07 +00:00
Thomas Veerman
66dbf73049 VFS: fix locking bug in clone_opcl
When VFS runs out of vnodes after closing a vnode in opcl, common_open
will try to unlock a vnode through unlock_filp that has already been
unlocked in clone_opcl. By first obtaining and locking a new vnode this
situation is prevented; if there are no free vnodes, common_open will
unlock a still locked vnode.
2012-07-30 10:01:16 +00:00
Thomas Veerman
f6b0d662b5 VFS: check path components for NAME_MAX length 2012-07-30 09:44:58 +00:00
Thomas Veerman
48237f1730 ext2: use new secondary cache method
This gets rid of the ! emitted by VM when using ext2
2012-07-30 09:44:58 +00:00
Thomas Veerman
6c597561bc EXT2: various fixes
.enable all compile time warnings and make them errors
.refactor functions with unused parameters
.fix null pointer dereference before checking for null
.proper variable initialization
.use safe string copy functions
.fix massive memory corruption bug in fs_getdents
2012-07-30 09:44:58 +00:00
Thomas Veerman
238a9a057b PM: a few Coverity inspired fixes
.initialize variable to prevent negative array indexing
.remove dead code
2012-07-30 09:44:58 +00:00
Thomas Veerman
ca085c16ef procfs: use safe string copy 2012-07-30 09:44:58 +00:00
Thomas Veerman
c21503bdf8 isofs: fixes for coverity defects
.use safe string copy functions
.CD-ROM are always mounted read-only
2012-07-30 09:44:58 +00:00
Thomas Veerman
1c480f749a MFS: fixes for defects reported by Coverity
.use safe string copy
.fix (potential) int overflow in function return
2012-07-30 09:44:58 +00:00
Thomas Veerman
fa9199e049 MFS: getdents fixes
.Use a bigger buffer to hold results
.Do not try to store more data than user buffer can hold
2012-07-30 09:44:57 +00:00
Ben Gras
b6ea15115c kernel: facility for user-visible memory
. map all objects named usermapped_*.o with globally visible
	  pages; usermapped_glo_*.o with the VM 'global' bit on, i.e.
	  permanently in tlb (very scarce resource!)
	. added kinfo, machine, kmessages and loadinfo for a start
	. modified log, tty to make use of the shared messages struct
2012-07-28 20:57:38 +00:00
Ben Gras
53a947167c kernel: few more objects required in unpaged mode
. for 64-bit printf()
2012-07-28 22:26:52 +02:00
Ben Gras
11084d94e6 kernel: clean up objects
. objects left over from libraries are left around
2012-07-28 22:21:53 +02:00
David van Moolenbroek
6ded58b510 kernel: give kernel tasks their process name back 2012-07-26 14:35:08 +00:00
David van Moolenbroek
8caec1b57b libsys: 64-bit numbers support for printf()
Change some drivers accordingly.
2012-07-26 09:45:05 +00:00
Kees Jongenburger
86344bb535 Upgrade to NetBSD: tic.c,v 1.19
The upgrade of tic to v 1.19 fixes a memory corruptions that  was
visible when cross building (specially when using  long  path
names in the output file argument).
2012-07-25 11:48:27 +00:00
David van Moolenbroek
0b4c154160 VFS: call req_inhibread again 2012-07-19 14:36:51 +00:00
David van Moolenbroek
e0742978f1 VFS: do not resolve symlinks in rename(2) 2012-07-18 14:59:45 +00:00
Ben Gras
49d4116100 kernel: keep serial info in system env
. otherwise serial hardware gets reinitialized by tty
2012-07-18 15:16:57 +02:00
Thomas Veerman
963a10e15a PFS: fix negative array index 2012-07-18 10:05:50 +00:00
Thomas Veerman
0d3ccd8908 VFS: fix coverity defects 2012-07-17 10:29:22 +00:00
Thomas Veerman
fd60f03129 VFS: remove support for sync FS communication 2012-07-17 10:12:53 +00:00
Thomas Veerman
06f49fe167 VFS: prevent buffer overflow
If an FS returns faulty struct dirent data, VFS could overflow
a buffer that holds this data.
2012-07-17 08:49:41 +00:00
Ben Gras
cbcdb838f1 various coverity-inspired fixes
. some strncpy/strcpy to strlcpy conversions
	. new <minix/param.h> to avoid including other minix headers
	  that have colliding definitions with library and commands code,
	  causing parse warnings
	. removed some dead code / assignments
2012-07-16 14:00:56 +02:00
Thomas Veerman
77dbd766c1 VFS: Use safe string copy functions 2012-07-16 10:57:43 +00:00
Ben Gras
1d48c0148e segmentless smp fixes
adjust the smp booting procedure for segmentless operation. changes are
mostly due to gdt/idt being dependent on paging, because of the high
location, and paging being on much sooner because of that too.

also smaller fixes: redefine DESC_SIZE, fix kernel makefile variable name
(crosscompiling), some null pointer checks that trap now because of a
sparser pagetable, acpi sanity checking
2012-07-15 22:47:20 +02:00
Ben Gras
50e2064049 No more intel/minix segments.
This commit removes all traces of Minix segments (the text/data/stack
memory map abstraction in the kernel) and significance of Intel segments
(hardware segments like CS, DS that add offsets to all addressing before
page table translation). This ultimately simplifies the memory layout
and addressing and makes the same layout possible on non-Intel
architectures.

There are only two types of addresses in the world now: virtual
and physical; even the kernel and processes have the same virtual
address space. Kernel and user processes can be distinguished at a
glance as processes won't use 0xF0000000 and above.

No static pre-allocated memory sizes exist any more.

Changes to booting:
        . The pre_init.c leaves the kernel and modules exactly as
          they were left by the bootloader in physical memory
        . The kernel starts running using physical addressing,
          loaded at a fixed location given in its linker script by the
          bootloader.  All code and data in this phase are linked to
          this fixed low location.
        . It makes a bootstrap pagetable to map itself to a
          fixed high location (also in linker script) and jumps to
          the high address. All code and data then use this high addressing.
        . All code/data symbols linked at the low addresses is prefixed by
          an objcopy step with __k_unpaged_*, so that that code cannot
          reference highly-linked symbols (which aren't valid yet) or vice
          versa (symbols that aren't valid any more).
        . The two addressing modes are separated in the linker script by
          collecting the unpaged_*.o objects and linking them with low
          addresses, and linking the rest high. Some objects are linked
          twice, once low and once high.
        . The bootstrap phase passes a lot of information (e.g. free memory
          list, physical location of the modules, etc.) using the kinfo
          struct.
        . After this bootstrap the low-linked part is freed.
        . The kernel maps in VM into the bootstrap page table so that VM can
          begin executing. Its first job is to make page tables for all other
          boot processes. So VM runs before RS, and RS gets a fully dynamic,
          VM-managed address space. VM gets its privilege info from RS as usual
          but that happens after RS starts running.
        . Both the kernel loading VM and VM organizing boot processes happen
	  using the libexec logic. This removes the last reason for VM to
	  still know much about exec() and vm/exec.c is gone.

Further Implementation:
        . All segments are based at 0 and have a 4 GB limit.
        . The kernel is mapped in at the top of the virtual address
          space so as not to constrain the user processes.
        . Processes do not use segments from the LDT at all; there are
          no segments in the LDT any more, so no LLDT is needed.
        . The Minix segments T/D/S are gone and so none of the
          user-space or in-kernel copy functions use them. The copy
          functions use a process endpoint of NONE to realize it's
          a physical address, virtual otherwise.
        . The umap call only makes sense to translate a virtual address
          to a physical address now.
        . Segments-related calls like newmap and alloc_segments are gone.
        . All segments-related translation in VM is gone (vir2map etc).
        . Initialization in VM is simpler as no moving around is necessary.
        . VM and all other boot processes can be linked wherever they wish
          and will be mapped in at the right location by the kernel and VM
          respectively.

Other changes:
        . The multiboot code is less special: it does not use mb_print
          for its diagnostics any more but uses printf() as normal, saving
          the output into the diagnostics buffer, only printing to the
          screen using the direct print functions if a panic() occurs.
        . The multiboot code uses the flexible 'free memory map list'
          style to receive the list of free memory if available.
        . The kernel determines the memory layout of the processes to
          a degree: it tells VM where the kernel starts and ends and
          where the kernel wants the top of the process to be. VM then
          uses this entire range, i.e. the stack is right at the top,
          and mmap()ped bits of memory are placed below that downwards,
          and the break grows upwards.

Other Consequences:
        . Every process gets its own page table as address spaces
          can't be separated any more by segments.
        . As all segments are 0-based, there is no distinction between
          virtual and linear addresses, nor between userspace and
          kernel addresses.
        . Less work is done when context switching, leading to a net
          performance increase. (8% faster on my machine for 'make servers'.)
	. The layout and configuration of the GDT makes sysenter and syscall
	  possible.
2012-07-15 22:30:15 +02:00
Ben Gras
cfe1ed4df4 profiling related cleanup
. do not declare any data in <minix/profile.h>
	. addr check no longer necessary
2012-07-15 21:56:55 +02:00
Ben Gras
c6a2f353c3 boot programs gzip/strip changes
as disk space typically isn't a concern when crosscompiling, but
convenience and ability to debug is, change the strip and gzip defaults

	. do not strip or gzip the binaries when crosscompiling

this makes it faster to rebuild and restart a compiled system, with
debugging info if so desired.
2012-07-05 18:12:03 +02:00
Kees Jongenburger
c4d9681327 Add entry in fstab and let the mount system call start devman.
After this commit you will need an additional entry in fstab for
the /sys file system (see docs/UPDATING).
2012-07-05 14:52:16 +02:00
Kees Jongenburger
30b5c227e9 Allow to specify the rslabel to use for a file system.
When a file system is mounted some heuristics are used to define
a RS label for that system. This commit allows to specify the
label to use in an optional mount argument using either
mount -o rslabel=fs_myfs or as a mount option in fstab.

This can be used to start services that later also need to be
accessed directly.
2012-07-05 14:52:16 +02:00
Kees Jongenburger
1fb60d0811 Fixes for mount -a.
* Display an error message upon failure to mount a device.
* Handle a special case when the source device is "none"
* pass the mount options stored in fourth field of fstab
  to mount(3).
2012-07-05 14:45:30 +02:00
Kees Jongenburger
c9b3bd9d45 Add a /sys entry to minix.mtree 2012-07-05 11:09:40 +02:00
Kees Jongenburger
c755b5784a Cleanup minix.mtree.
Use consistent indenting and sort entries alphabetically.
2012-07-05 11:07:25 +02:00
Kees Jongenburger
101b99bc77 devmand call the cleanup method before doing an exit.
Call the cleanup mehtod before doing an exit to prevent stale pid
files.
2012-07-05 11:07:25 +02:00
Ben Gras
ed993cd557 don't leave _VCS_REVISION in 2012-06-29 16:34:41 +02:00
Ben Gras
08f8084a21 align messages
Has a small but measurable performance improvement.
2012-06-29 16:13:54 +02:00
Ben Gras
c3db1c6939 various symbol referencing fixes
make weak symbol references and namespace renames references
the renamed versions.

function renaming, weak symbol references and libc namespace.h
protection interact in hairy ways and causes weak symbol references
for renamed functions to be unresolved; e.g. vfork should be an
alias for _vfork but _vfork doesn't exist because __vfork14()
exists.

this is a problem for dynamically linked executables as all symbols
have to be resolved, used or not, at link time. it was masked by
clang-compiled base system libraries but is a problem when gcc does
it.
2012-06-28 15:20:53 +02:00
Thomas Veerman
8d1c219676 libvassert: don't build shared lib 2012-06-26 09:32:15 +00:00
Thomas Veerman
f26d79e0ff releasetools: use build system macros 2012-06-26 09:32:15 +00:00
Ben Gras
c58712f0f0 xz: add libc dependency 2012-06-25 17:21:01 +02:00
Ben Gras
6a6b7b5769 ld.so: be more mmap()-behaviour-independent
. if the layout of virtual address regions as returned
	  by mmap() without a location hint changes, ld.so could
	  trip itself up (under minix). this change allocates
	  the full size it needs for every object that's loaded
	  so that if that succeeds, it's sure there's virtual address
	  space for the whole thing no matter what other bits happen
	  to be there already.

	. this fix exposed a bug in the test; at atexit() execution
	  time the loaded object is unmapped, so that part of the
	  test is removed.
2012-06-25 14:13:07 +02:00
Thomas Veerman
3f40eb3511 fetch.sh: serve tarballs ourselves
And use the original sources as backup.
2012-06-25 10:46:31 +00:00
Thomas Veerman
e3209ae766 Import lib{mpc,gmp,mpfr}
This decreases external dependencies for crosscompilation. Note that
these libraries are not built nor used by Minix itself.

Furthermore, the shell scripts that download the tarballs for these
libraries, gcc, binutils, and gmake now also support curl in addition
to wget.
2012-06-25 09:15:27 +00:00
Thomas Veerman
f8c6b27b69 sed: unbreak crosscompilation 2012-06-21 14:07:59 +00:00
Ben Gras
1906a5b9b4 sed: add compatability symlink properly 2012-06-20 15:47:44 +02:00
Kees Jongenburger
ace9a62765 Include bsd.own.mk in /usr/Makefile to have INSTALL_DIR defined. 2012-06-20 14:52:29 +02:00
Ben Gras
4725854459 sed: add compatability symlink 2012-06-20 14:47:01 +02:00
Thomas Veerman
305dacf6ea setup: copy boot.cfg.default to /boot.cfg
This way the setup stays in sync with the source tree.
2012-06-20 10:48:39 +00:00
Thomas Veerman
6759b24c57 /etc/rc: use mount -a instead of manual parsing
The rc script manually parses /etc/fstab to mount all file systems.
To do that it needs /bin/sed which does not exist anymore. mount(8)
now supports the -a flag which causes it to mount all file systems
listed in /etc/fstab except for '/'. File systems marked with 'noauto'
are skipped.
2012-06-20 10:48:38 +00:00
Kees Jongenburger
eecd451343 Adding a symlink from /usr/bin/strip to /usr/pkg/bin/strip.
When calling the new install with the -s (strip) argument it will
use the hard coded /usr/bin/strip unless a STRIP environment is set.
2012-06-19 16:30:02 +02:00
Kees Jongenburger
b15f6fdf41 Removed unused control fifo in devmand. 2012-06-19 16:30:02 +02:00
Kees Jongenburger
a55f435a36 Decrease verbosity of devmand.
Display warnings(non critical errors) only when the verbose flag
is set.
2012-06-19 16:30:02 +02:00
Ben Gras
cb1418a5e1 generate offsets for ucontext.S 2012-06-19 15:47:25 +02:00
Thomas Veerman
9b7938d815 Fix release script 2012-06-19 08:50:33 +00:00
Thomas Veerman
5b91b11b9c Release script: tools -> releasetools rename 2012-06-18 16:05:38 +00:00
Thomas Veerman
4bb9af63c6 mkfs.mfs: no need to include a.out.h 2012-06-18 13:39:21 +00:00
Thomas Veerman
39dfb2bc55 Don't build ext2 ramdisk for cross compilation
. as mkfs.mfs is now cross compilable, we can remove the ext2 ramdisk
  special case for cross compilation.
2012-06-18 10:54:56 +00:00
Thomas Veerman
aab6eb7615 Clean up generated files for ash,ramdisk,libutil,libc 2012-06-18 10:54:56 +00:00
Thomas Veerman
791aa4e16f Cross compile MFS ramdisk 2012-06-18 10:54:55 +00:00
Thomas Veerman
bb226763a0 Make mkfs.mfs cross compilable 2012-06-18 10:54:54 +00:00
Thomas Veerman
a82a56d788 Not every shell understands 'let' 2012-06-18 10:54:54 +00:00
Thomas Veerman
4def69f293 Update nbsd_ports to account for new utils 2012-06-18 10:54:53 +00:00
Thomas Veerman
891c812cba Build file cross compilation tool 2012-06-18 10:54:53 +00:00
Thomas Veerman
966cbef4fd xinstall fix for cross compilation 2012-06-18 10:54:52 +00:00
Thomas Veerman
b2731fd668 Update gitignore for releasetools 2012-06-18 10:54:52 +00:00
Thomas Veerman
c8a0e2f4c6 Import NetBSD tools and build.sh
This commit finalizes support for cross compilation. The tools
directory are all links to the actual tools and are built on the
host system to build Minix. build.sh is the work horse that takes
care of all environment settings. It's slightly adjusted for Minix.
The /usr/src/Makefile has additional targets needed for cross
compilation.
2012-06-18 10:54:51 +00:00
Thomas Veerman
2ed11343a6 Remove duplicate sed 2012-06-18 10:54:51 +00:00
Thomas Veerman
ff555cdea6 Fix sed for cross compilation 2012-06-18 10:54:50 +00:00
Thomas Veerman
9d04c193d2 Import NetBSD xinstall
Also, fix mk files for cross compilation.
2012-06-18 10:54:50 +00:00
Thomas Veerman
d433a56288 Import NetBSD mtree
mtree is only used for cross compilation at this point. Also, the
required patches to make it compile on Minix cripple it probably
enough to make it unusable anyway.
2012-06-18 10:54:49 +00:00
Thomas Veerman
0b2db08aec Import NetBSD mktemp 2012-06-18 10:54:48 +00:00
Thomas Veerman
2e2caf5919 Import NetBSD make 2012-06-18 10:54:48 +00:00
Thomas Veerman
357f105029 Import NetBSD flex 2012-06-18 10:54:47 +00:00
Thomas Veerman
4a17663c14 Import NetBSD byacc 2012-06-18 10:54:17 +00:00
Thomas Veerman
18a5822eff Partially import gcc and binutils
They are used as build tools for cross compilation. This import does
not include the full distribution. Rather, it sports a shell script
that will download and patch the distribution when compiled from
/usr/src/tools (yet to be committed). This part of the source tree is
only necessary for cross compilation. It's not used or compiled for
native builds.
2012-06-18 10:54:16 +00:00
Thomas Veerman
5ea9e707be Import NetBSD nawk 2012-06-18 10:53:38 +00:00
Thomas Veerman
a23f4844ba Add gnu directory for gmake 2012-06-18 10:53:38 +00:00
Thomas Veerman
be9962e21f Add mk and h files needed for cross compilation 2012-06-18 10:53:37 +00:00
Thomas Veerman
7f99f3a293 Rename tools to releasetools
This is in preparation of NetBSD's tools directory to build tools
for cross compilation.
2012-06-18 10:53:37 +00:00
Thomas Veerman
9b58157579 Rewrite osrelease.sh to parse Minix version 2012-06-18 10:53:36 +00:00
Thomas Veerman
03ea1c1676 Dynamically determine which ramdisk to use
.Also, rename ext2_ramdisk to ramdisk_ext2.
2012-06-18 10:53:36 +00:00
Thomas Veerman
f09c2e014f Use MACHINE_ARCH instead of ARCH 2012-06-18 10:53:35 +00:00
Thomas Veerman
f93afa00e9 Remove MINIXSRCDIR and use NETBSDSRCDIR
NETBSDSRCDIR is used all over the place anyway, and this reduces
our diff with NetBSD a little.
2012-06-18 10:53:35 +00:00
Thomas Veerman
657168fa10 No need to define NETBSD_SOURCE explicitly 2012-06-18 10:53:34 +00:00
Thomas Veerman
d1301b26b3 Use buildsystem commands instead of {cp,mkdir} 2012-06-18 10:53:33 +00:00
Thomas Veerman
5daf8dbb89 mtree.sh: reverse last two parameters
This way we can treat DESTDIR like a special case just as the build
system does (i.e., if not set, assume DESTDIR="/").
2012-06-18 10:53:33 +00:00
Thomas Veerman
acac1f2fda Cross-compilation fixes
. Some Makefile fixes to automatically differentiate between a normal
  compilation and cross-compilation. Also, build compressed images.
. Harmonize ramdisk rc scripts for normal use case and ext2 ramdisk.
. ext2_ramdisk filesystem prototype fixes.
2012-06-18 10:53:32 +00:00
Thomas Veerman
4b94e52787 Fix mk file for cross compilation (2) 2012-06-18 10:53:32 +00:00
Thomas Veerman
0bcc4c15c9 newroot is gone too 2012-06-18 10:53:31 +00:00
Thomas Veerman
d0c7c2a5d2 bios_wini is no longer amongst us 2012-06-18 10:53:31 +00:00
Dirk Vogt
835f680238 New file(1) port 2012-06-18 10:53:30 +00:00
Dirk Vogt
991c41db8f Fix up mtree.sh 2012-06-18 10:53:29 +00:00
Dirk Vogt
eccb5d51f2 Also copy kernel into multiboot dir 2012-06-18 10:53:28 +00:00
Dirk Vogt
67ff0d71ed ext2 ramdisk: copy rc to correct destination 2012-06-18 10:53:28 +00:00
Dirk Vogt
56f6a77ead ramdisk: don't do anything at dependall 2012-06-18 10:53:27 +00:00
Dirk Vogt
7da8d39c06 Fix compiler check 2012-06-18 10:53:27 +00:00
Thomas Veerman
50e870c530 Make var overridable for cross compilation 2012-06-18 10:53:26 +00:00
Dirk Vogt
ed4df03113 Include ext2 ramdisk in build and remove sync
As the ramdisk and ext2 ramdisk don't build anything for the install
and all targets, memory does not have to wait for them anymore.
2012-06-18 10:53:26 +00:00
Dirk Vogt
bfacef76c5 Add ext2 ramdisk, intended for cross compilation 2012-06-18 10:53:25 +00:00
Dirk Vogt
a8f6f3ebc9 Make ramdisk location configurable
Also, the ramdisk is now built when the memory driver is compiled.
2012-06-18 10:53:25 +00:00
Dirk Vogt
3baaafe113 When MKUNPRIV is set do not require root privilege 2012-06-18 10:53:24 +00:00
Dirk Vogt
c735b0bb2c Makefile fixups for cross compilation 2012-06-18 10:53:24 +00:00
Dirk Vogt
c2c39af6bb Make TTY cross-compilable 2012-06-18 10:53:23 +00:00
Dirk Vogt
25ae53b165 Make commands cross-compilable 2012-06-18 10:53:23 +00:00
Dirk Vogt
207e4d2a71 Let the kernel load figure out where to put mods
This patch makes the mkimage tool obsolete
2012-06-18 10:53:22 +00:00
Thomas Veerman
d642d5508f Create cc symlink to clang 2012-06-18 10:53:22 +00:00
Ben Gras
0fb2f83da9 drop from segments physcopy/vircopy invocations
. sys_vircopy always uses D for both src and dst
	. sys_physcopy uses PHYS_SEG if and only if corresponding
	  endpoint is NONE, so we can derive the mode (PHYS_SEG or D)
	  from the endpoint arg in the kernel, dropping the seg args
	. fields in msg still filled in for backwards compatability,
	  using same NONE-logic in the library
2012-06-18 12:28:40 +00:00
Ben Gras
0e35eb0c6b drop segments from safemap/safeunmap invocations 2012-06-18 12:28:40 +00:00
Kees Jongenburger
7750657783 Add hot plugging infrastructure in rc file.
Adding hot plugging infrastructure in rc file. This includes
starting the devman service, mounting it's file system and
starting the corresponding devmand daemon.

This patch also provide error free shutdown of the USB sub-system.

The USB sub system needs to be shutdown in a certain order but also
consists of components living in /usr/pkg/. By checking the
existence of usbd we can stop it in the correct order.
2012-06-18 09:31:14 +02:00
Kees Jongenburger
6417d3e064 Add devmand configuration to /etc. 2012-06-18 09:30:45 +02:00
Kees Jongenburger
51a9903002 Add support in devmand for using config dirs.
Add support in devmand for using configuration directories to
allow 3rd party packages to add configuration items.
2012-06-18 09:29:53 +02:00
Kees Jongenburger
ade7dc8ded Upgrade libddekit and introduce devmand.
Devmand (Device manager daemon) is the daemon that will
dynamically manage services based on events received from
the system.
2012-06-18 09:23:42 +02:00
Kees Jongenburger
6b8821515d Move setjmp and strnlen to common/lib.
Move setjmp and strnlen to common/lib to allow libddekit to use them.
2012-06-18 09:20:22 +02:00
Ben Gras
2bfeeed885 drop segment from safecopy invocations
. all invocations were S or D, so can safely be dropped
	  to prepare for the segmentless world
	. still assign D to the SCP_SEG field in the message
	  to make previous kernels usable
2012-06-16 16:22:51 +00:00
Ben Gras
85ff5a947e dumpcore: use ptrace function to trigger a coredump
. dumpcore currently relies on minix segments
	. also ptrace dumpcore fix
2012-06-15 12:13:50 +02:00
Ben Gras
5e38c802d8 pm: ignore notify() from unknown sender
. avoids annoying error message if e.g. buggy drivers
	  send pm notify()s that pm tries to reply() ENOSYS to
2012-06-14 15:36:38 +02:00
Ben Gras
769af57274 further libexec generalization
. new mode for sys_memset: include process so memset can be
	  done in physical or virtual address space.
	. add a mode to mmap() that lets a process allocate uninitialized
	  memory.
	. this allows an exec()er (RS, VFS, etc.) to request uninitialized
	  memory from VM and selectively clear the ranges that don't come
	  from a file, leaving no uninitialized memory left for the process
	  to see.
	. use callbacks for clearing the process, clearing memory in the
	  process, and copying into the process; so that the libexec code
	  can be used from rs, vfs, and in the future, kernel (to load vm)
	  and vm (to load boot-time processes)
2012-06-07 15:15:02 +02:00
Ben Gras
040362e379 exec() cleanup, generalization, improvement
. make exec() callers (i.e. vfs and rs) determine the
	  memory layout by explicitly reserving regions using
	  mmap() calls on behalf of the exec()ing process,
	  i.e. handling all of the exec logic, thereby eliminating
	  all special exec() knowledge from VM.
	. the new procedure is: clear the exec()ing process
	  first, then call third-party mmap()s to reserve memory, then
	  copy the executable file section contents in, all using callbacks
	  tailored to the caller's way of starting an executable
	. i.e. no more explicit EXEC_NEWMEM-style calls in PM or VM
	  as with rigid 2-section arguments
	. this naturally allows generalizing exec() by simply loading
	  all ELF sections
	. drop/merge of lots of duplicate exec() code into libexec
	. not copying the code sections to vfs and into the executable
	  again is a measurable performance improvement (about 3.3% faster
	  for 'make' in src/servers/)
2012-06-07 15:15:01 +02:00
Ben Gras
41b869d4d6 drop aout support
justification: soon we won't be able to execute sep I&D aouts at
all (because of the vanishing segments), which was the default mode
to generate them so most binaries will be sep I&D.

this makes the vfs/rs exec() unification work simpler.

after unification, common I&D aout could be added back quite simply.
2012-06-07 12:43:16 +02:00
Ben Gras
ee4016155e vm: add third-party mmap() mode and PROCCTL
these two functions will be used to support all exec() functionality
going into a single library shared by RS and VFS and exec() knowledge
leaving VM.

	. third-party mmap: allow certain processes (VFS, RS) to
	  do mmap() on behalf of another process
	. PROCCTL: used to free and clear a process' address space
2012-06-07 12:43:16 +02:00
Ben Gras
1daf36038c kernel: compact utility functions 2012-06-07 11:25:32 +02:00
Ben Gras
c2d5e01042 endianness compile fixes 2012-06-06 13:15:18 +02:00
Ben Gras
910a0e1093 kernel: make sure mpx.S is linked early
. for qemu multiboot detection
2012-06-01 16:58:00 +02:00
Ben Gras
8c434cf24f synctree compile fix
. rename CANCEL to ORDER_CANCEL so the CANCEL enum name doesn't
	  clash with a minix header file. also endianness test fix.
2012-05-31 22:42:49 +02:00
Ben Gras
ad0db93247 no USE_BOOTPARAM 2012-05-31 01:13:27 +02:00
Ben Gras
3803c55856 kernel: neater arch-dependent split in Makefiles
. files in kernel/ references in kernel/Makefile, but
	  in kernel/arch/i386/ in kernel/arch/i386/Makefile.inc
2012-05-31 01:06:19 +02:00
Ben Gras
cd47780252 only elf/multiboot images 2012-05-31 00:58:44 +02:00
Ben Gras
c0ef4c4956 mthread: mmap returns MAP_FAILED on error 2012-05-31 00:54:11 +02:00
Ben Gras
73379f0be5 set major version of shlibs to 0
WARNING: this will break existing dynamically linked binaries if they
exist. If you have any:
	. re-build world statically first if necessary
	. remove libraries from /lib and /usr/lib
	. then build world

This change:
	. avoids possible future dismay when interfacing other
	  systems' binaries; done until they are abi-compatible

Thanks to Antoine Leca for pointing this out.
2012-05-10 16:38:24 +02:00
Ben Gras
cfb2d7bca5 retire BIOS_SEG and umap_bios
. readbios call is now a physical copy with range check in
	  the kernel call instead of BIOS_SEG+umap_bios
	. requires all access to physical memory in bios range to go
	  through sys_readbios
	. drivers/dpeth: wasn't using it
	. adjusted printer
2012-05-09 19:03:59 +02:00
Ben Gras
b611e4c226 brazilian keymap
contributed by David Augusto.
2012-05-04 13:56:04 +02:00
David van Moolenbroek
1817f7fc07 VFS: fix "process already free" panic on reboot
Reported by Claudiu Dan Gheorghe, debugged by Thomas and myself
2012-05-02 17:42:50 +02:00
David van Moolenbroek
f004a0a980 test43: fix dangling-symlink case 2012-05-02 17:39:58 +02:00
Ben Gras
543adbed3a libarchive import
. clean and nbsd_ports managed import
	. also makes it shared
2012-05-02 13:31:48 +02:00
Thomas Veerman
76092ddf33 libmthread: don't always verify library initialization
This can be turned back on when the library is compiled with
-DMTHREAD_STRICT (which enables more sanity checks). However,
always performing this check shows up in system profiling results.
2012-05-01 09:55:06 +00:00
Thomas Veerman
068d443d12 VFS: unlock vmnt when out of vnodes 2012-04-27 08:51:13 +00:00
Thomas Veerman
b6ff38065f VFS: release what can be released
Only attempt to release blocked processes that are blocked. There is
no use in trying to find more blocked processes than we know that are
blocked (on a pipe).
2012-04-27 08:51:02 +00:00
Thomas Veerman
7b81254069 VFS: simplify stat for pipes
According to POSIX the st_size field of struct stat is undefined for
fifos and anonymous pipes. Thus we can do anything we want. We save a
copy by not being accurate on pipe sizes.
2012-04-27 08:50:49 +00:00
Thomas Veerman
db8198d99d VFS: use S_IS* macros 2012-04-27 08:49:38 +00:00
Thomas Veerman
96bbc5da3e VFS: I_PIPE is redundant
Also, use S_IS* macros instead of manual comparison.
2012-04-27 08:49:38 +00:00
Ben Gras
755102d67f AT_SUN_EXECNAME support
. vfs: pass execname in aux vectors
	. ld.elf_so: use this to expand $ORIGIN
	. this requires the executable to reserve more
	  space at exec() calling time
2012-04-26 13:32:39 +02:00
Ben Gras
b41df2eb0d kernel: mon_return cleanup
cleanup of boot monitor related code.
2012-04-25 17:59:43 +02:00
Antoine Leca
c662389d25 Enable LZMA supprt with tar(1) 2012-04-25 17:52:33 +02:00
David van Moolenbroek
0c11190cdc MFS: reimplement block clean marking fix
MFS' get_block() must never return a newly acquired block buffer that
is marked dirty from previous use. This patch replaces git-dd59d50,
which assumed a working model where blocks for device NO_DEV would
never be dirty. For at least one scenario, that assumption does not
hold, triggering superblock overwrite warnings. In this patch, blocks
are explicitly marked as clean upon being repurposed. The working
model is now restored to be: the dirty state of a block is relevant
only when its associated device is not set to NO_DEV.
2012-04-20 17:40:47 +02:00
David van Moolenbroek
26f817243b VFS: reimplement truncate mtime/ctime fix
POSIX mandates that a file's modification and change time be left
untouched upon truncate/ftruncate iff the file size does not change.
However, an open(O_TRUNC) call must always update the modification and
change time of the file, even if it was already zero-sized. VFS uses
the file systems' truncate call to implement O_TRUNC. This patch
replaces git-255ae85, which did not take into account the open case.
The size check is now moved into VFS, so that individual file systems
need not check for this case anymore.
2012-04-20 11:35:59 +02:00
David van Moolenbroek
1e78879f1e run test fix, take two 2012-04-20 11:34:56 +02:00
Ben Gras
2720b68f1b daily cron: fix timestamp updating
. previously was not updated causing daily to be run on
	  every boot
2012-04-19 16:57:58 +02:00
Ben Gras
a149be43fc use linker to align fpu state save area 2012-04-19 15:06:47 +02:00
David van Moolenbroek
093c949274 procfs: fix rare panic in add_inode
Previously, procfs would consider all processes that have a non-free
kernel slot *or* an in-use PM slot. However, since AVFS, a non-free
kernel slot does not imply an in-use PM slot. As a result, procfs
may use PM slots that have a zero PID value. If two such entries are
present in the retrieved PM table, procfs would try to add two inodes
with the same name "0", triggering an assertion in vtreefs.

This patch makes procfs consider only the PM slot for (non-task)
processes.
2012-04-19 11:26:11 +02:00
Ben Gras
861bb4e571 update_bootcfg: fix: generate absolute paths 2012-04-18 16:30:06 +02:00
Ben Gras
ed21b54203 run test fix 2012-04-18 15:59:37 +02:00
Ben Gras
3945cfbfd3 block ioctls: pass request number 2012-04-18 11:01:15 +02:00
Ben Gras
b332803b6f release fixes
. make ramdisk buildable without ../etc having pwd.db
	. add cat to release bootstrap cmds
	. support running dynamically linked executables for
	  release bootstrap cmds
	. import netbsd chroot to help
2012-04-17 16:58:58 +02:00
Ben Gras
5086f1b2a1 test scripts fixes 2012-04-16 16:04:44 +02:00
Ben Gras
53f94f8ed4 dynamic executables on ramdisk support
See UPDATING about upgrading clang for dynamic linking.

	. allow executables on ramdisk to be dynamically linked; this means
	  putting a few required shared libraries and ld.elf_so on the ramdisk.
	. this makes the ramdisk (usage) smaller when they are dynamic, but
	  bigger when they're not.
	. also we can safely ditch newroot and call mount directly as that is
	  all newroot does.
	. create proto.common to share a bunch of entries between
	  small/nonsmall cases
2012-04-16 14:06:09 +02:00
Ben Gras
0c8e5ecc2e tests: link them dynamically by default
. so that functionality is tested
	. add test63 that actually tests dlopen(), dlsym(),
	  etc. functionality; only built if clang supports it
	. also test10 test to copy more of the executable
2012-04-16 05:21:21 +02:00
Ben Gras
4b999f1962 build shared versions of libraries
building defaults to off until clang is updated.

current clang does not handle -shared, necessary to change the ld
invocation to build shared libraries properly. a new clang should be
installed and MKPIC defaults to no unless the newer clang is detected.

changes:

	. mainly small imports of a Makefile or two and small fixes
	  (turning things back on that were turned off in Makefiles)
	. e.g.: dynamic librefuse now depends on dynamic
	  libpuffs, so libpuffs has to be built dynamically too
	  and a make dependency barrier is needed in lib/Makefile
	. all library objects now have a PIC (for .so) and non-PIC
	  version, so everything is built twice.
	. generate PIC versions of the compat (un-RENAMEd) jump files,
	  include function type annotation in generated assembly
	. build progs with -static by default for now
	. also build ld.elf_so
	. also import NetBSD ldd
2012-04-16 05:21:20 +02:00
Ben Gras
53002f6f6c recognize and execute dynamically linked executables
. generalize libexec slightly to get some more necessary information
	  from ELF files, e.g. the interpreter
	. execute dynamically linked executables when exec()ed by VFS
	. switch to netbsd variant of elf32.h exclusively, solves some
	  conflicting headers
2012-04-16 00:41:42 +00:00
Ben Gras
927b9ef243 kernel: align gdt and idt base addresses
patch my fdmanana:
As recommended by the Intel 64 and IA-32 Architectures Developer's
Manual Volume 3A, the GDT and IDT base addresses should be aligned on an
8 byte boundary to yield better processor performance.
2012-04-15 20:41:36 +02:00
Thomas Veerman
7daa6a6054 Provide boot option to boot into single user mode 2012-04-13 14:06:27 +00:00
Thomas Veerman
6659ae1fc3 Fix booting into single user mode
Due to a shift, mountfstab was unable to locate the fstab file and
mount other file systems causing a number of errors to be generated.
2012-04-13 13:52:48 +00:00
Thomas Veerman
d729ecb11b service: make clear who is printing the error 2012-04-13 13:51:56 +00:00
Thomas Veerman
26ec619a30 VFS: fix filp reuse race
Pipes consist of two filps (read filp and write filp) and a shared
vnode. When the writer leaves the filp reference count drops to
zero and subsequent find_filp()s should not find the filp when a
reader looks for it and the reader gets EOF. However, the pipe()
system call tries to find two filps, marks them in use, and only
after a successful node creation on PFS, overwrites the shared
vnode with the new vnode. Consequently, this leaves a small window
where a just closed 'pipe write filp' gets reused and marked as
present, before becoming the actual new 'pipe write filp' for a new
pipe. A reader for the old pipe will think a writer is present and
wait for that writer to write something or to leave; both actions
should revive the suspended reader. This will never happen and the
reader will be stuck forever.
2012-04-13 13:22:57 +00:00
Thomas Veerman
e292ba487e VFS: more three-level-lock sanity checking 2012-04-13 13:22:42 +00:00
Thomas Veerman
ca7a466f48 TTY: don't allow multiple readers on tty minor
TTY has no way of keeping track of multiple readers for a tty minor
device. Instead, it stores a read request for the last reader only.
Consequently, the first ("overwritten") reader gets stuck on a read
request that's never going to be finished. Also, the overwriting
causes a grant mismatch in VFS when TTY returns a reply for the
second reader.

This patch is a work around for the actual problem (i.e., keeping track
of multiple readers). It checks whether there is a read operation in
progress and returns an error if it is --preventing that reader from
getting overwritten and stuck. It fixes a bug triggered by executing
'top | more' and pressing the space bar for a while (easily reproducable
in a VM, not on hardware).
2012-04-13 13:22:13 +00:00
Thomas Veerman
933120b0b1 VFS: add getting active threads control msg 2012-04-13 13:21:01 +00:00
Thomas Veerman
e1a73469c8 VFS: remove debug print 2012-04-13 13:20:28 +00:00
Thomas Veerman
c2bb739760 VFS: let know when skipping reply 2012-04-13 13:19:45 +00:00
Thomas Veerman
91a38b6d4e VFS: fix dead lock
When running out of worker threads to handle device replies a dead
lock resolver thread is used. However, it was only used for FS
endpoints; it is now used for "system processes" (drivers and FS
endpoints). Also, drivers were marked as system process when they
were not "forced" to map (i.e., mapping was done before endpoint was
alive).
2012-04-13 13:19:10 +00:00
Thomas Veerman
b956493367 VFS: fix new signed/unsigned comparisons 2012-04-13 13:00:11 +00:00
Thomas Veerman
defe329519 VFS: warnings are errors 2012-04-13 12:59:32 +00:00
Thomas Veerman
8dd0880985 Add a simple utility to send control messages
The svrctl utility allows you to send control messages to VFS or PM.
This way you can retrieve runtime information or alter behavior.
2012-04-13 12:58:41 +00:00
Thomas Veerman
0d63d9e125 VFS: enable sending control messages 2012-04-13 12:54:55 +00:00
Thomas Veerman
8ae9987dca libmthread: add stack traces 2012-04-13 12:54:02 +00:00
Thomas Veerman
f571466c56 VFS: find job only if request is an transaction 2012-04-13 12:52:52 +00:00
Thomas Veerman
8f55767619 VFS: make m_in job local
By making m_in job local (i.e., each job has its own copy of m_in instead
of refering to the global m_in) we don't have to store and restore m_in
on every thread yield. This reduces overhead. Moreover, remove the
assumption that m_in is preserved. Do_XXX functions have to copy the
system call parameters as soon as possible and only pass those copies to
other functions.

Furthermore, this patch cleans up some code and uses better types in a lot
of places.
2012-04-13 12:50:38 +00:00
Ben Gras
99866db8cd vm: add MAP_FIXED 2012-04-12 15:01:36 +02:00
Ben Gras
1e2b3f4326 vfs: more regions for coredumps 2012-04-12 14:29:59 +02:00
Ben Gras
e83f7ba2c9 switch to netbsd csu
. file- and functionality-compatible with previous situation
          (FreeBSD csu) (with a crt1.o -> crt0.o symlink in /usr/lib)
        . harmonizes source with netbsd
        . harmonizes linker invocation (e.g. clang) with netbsd
        . helpful to get some arm code in there for the arm port project
2012-04-12 13:26:24 +02:00
Ben Gras
b02992f0c1 test: convert to bsdish Makefile
. smaller, simpler, less duplication, exceptions still
	  encodeable
	. fix for test10: too small a buffer to copy executables
2012-04-12 03:03:17 +02:00
Ben Gras
511c977f93 retire bios_wini 2012-04-12 03:02:21 +02:00
Ben Gras
b480472a76 vm: full memory view
for user-space processes, increase text segment so it reaches the full
address space, so code can be executed anywhere.
2012-04-12 02:58:39 +02:00
Ben Gras
660e15b2d1 vm: break: allow brk() on any region
use the user-supplied point to lookup which region to perform brk() on,
and if it's a reasonable one, do it, no matter what vm's notion of the
heap region is.
2012-04-12 02:57:59 +02:00
Ben Gras
1c7885f932 fix gcc test62 2012-04-12 02:55:04 +02:00
Ben Gras
a2d1372680 Import NetBSD usr.bin/login 2012-04-11 20:02:15 +02:00
David van Moolenbroek
928d76dbe8 Add VBFS: VirtualBox Shared Folder File System
Refer to "man vbfs" on how to mount it.
2012-04-11 00:27:48 +02:00
David van Moolenbroek
bb4d055fa6 Add libvboxfs: VirtualBox shared folders library 2012-04-09 19:25:18 +02:00
David van Moolenbroek
ef7b484e5c Create SFFS library out of HGFS
This Shared Folders File System library (libsffs) now contains all the
file system logic originally in HGFS. The actual HGFS server code is
now a stub that passes on all the work to libsffs. The libhgfs library
is changed accordingly.
2012-04-09 18:08:26 +02:00
David van Moolenbroek
09b327b042 HGFS: move all VMware-specific code into libhgfs 2012-04-09 17:32:36 +02:00
David van Moolenbroek
060399d9dd SEF: add sef_cancel()
This function allows the caller to cancel receiving a message from a
SEF callback. The receive function will then return EINTR.
2012-04-09 16:35:57 +02:00
David van Moolenbroek
6aa61efd09 VBOX: add host/guest communication interface
This interface can be used by other system processes by means of the
newly provided vbox API in libsys.
2012-04-09 15:56:20 +02:00
Ben Gras
ef01931f76 Import NetBSD file(1) 2012-04-03 01:15:36 +02:00
Ben Gras
adb4e9428a add UPDATING note about genassym 2012-04-02 16:32:32 +02:00
Ben Gras
29a24b06a3 clean up master Makefile a bit
. a bit more abstraction (macros) and less duplication
	. also build and install csu, libc, then rest of libraries
	  for future dependency
2012-04-01 03:45:02 +02:00
David van Moolenbroek
4eddbf774c manpages: fix options and examples 2012-03-31 23:47:03 +02:00
Ben Gras
8c4cdbd3c5 import genassym and use it for sconst.h in kernel 2012-03-31 15:29:53 +02:00
Ben Gras
18f3961189 use __restrict instead of restrict
. doesn't choke gcc without -std=c99
	. also used in prototypes already
2012-03-30 17:37:53 +02:00
David van Moolenbroek
fa805ebd1e Kernel/servers/drivers: resolve a few warnings
Flagged by clang 3.1.
2012-03-30 16:55:06 +02:00
Antoine Leca
1972ccefae Actually consider the new su(1) 2012-03-30 02:34:45 +02:00
David van Moolenbroek
638ce89250 hgfs: subsecond timestamp precision
Slightly cleaned up version of patch contributed by Antoine Leca.
2012-03-30 01:40:07 +02:00
Ben Gras
75839b75a1 drop /usr/lib/advent dir (no more advent) 2012-03-29 16:54:21 +02:00
Antoine Leca
d0b2856430 Drop obsolete sdump
The code cannot be compiled, and is not included for over a year.
And it creates a corefile which is obsolete.
2012-03-29 14:15:42 +02:00
Arun Thomas
b0666ba6b6 kernel: Remove unnecessary ACK conditionals 2012-03-29 13:29:09 +02:00
Tomas Hruby
5ab87a6c38 ioapic - missing volatiles
leads to a kernel panic when using clang and SMP

reported by trd <trdempsey.201201@gmail.com>
2012-03-29 00:53:38 -07:00
Ben Gras
1e399dd8bd various kernel printing fixes
. remove some call cycles by low-level functions invoking printf(); e.g.
	  send_sig() gets a return value that the caller should check
	. reason: very-early-phase printf() would trigger a printf() causing
	  infinite recursion -> GPF
	. move serial initialization a little earlier so DEBUG_EXTRA works for
	  serial earlier (e.g. its first instance, for "cstart")
	. closes tracker item 583:
	  System Fails to Complete Startup with Verbose 2 and 3 Boot Parameters,
	  reported by Stephen Hatton / pikpik.
2012-03-28 18:23:12 +02:00
Ben Gras
36db008cb5 adjust netconf for new su behaviour
reported and debugged by Ryan Lie, tracker item 594.
2012-03-28 17:30:56 +02:00
Thomas Veerman
3f775404d9 boot: use high baud rate by default 2012-03-28 08:57:38 +00:00
Ben Gras
a5190194a0 build: don't -L/usr/pkg/lib
You might have to update the compiler-rt package! See UPDATING.

	. the purpose of this -L was solely to find compiler-rt, which contains
	  runtime support code for clang-compiled binaries
	. this also makes all other packaged libraries visible, however
	. it is cleaner to isolate the base system from packages, and so
	  compiler-rt puts itself in /usr/pkg/compiler-rt/lib/ too, which the
	  base system henceforth uses exclusively
	. e.g. this solves a link failure when libfetch is installed as a
	  package
	. the new compiler-rt package also puts itself in /usr/pkg/lib for 'old'
	  systems; that is harmless. The benefit of 'new' systems is that the other
	  packages are hidden.
2012-03-27 12:31:30 +02:00
Ben Gras
a63151d3f8 next release will be 3.2.1 2012-03-27 12:31:30 +02:00
Ben Gras
4de51eedad import NetBSD su 2012-03-27 02:19:46 +02:00
Ben Gras
4f78dfcabc libutil: add O_NOCTTY to old pty open code
. fixes e.g. ssh sessions not getting their own
	  controlling tty (causing ^C getting broadcast to too
	  many processes)
	. previously (before -lutil) handled like this by bsd-openpty.c in
	  openssh
	. reported by Andy Kosela, debugged by ThomasV
2012-03-26 17:00:45 +02:00
David van Moolenbroek
9cca9d7566 Kernel: arch-related cleanup
- move umap_bios() into arch-specific code
- move proc.p_fpu_state access into arch-specific blocks
2012-03-26 14:19:33 +02:00
Ben Gras
204ae72525 retire _ANSI and <minix/ansi.h> 2012-03-25 21:58:27 +02:00
Ben Gras
f22864c24e get rid of __LONG_LONG_SUPPORTED
. also drop minix-specific code in libarchive
	  that was needed for not supporting 64 bit ints
2012-03-25 21:58:26 +02:00
Ben Gras
23df780120 get rid of _RESTRICT 2012-03-25 21:58:25 +02:00
Ben Gras
db242ed39d retire _CONST, _VOLATILE, _SIZET, _ARGS, _VOID 2012-03-25 21:58:20 +02:00
Ben Gras
7336a67dfe retire PUBLIC, PRIVATE and FORWARD 2012-03-25 21:58:14 +02:00
Ben Gras
6a73e85ad1 retire _PROTOTYPE
. only good for obsolete K&R support
	. also remove a stray ansi.h and the proto cmd
2012-03-25 16:17:10 +02:00
David van Moolenbroek
cf720a028a Test set for sys_vumap()
Located in test/kernel. Invoke "run" to run tests.
2012-03-24 19:51:14 +01:00
David van Moolenbroek
b91295a8d2 vm: if mmap address is given, try that first
Previously, the mmap address (if given) was merely used as a lower
bound, and then possibly overriden with a hint. Now, the mapping is
first tried at the exact given address. If that fails, the start of
the mmap range is used as lower bound (which is then still overridden
by the hint for efficiency).

This allows two pages to be mapped in at predefined addresses, where
the second address is lower than the first. That was not possible.
2012-03-24 19:51:14 +01:00
David van Moolenbroek
c729ff0050 blocktest: updates for sys_vumap() 2012-03-24 19:51:13 +01:00
David van Moolenbroek
186a4db672 ahci: use sys_vumap() instead of sys_umap()
This is only an optimization for CPU performance. Callers are
currently still required to supply contiguous memory.
2012-03-24 19:51:13 +01:00
David van Moolenbroek
70abb127cc Add sys_vumap() kernel call
This new call is a vectored version of sys_umap(). It supports batch
lookups, non-contiguous memory, faulting in memory, and basic access
checks.
2012-03-24 19:51:13 +01:00
David van Moolenbroek
2a395dd8b4 Kernel: introduce vm_check_range 2012-03-24 19:51:13 +01:00
David van Moolenbroek
08af3f672b Kernel: replace vm_contiguous with vm_lookup_range 2012-03-24 19:51:12 +01:00
Ben Gras
5737b690dc import NetBSD /usr/share/misc/
. for /usr/share/misc/style, NetBSD coding style
	. and for indent.pro (style-compatible indent(1) indenting profile)
2012-03-23 16:27:59 +01:00
David van Moolenbroek
f140910d3c Clean up a stale a.out-related declaration 2012-03-19 00:10:18 +01:00
David van Moolenbroek
91a1d11c11 Remove unsupported legacy TIOC[GS]ET[PC] ioctls 2012-03-19 00:09:29 +01:00
Ben Gras
6af9856d4a libcompat_minix-centric cleanup
remove some old minix-userland-specific stuff

	. /etc/ttytab as a file, and minix-compat function (fftyslot()),
	  replaced by /etc/ttys and new libc functions
	. also remove minix-specific nlist(), cuserid(), fttyslot(), v8 regex
	  functions and <compat/regex.h>
	. and remaining minix-only utilities that use them
	. also unused <compat/pwd.h> and <compat/syslog.h> and
	  redundant <sys/sigcontext.h>
2012-03-16 17:06:24 +01:00
Evgeniy Ivanov
9290237811 Bootloader reinstall mode for setup. 2012-03-15 19:06:23 +01:00
Evgeniy Ivanov
72eca0eb1e update_bootcfg improvements.
- Fix a glitch (don't glob '*' in for).
- update_bootcfg should be a /bin command.
- update_bootcfg should not add menu entries for missing kernels.
2012-03-14 18:19:28 +01:00
Andy Kosela
24f1e18846 Import NetBSD cat(1) 2012-03-14 16:54:30 +01:00
Andy Kosela
7e81b07cc5 Import NetBSD ed(1) 2012-03-14 16:52:31 +01:00
Ben Gras
d65f6f7009 imported code harmonisation
. common/include/arch/i386 is not actually an imported
	  sys/arch/i386/include but leftover Minix files;
	  remove and move to include/
	. move include/ufs to sys/ufs, where it came from, now that
	  we have a sys/ hierarchy
	. move mdocml/ to external/bsd/, now we have that
	. single sys/arch/i386/stand/ import for boot stuff
2012-03-14 16:02:59 +01:00
Ben Gras
6cdfedc12c tools: some nbsd_ports fixes
. figure out which dates were used for various nbsd imports
	  and specify them for each one in the nbsd_ports file
	. other minor fixes and improvements
2012-03-14 16:02:58 +01:00
Erik van der Kouwe
9e56468d6c sprofalyze forgets a.out and learns that ELF binaries have larger addresses 2012-03-13 11:23:35 +01:00
David van Moolenbroek
e8d2d2f6b6 libminc-related updates
- add files needed for acpi, ahci, fbd, vfs to libminc
- remove "-lc" from their respective makefiles
- remove setenv from libminc (requires initialization)
2012-03-12 23:16:45 +01:00
Thomas Veerman
0438b62014 Test48: resolve existing hostname with static IP address 2012-03-09 11:44:03 +00:00
David van Moolenbroek
ffaae26145 test48: disable failing resolver test
Temporary, until a better solution comes along.
Also, .xxx is now a valid TLD!
2012-03-09 02:01:03 +01:00
David van Moolenbroek
d395035160 libddekit: resolve compiler warnings
Introduced by commit ca95f69.
2012-03-08 23:52:28 +01:00
David van Moolenbroek
457d3884a2 pci: apply ACLs to device reservations 2012-03-08 23:52:17 +01:00
David van Moolenbroek
e21c21a31a pci: USER_SPACE cleanup 2012-03-08 23:52:13 +01:00
David van Moolenbroek
291ece0caa drivers: slightly better use of PCI constants
- introduce PCI_BAR_{IO|MEM}_MASK
- remove redundant PCI definitions from lance
- fix vbox BAR retrieval
2012-03-08 23:51:18 +01:00
David van Moolenbroek
5152cfd8bd drivers: remove redundant PCI ID tables
- remove PCI tables where system.conf suffices
- remove drivers' ability to mess up NIC order
- fix dp8390 PCI enumeration
- convert ti1225 to instance model
- add system.conf entry for ti1225
2012-03-07 23:58:00 +01:00
David van Moolenbroek
de45264c74 dp8390,ti1225: reenable register memory mapping 2012-03-07 23:57:34 +01:00
David van Moolenbroek
21ed531c8f pci: remove pci_init1 API call 2012-03-07 23:56:08 +01:00
David van Moolenbroek
c8b892d835 swifi: modernize a bit
- ELF support
- update of one example script
- warning fixes
2012-03-05 22:41:49 +01:00
David van Moolenbroek
1512dc5c23 Kernel: do not retry message delivery upon failure 2012-03-05 22:38:04 +01:00
David van Moolenbroek
ca95f69f25 drivers: resolve compiler warnings 2012-03-05 22:32:55 +01:00
David van Moolenbroek
4aaa5377b3 Import NetBSD du(1) 2012-03-05 22:32:33 +01:00
David van Moolenbroek
fecfd07997 mfs: more accurate stat.st_blocks estimation
On MFS file systems, the stat(2) call now counts indirect blocks as
part of the st_blocks calculation, in addition to proper initial
rounding of the file size. The returned value is now a true upper
bound on the actual number of 512-byte blocks allocated to the file.
As before, it is not accurate for sparse files.
2012-03-05 22:32:33 +01:00
David van Moolenbroek
075f839810 mfs: remove legacy stat code 2012-03-05 22:32:32 +01:00
David van Moolenbroek
c8c9565a03 Kernel: only reset/reload FPU state when necessary 2012-03-05 22:32:14 +01:00
David van Moolenbroek
a615a7d4d2 Kernel: retain FPU state upon save
On the x86, saving FPU state has the side effect of resetting this
state. In some cases (fork, getcontext), this would cause the state
to be lost. This patch restores the FPU state right after saving it,
except when different state is loaded immediately after.
2012-03-05 22:32:14 +01:00
David van Moolenbroek
0a8a2ecfb5 Kernel: pass FPU restore exception to user process
Previously, user processes could cause a kernel panic upon FPU state
restore, by passing bogus FPU state to the kernel (through e.g.
sigreturn). With this patch, the process is now sent a SIGFPE signal
instead.
2012-03-05 22:32:14 +01:00
David van Moolenbroek
4b6a98de5f Kernel: adjust FPU state upon process slot swap
This fixes seemingly random FPU exceptions and kernel panics occurring
after a system server restart.
2012-03-05 22:32:14 +01:00
David van Moolenbroek
831450aacc e1000: add support for 82545EM
Tested on VirtualBox and VMware.
2012-03-05 13:00:06 +01:00
Tomas Hruby
fb31513b00 LWIP,NETSOCK - lwip uses asynchronous protocol
- libnetsock - internal implementation of a socket on the lwip
  server side. it encapsulates the asynchronous protocol

- lwip server - uses libnetsock to work with the asynchronous
  protocol
2012-03-02 15:44:48 +00:00
Tomas Hruby
199e9c1907 LWIP fixed Makefile 2012-03-02 15:44:48 +00:00
Tomas Hruby
72b7abd1a1 VFS - no CANCEL for async non-blocking operations
- if an operation (R, W, IOCTL) is non blocking, a flag is set
  and sent to the device.

- nothing changes for sync devices

- asyn devices should reply asap if an operation is non-blocking.
  We must trust the devices, but we had to trust them anyway to
  reply to CANCEL correctly

- we safe sending CANCEL commands to asyn devices. This greatly
  simplifies the protocol. Asynchronous devices can always reply
  when a reply is ready and do not need to deal with other
  situations

- currently, none of our drivers use the flags since they drive
  virtual devices which do not block
2012-03-02 15:44:48 +00:00
Tomas Hruby
f19d8df184 VFS : simplification of handling asyn selects
- select_request_async() returns no ops by default

- wantops in do_select() always set correctly, do_select() does
  not need a special case for SUSPEND (and ugly code)
2012-03-02 15:44:48 +00:00
Tomas Hruby
369a12704f VFS - dev_style_asyn()
- dev_style_asyn() tests whether a device is asynchronous

 - simplifies code and helps readability
2012-03-02 15:44:47 +00:00
Tomas Hruby
35eb88461d VFS - cancel_nblock()
- duplicate code in dev_io() which sends CANCEL in case of a
  non-blocking operation moved to cancel_nblock()
2012-03-02 15:44:47 +00:00
Ben Gras
98afd590c4 include netdrv_tg3 on cd 2012-02-26 23:34:59 +01:00
Antoine Leca
adb5107e26 Cosmetic boot fix.
The NetBSD boot loader loads automatically the kernel module appropriate
for the detected root file system; it is preset at "ffs".  The MINIX3fs
support does not reset the underlying global variable, since there are
no use for this on MINIX.  As a result, the boot loader searches for
/ffs.kmod, and issues two warnings about "module failure to open/load."
2012-02-24 13:30:09 +01:00
Ben Gras
c543dcf205 fix for -lsys assert(): call panic()
. call panic() instead of abort() so that stacktraces are printed
	. also call printf(..) instead of fprintf(stderr, ..)
2012-02-24 13:09:39 +01:00
Ben Gras
a64ad3054b start modules at 16MB
. keep more memory free below 16MB for e.g. lance
2012-02-24 11:50:28 +01:00
Tomas Hruby
036ce9d4db Revert "SMP - no_apic=0 and acpi=1 set when CONFIG_SMP=y"
This reverts commit c468f4efa5.

Since we use the new boot loader, this hack is no longer necessary.
2012-02-24 10:16:55 +01:00
Arun Thomas
1f0bfa8519 kernel: Update copyright date 2012-02-22 16:36:26 +01:00
Thomas Veerman
eb4096ccd1 iso9660: link with libc
Prevents assert("inited") in _env.c (libc) from triggering.
2012-02-22 15:17:20 +00:00
Thomas Veerman
1efb51b1de VFS: improve crashed FS resource cleanup
When VFS detects that an FS has crashed and tries to clean up
resources, it marks fairly late in the process that a vmnt is not
to be used again (to send requests to). This allows a thread to
become blocked on a vmnt after all blocked threads were stopped, but
before it finds out it shouldn't try to send to that vmnt.
2012-02-22 13:54:35 +00:00
Ben Gras
04eb5d326a allow elvis to be invoked as ex 2012-02-22 01:51:19 +01:00
Arun Thomas
a17f6600ce mkimage: use a lower start address 2012-02-21 15:54:05 +01:00
Thomas Veerman
5ff845212e VFS: remove unused variables 2012-02-21 10:21:05 +00:00
Thomas Veerman
0c1cd8720a VFS: fix last_dir not returning last directory
If the provided path was only a single component (i.e., without
slashes), then last_dir would return early and skip the symlink
detection (i.e., check whether the path ends in a symlink and resolve
that first before returning). This bug triggered an assert in open
which expects that an advance after an last_dir (with VMNT_WRITE lock)
does not yield another vmnt lock.
2012-02-21 10:21:05 +00:00
Ben Gras
d25ded6d3d fix for git commit id from branch
. git would take remote repo HEAD otherwise
2012-02-21 01:20:00 +01:00
Ben Gras
ee305598c5 pkgin needn't be on cd 2012-02-20 23:55:44 +01:00
Ben Gras
ca47635d0a try multiple reset methods
. fixes reboot-hang under vbox
	. makes experience nicer under vmware
	. taken from netbsd reset code
2012-02-20 23:46:38 +01:00
Ben Gras
a953da6e10 release: can specify branch 2012-02-20 23:46:01 +01:00
Thomas Veerman
230ea1ce13 VFS: remove erroneous assert
The assert was meant as an additional check to the assert in link.c:198.
The reasoning behind the assert in link.c:198 is that once you've
obtained a write lock on a vmnt, you can't get an additional read lock
on the same vmnt. However, that does not always hold for the assert in
path.c:281 where the situation could be that you've obtained a read lock
and managed to get another read lock (this is possible). In other words,
the assert in path.c:281 is not the right place to check for that
situation.
2012-02-20 09:17:42 +00:00
Ben Gras
25fae1d7da portugese keymap
contributed by ralxc
2012-02-18 02:05:04 +01:00
8432 changed files with 1458720 additions and 210514 deletions

10
.gitignore vendored
View File

@@ -10,11 +10,13 @@ cscope.*
*.[1-9].gz
*.o
*.[psS]o
*.pico
lib*.so*
*.a
*.so.*
*.d
.depend
nbsdsrc/*
tools/revision
TAGS
tags
GPATH
@@ -33,7 +35,9 @@ usr.bin/mdocml/man/*.7
etc/passwd
etc/pwd.db
etc/spwd.db
tools/image
tools/kernel
releasetools/image
releasetools/kernel
releasetools/revision
share/zoneinfo/builddir
lib/libc/compat__*
.gdbinit

17
.gitreview Normal file
View File

@@ -0,0 +1,17 @@
# MINIX 3 code review setup.
#
# This gerrit code review configuration is meant for performing per commit
# internal code reviews. If you are an external contributor please read and
# apply http://wiki.minix3.org/en/HowToContribute
#
# Consider reading http://wiki.openstack.org/GerritWorkflow to learn how
# to install git review on a Linux setup. On Minix you can use pkgin to
# install git-review.
#
[gerrit]
# The git-minix host is to be configured in your .ssh/config
#
host=git-minix
port=2222
project=minix
defaultbranch=master

633
Makefile
View File

@@ -1,124 +1,545 @@
# Master Makefile to compile everything in /usr/src except the system.
# $NetBSD: Makefile,v 1.299 2012/08/17 16:22:27 joerg Exp $
#
# This is the top-level makefile for building NetBSD. For an outline of
# how to build a snapshot or release, as well as other release engineering
# information, see http://www.NetBSD.org/developers/releng/index.html
#
# Not everything you can set or do is documented in this makefile. In
# particular, you should review the files in /usr/share/mk (especially
# bsd.README) for general information on building programs and writing
# Makefiles within this structure, and see the comments in src/etc/Makefile
# for further information on installation and release set options.
#
# Variables listed below can be set on the make command line (highest
# priority), in /etc/mk.conf (middle priority), or in the environment
# (lowest priority).
#
# Variables:
# DESTDIR is the target directory for installation of the compiled
# software. It defaults to /. Note that programs are built against
# libraries installed in DESTDIR.
# MKMAN, if `no', will prevent building of manual pages.
# MKOBJDIRS, if not `no', will build object directories at
# an appropriate point in a build.
# MKSHARE, if `no', will prevent building and installing
# anything in /usr/share.
# MKUPDATE, if not `no', will avoid a `make cleandir' at the start of
# `make build', as well as having the effects listed in
# /usr/share/mk/bsd.README.
# NOCLEANDIR, if defined, will avoid a `make cleandir' at the start
# of the `make build'.
# NOINCLUDES will avoid the `make includes' usually done by `make build'.
#
# See mk.conf(5) for more details.
#
#
# Targets:
# build:
# Builds a full release of NetBSD in DESTDIR, except for the
# /etc configuration files.
# If BUILD_DONE is set, this is an empty target.
# distribution:
# Builds a full release of NetBSD in DESTDIR, including the /etc
# configuration files.
# buildworld:
# As per `make distribution', except that it ensures that DESTDIR
# is not the root directory.
# installworld:
# Install the distribution from DESTDIR to INSTALLWORLDDIR (which
# defaults to the root directory). Ensures that INSTALLWORLDDIR
# is not the root directory if cross compiling.
# release:
# Does a `make distribution', and then tars up the DESTDIR files
# into ${RELEASEDIR}/${RELEASEMACHINEDIR}, in release(7) format.
# (See etc/Makefile for more information on this.)
# regression-tests:
# Runs the regression tests in "regress" on this host.
# sets:
# Populate ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets
# from ${DESTDIR}
# sourcesets:
# Populate ${RELEASEDIR}/source/sets from ${NETBSDSRCDIR}
# syspkgs:
# Populate ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/syspkgs
# from ${DESTDIR}
# iso-image:
# Create CD-ROM image in RELEASEDIR/iso.
# RELEASEDIR must already have been populated by `make release'
# or equivalent.
# iso-image-source:
# Create CD-ROM image with source in RELEASEDIR/iso.
# RELEASEDIR must already have been populated by
# `make release sourcesets' or equivalent.
# live-image:
# Create bootable live image for emulators or USB stick etc.
# in RELEASEDIR/liveimage.
# RELEASEDIR must already have been populated by `make release'
# or equivalent.
# install-image:
# Create bootable installation image for USB stick etc.
# in RELEASEDIR/installimage.
# RELEASEDIR must already have been populated by `make release'
# or equivalent.
#
# Targets invoked by `make build,' in order:
# cleandir: cleans the tree.
# do-top-obj: creates the top level object directory.
# do-tools-obj: creates object directories for the host toolchain.
# do-tools: builds host toolchain.
# obj: creates object directories.
# do-distrib-dirs: creates the distribution directories.
# includes: installs include files.
# do-tools-compat: builds the "libnbcompat" library; needed for some
# random host tool programs in the source tree.
# do-lib: builds and installs prerequisites from lib
# if ${MKCOMPAT} != "no".
# do-compat-lib: builds and installs prerequisites from compat/lib
# if ${MKCOMPAT} != "no".
# do-build: builds and installs the entire system.
# do-x11: builds and installs X11 if ${MKX11} != "no"; either
# X11R7 from src/external/mit/xorg if ${X11FLAVOUR} == "Xorg"
# or X11R6 from src/x11
# do-extsrc: builds and installs extsrc if ${MKEXTSRC} != "no".
# do-obsolete: installs the obsolete sets (for the postinstall-* targets).
#
.if ${.MAKEFLAGS:M${.CURDIR}/share/mk} == ""
.MAKEFLAGS: -m ${.CURDIR}/share/mk
.endif
#
# If _SRC_TOP_OBJ_ gets set here, we will end up with a directory that may
# not be the top level objdir, because "make obj" can happen in the *middle*
# of "make build" (long after <bsd.own.mk> is calculated it). So, pre-set
# _SRC_TOP_OBJ_ here so it will not be added to ${.MAKEOVERRIDES}.
#
_SRC_TOP_OBJ_=
.include <bsd.own.mk>
MAKE=make
#
# Sanity check: make sure that "make build" is not invoked simultaneously
# with a standard recursive target.
#
usage:
@echo ""
@echo "Master Makefile for MINIX commands and utilities."
@echo "Root privileges are required for some actions."
@echo ""
@echo "Usage:"
@echo " make world # Compile everything (libraries & commands)"
@echo " make includes # Install include files from src/"
@echo " make libraries # Compile and install libraries"
@echo " make commands # Compile all, commands, but don't install"
@echo " make install # Compile and install commands"
@echo " make gnu-includes # Install include files for GCC"
@echo " make clean # Remove all compiler results"
@echo ""
@echo "Run 'make' in tools/ to create a new MINIX configuration."
@echo ""
.if make(build) || make(release) || make(snapshot)
.for targ in ${TARGETS:Nobj:Ncleandir}
.if make(${targ}) && !target(.BEGIN)
.BEGIN:
@echo 'BUILD ABORTED: "make build" and "make ${targ}" are mutually exclusive.'
@false
.endif
.endfor
.endif
# world has to be able to make a new system, even if there
# is no complete old system. it has to install commands, for which
# it has to install libraries, for which it has to install includes,
# for which it has to install /etc (for users and ownerships).
# etcfiles also creates a directory hierarchy in its
# 'make install' target.
#
# etcfiles has to be done first.
world: mkfiles etcfiles includes libraries dep-all install etcforce
#
# _SUBDIR is used to set SUBDIR, after removing directories that have
# BUILD_${dir}=no, or that have no ${dir}/Makefile.
#
_SUBDIR= tools lib .WAIT include gnu external crypto/external bin games
_SUBDIR+= libexec sbin usr.bin
_SUBDIR+= commands man
_SUBDIR+= common drivers kernel servers
_SUBDIR+= usr.sbin share rescue sys etc tests compat .WAIT distrib regress
mkfiles:
make -C share/mk install
.for dir in ${_SUBDIR}
.if "${dir}" == ".WAIT" \
|| (${BUILD_${dir}:Uyes} != "no" && exists(${dir}/Makefile))
SUBDIR+= ${dir}
.endif
.endfor
includes:
$(MAKE) -C include includes
$(MAKE) -C lib includes NBSD_LIBC=yes
.if exists(regress)
regression-tests: .PHONY .MAKE
@echo Running regression tests...
${MAKEDIRTARGET} regress regress
.endif
MKHEADERSS=/usr/pkg/gcc*/libexec/gcc/*/*/install-tools/mkheaders
gnu-includes: includes
SHELL=/bin/sh; for d in $(MKHEADERSS); do if [ -f $$d ] ; then sh -e $$d ; fi; done
.if ${MKUNPRIVED} != "no"
NOPOSTINSTALL= # defined
.endif
libraries: includes
$(MAKE) -C lib dependall install
afterinstall: .PHONY .MAKE
.if ${MKMAN} != "no"
.if !defined(__MINIX)
${MAKEDIRTARGET} share/man makedb
.else
${MAKEDIRTARGET} man makedb
.endif # !defined(__MINIX)
.endif
.if !defined(__MINIX)
.if (${MKUNPRIVED} != "no" && ${MKINFO} != "no")
${MAKEDIRTARGET} gnu/usr.bin/texinfo/install-info infodir-meta
.endif
.endif # !defined(__MINIX)
.if !defined(NOPOSTINSTALL)
${MAKEDIRTARGET} . postinstall-check
.endif
commands: includes libraries
$(MAKE) -C commands all
$(MAKE) -C bin all
$(MAKE) -C sbin all
$(MAKE) -C usr.bin all
$(MAKE) -C libexec all
$(MAKE) -C usr.sbin all
_POSTINSTALL= ${.CURDIR}/usr.sbin/postinstall/postinstall
_POSTINSTALL_ENV= \
AWK=${TOOL_AWK:Q} \
DB=${TOOL_DB:Q} \
HOST_SH=${HOST_SH:Q} \
MAKE=${MAKE:Q} \
PWD_MKDB=${TOOL_PWD_MKDB:Q} \
STAT=${TOOL_STAT:Q}
dep-all:
$(MAKE) -C sys dependall
$(MAKE) -C commands dependall
$(MAKE) -C bin dependall
$(MAKE) -C sbin dependall
$(MAKE) -C usr.bin dependall
$(MAKE) -C libexec dependall
$(MAKE) -C usr.sbin dependall
$(MAKE) -C kernel dependall
$(MAKE) -C servers dependall
$(MAKE) -C drivers dependall
postinstall-check: .PHONY
@echo " === Post installation checks ==="
${_POSTINSTALL_ENV} ${HOST_SH} ${_POSTINSTALL} -s ${.CURDIR} -d ${DESTDIR}/ check; if [ $$? -gt 1 ]; then exit 1; fi
@echo " ================================"
etcfiles:
$(MAKE) -C etc install
postinstall-fix: .NOTMAIN .PHONY
@echo " === Post installation fixes ==="
${_POSTINSTALL_ENV} ${HOST_SH} ${_POSTINSTALL} -s ${.CURDIR} -d ${DESTDIR}/ fix
@echo " ==============================="
etcforce:
$(MAKE) -C etc installforce
postinstall-fix-obsolete: .NOTMAIN .PHONY
@echo " === Removing obsolete files ==="
${_POSTINSTALL_ENV} ${HOST_SH} ${_POSTINSTALL} -s ${.CURDIR} -d ${DESTDIR}/ fix obsolete
@echo " ==============================="
all:
$(MAKE) -C sys all
$(MAKE) -C commands all
$(MAKE) -C bin all
$(MAKE) -C sbin all
$(MAKE) -C usr.bin all
$(MAKE) -C libexec all
$(MAKE) -C usr.sbin all
$(MAKE) -C tools all
install:
$(MAKE) -C sys install
$(MAKE) -C libexec install
$(MAKE) -C man install makedb
$(MAKE) -C commands install
$(MAKE) -C bin install
$(MAKE) -C sbin install
$(MAKE) -C usr.bin install
$(MAKE) -C usr.sbin install
$(MAKE) -C servers install
$(MAKE) -C share install
$(MAKE) -C tools install
#
# Targets (in order!) called by "make build".
#
.if defined(HAVE_GCC)
.if ${HAVE_GCC} == "4"
LIBGCC_EXT=4
BUILD_CC_LIB_BASEDIR= gnu/lib
BUILD_CC_LIB_BASETARGET= gnu-lib
.else
LIBGCC_EXT=
BUILD_CC_LIB_BASEDIR= external/gpl3/gcc/lib
BUILD_CC_LIB_BASETARGET= external-gpl3-gcc-lib
.endif
.endif
clean: mkfiles
$(MAKE) -C sys clean
$(MAKE) -C commands clean
$(MAKE) -C bin clean
$(MAKE) -C sbin clean
$(MAKE) -C usr.bin clean
$(MAKE) -C libexec clean
$(MAKE) -C usr.sbin clean
$(MAKE) -C share clean
$(MAKE) -C tools clean
$(MAKE) -C lib clean
$(MAKE) -C test clean
BUILDTARGETS+= check-tools
.if ${MKUPDATE} == "no" && !defined(NOCLEANDIR)
BUILDTARGETS+= cleandir
.endif
.if ${MKOBJDIRS} != "no"
BUILDTARGETS+= do-top-obj
.endif
.if ${USETOOLS} == "yes" # {
.if ${MKOBJDIRS} != "no"
BUILDTARGETS+= do-tools-obj
.endif
BUILDTARGETS+= do-tools
.endif # USETOOLS # }
.if ${MKOBJDIRS} != "no"
BUILDTARGETS+= obj
.endif
BUILDTARGETS+= clean_METALOG
.if !defined(NODISTRIBDIRS)
BUILDTARGETS+= do-distrib-dirs
.endif
.if !defined(NOINCLUDES)
BUILDTARGETS+= includes
.endif
BUILDTARGETS+= do-lib
.if !defined(__MINIX)
# LSC Not used in MINIX3
BUILDTARGETS+= do-compat-lib
.endif # !defined(__MINIX)
BUILDTARGETS+= do-build
.if ${MKX11} != "no"
BUILDTARGETS+= do-x11
.endif
.if ${MKEXTSRC} != "no"
BUILDTARGETS+= do-extsrc
.endif
BUILDTARGETS+= do-obsolete
cleandepend: mkfiles
$(MAKE) -C lib cleandepend
$(MAKE) -C sys cleandepend
$(MAKE) -C commands cleandepend
$(MAKE) -C bin cleandepend
$(MAKE) -C sbin cleandepend
$(MAKE) -C usr.bin cleandepend
$(MAKE) -C libexec cleandepend
$(MAKE) -C usr.sbin cleandepend
$(MAKE) -C tools cleandepend
#
# Enforce proper ordering of some rules.
#
# Warn usage change
elf-libraries:
echo "That target is just libraries now."
false
.ORDER: ${BUILDTARGETS}
includes-lib: .PHONY includes-include includes-sys
includes-gnu: .PHONY includes-lib
#
# Build the system and install into DESTDIR.
#
START_TIME!= date
.if defined(__MINIX)
world: build .PHONY .MAKE
${MAKEDIRTARGET} . etcfiles
@echo "WARNING: "
@echo "WARNING: The 'world' target is obsolete, please use 'build' instead."
@echo "WARNING: "
etcfiles: .PHONY .MAKE
${MAKEDIRTARGET} etc install-etc-files-safe DESTDIR=${DESTDIR:U/}
etcforce: .PHONY .MAKE
${MAKEDIRTARGET} etc install-etc-files DESTDIR=${DESTDIR:U/}
.endif # defined(__MINIX)
build: .PHONY .MAKE
.if defined(BUILD_DONE)
@echo "Build already installed into ${DESTDIR}"
.else
@echo "Build started at: ${START_TIME}"
.for tgt in ${BUILDTARGETS}
${MAKEDIRTARGET} . ${tgt}
.endfor
${MAKEDIRTARGET} etc install-etc-release
.if defined(__MINIX)
${MAKEDIRTARGET} releasetools do-hdboot
.endif # defined(__MINIX)
@echo "Build started at: ${START_TIME}"
@printf "Build finished at: " && date
.endif
#
# Build a full distribution, but not a release (i.e. no sets into
# ${RELEASEDIR}). "buildworld" enforces a build to ${DESTDIR} != /
#
distribution buildworld: .PHONY .MAKE
.if make(buildworld) && \
(!defined(DESTDIR) || ${DESTDIR} == "" || ${DESTDIR} == "/")
@echo "Won't make ${.TARGET} with DESTDIR=/"
@false
.endif
${MAKEDIRTARGET} . build NOPOSTINSTALL=1
${MAKEDIRTARGET} etc distribution INSTALL_DONE=1
.if defined(DESTDIR) && ${DESTDIR} != "" && ${DESTDIR} != "/" && ${CHECKFLIST:Uyes} == "yes"
${MAKEDIRTARGET} . postinstall-fix-obsolete
${MAKEDIRTARGET} distrib/sets checkflist
.endif
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
#
# Install the distribution from $DESTDIR to $INSTALLWORLDDIR (defaults to `/')
# If installing to /, ensures that the host's operating system is NetBSD and
# the host's `uname -m` == ${MACHINE}.
#
HOST_UNAME_S!= uname -s
.if ${HOST_OSTYPE:C/\-.*//} != "Minix"
HOST_UNAME_M!= uname -m
.else
HOST_UNAME_M:= ${MACHINE}
.endif
installworld: .PHONY .MAKE
.if (!defined(DESTDIR) || ${DESTDIR} == "" || ${DESTDIR} == "/")
@echo "Can't make ${.TARGET} to DESTDIR=/"
@false
.endif
.if !defined(INSTALLWORLDDIR) || \
${INSTALLWORLDDIR} == "" || ${INSTALLWORLDDIR} == "/"
.if (${HOST_UNAME_S} != "Minix")
@echo "Won't cross-make ${.TARGET} from ${HOST_UNAME_S} to Minix with INSTALLWORLDDIR=/"
@false
.endif
.if (${HOST_UNAME_M} != ${MACHINE})
@echo "Won't cross-make ${.TARGET} from ${HOST_UNAME_M} to ${MACHINE} with INSTALLWORLDDIR=/"
@false
.endif
.endif
${MAKEDIRTARGET} distrib/sets installsets \
INSTALLDIR=${INSTALLWORLDDIR:U/} INSTALLSETS=${INSTALLSETS:Q}
${MAKEDIRTARGET} . postinstall-check DESTDIR=${INSTALLWORLDDIR}
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
#
# Install modules from $DESTDIR to $INSTALLMODULESDIR
#
installmodules: .PHONY .MAKE
.if (!defined(DESTDIR) || ${DESTDIR} == "" || ${DESTDIR} == "/")
@echo "Can't make ${.TARGET} to DESTDIR=/"
@false
.endif
.if !defined(INSTALLMODULESDIR) || \
${INSTALLMODULESDIR} == "" || ${INSTALLMODULESDIR} == "/"
.if (${HOST_UNAME_S} != "NetBSD")
@echo "Won't cross-make ${.TARGET} from ${HOST_UNAME_S} to NetBSD with INSTALLMODULESDIR=/"
@false
.endif
.if (${HOST_UNAME_M} != ${MACHINE})
@echo "Won't cross-make ${.TARGET} from ${HOST_UNAME_M} to ${MACHINE} with INSTALLMODULESDIR=/"
@false
.endif
.endif
${MAKEDIRTARGET} sys/modules install DESTDIR=${INSTALLMODULESDIR:U/}
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
#
# Create sets from $DESTDIR or $NETBSDSRCDIR into $RELEASEDIR
#
.for tgt in sets sourcesets syspkgs
${tgt}: .PHONY .MAKE
${MAKEDIRTARGET} distrib/sets ${tgt}
.endfor
#
# Build a release or snapshot (implies "make distribution"). Note that
# in this case, the set lists will be checked before the tar files
# are made.
#
release snapshot: .PHONY .MAKE
${MAKEDIRTARGET} . distribution
${MAKEDIRTARGET} etc release DISTRIBUTION_DONE=1
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
#
# Create a CD-ROM image.
#
iso-image: .PHONY
${MAKEDIRTARGET} distrib iso_image
${MAKEDIRTARGET} etc iso-image
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
iso-image-source: .PHONY
${MAKEDIRTARGET} distrib iso_image CDSOURCE=true
${MAKEDIRTARGET} etc iso-image
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
#
# Create bootable live images.
#
live-image: .PHONY
${MAKEDIRTARGET} etc live-image
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
#
# Create bootable installation images.
#
install-image: .PHONY
${MAKEDIRTARGET} etc install-image
@echo "make ${.TARGET} started at: ${START_TIME}"
@printf "make ${.TARGET} finished at: " && date
#
# Special components of the "make build" process.
#
check-tools: .PHONY
.if ${TOOLCHAIN_MISSING} != "no" && !defined(EXTERNAL_TOOLCHAIN)
@echo '*** WARNING: Building on MACHINE=${MACHINE} with missing toolchain.'
@echo '*** May result in a failed build or corrupt binaries!'
.elif defined(EXTERNAL_TOOLCHAIN)
@echo '*** Using external toolchain rooted at ${EXTERNAL_TOOLCHAIN}.'
.endif
.if defined(NBUILDJOBS)
@echo '*** WARNING: NBUILDJOBS is obsolete; use -j directly instead!'
.endif
# Delete or sanitise a leftover METALOG from a previous build.
clean_METALOG: .PHONY .MAKE
.if ${MKUPDATE} != "no"
${MAKEDIRTARGET} distrib/sets clean_METALOG
.endif
do-distrib-dirs: .PHONY .MAKE
.if !defined(DESTDIR) || ${DESTDIR} == ""
${MAKEDIRTARGET} etc distrib-dirs DESTDIR=/
.else
${MAKEDIRTARGET} etc distrib-dirs DESTDIR=${DESTDIR}
.endif
.for targ in cleandir obj includes
do-${targ}: .PHONY ${targ}
@true
.endfor
.for dir in tools tools/compat
do-${dir:S/\//-/g}: .PHONY .MAKE
.for targ in dependall install
${MAKEDIRTARGET} ${dir} ${targ}
.endfor
.endfor
do-lib: .PHONY .MAKE
${MAKEDIRTARGET} lib build_install
do-compat-lib: .PHONY .MAKE
${MAKEDIRTARGET} compat build_install BOOTSTRAP_SUBDIRS="../../../lib"
do-top-obj: .PHONY .MAKE
${MAKEDIRTARGET} . obj NOSUBDIR=
do-tools-obj: .PHONY .MAKE
${MAKEDIRTARGET} tools obj
do-build: .PHONY .MAKE
.for targ in dependall install
${MAKEDIRTARGET} . ${targ} BUILD_tools=no BUILD_lib=no
.endfor
do-x11: .PHONY .MAKE
.if ${MKX11} != "no"
.if ${X11FLAVOUR} == "Xorg"
${MAKEDIRTARGET} external/mit/xorg build
.else
${MAKEDIRTARGET} x11 build
.endif
.else
@echo "MKX11 is not enabled"
@false
.endif
do-extsrc: .PHONY .MAKE
.if ${MKEXTSRC} != "no"
${MAKEDIRTARGET} extsrc build
.else
@echo "MKEXTSRC is not enabled"
@false
.endif
do-obsolete: .PHONY .MAKE
${MAKEDIRTARGET} etc install-obsolete-lists
#
# Speedup stubs for some subtrees that don't need to run these rules.
# (Tells <bsd.subdir.mk> not to recurse for them.)
#
.for dir in bin etc distrib games libexec regress sbin usr.bin usr.sbin tools
includes-${dir}: .PHONY
@true
.endfor
.for dir in etc distrib regress
install-${dir}: .PHONY
@true
.endfor
#
# XXX this needs to change when distrib Makefiles are recursion compliant
# XXX many distrib subdirs need "cd etc && make snap_pre snap_kern" first...
#
dependall-distrib depend-distrib all-distrib: .PHONY
@true
.include <bsd.sys.mk>
.include <bsd.obj.mk>
.include <bsd.kernobj.mk>
.include <bsd.subdir.mk>
#
# Display current make(1) parameters
#
params: .PHONY .MAKE
${MAKEDIRTARGET} etc params

View File

@@ -1,7 +1,7 @@
# Makefile for bin
# $NetBSD: Makefile,v 1.22 2007/12/31 15:31:24 ad Exp $
# @(#)Makefile 8.1 (Berkeley) 5/31/93
.include <bsd.own.mk>
SUBDIR= mkdir rm rmdir date
SUBDIR= cat date echo ed expr kill ln ls \
mkdir pax pwd rm rmdir sync test
.include <bsd.subdir.mk>

View File

@@ -1,4 +1,11 @@
CPPFLAGS+= -D_NETBSD_SOURCE
# $NetBSD: Makefile.inc,v 1.17 2012/03/21 05:47:53 matt Exp $
# @(#)Makefile.inc 8.1 (Berkeley) 5/31/93
BINDIR?=/bin
.include <bsd.own.mk> # for MKDYNAMICROOT definition
WARNS?= 5
BINDIR?= /bin
.if (${MKDYNAMICROOT} == "no")
LDSTATIC?= -static
.endif

6
bin/cat/Makefile Normal file
View File

@@ -0,0 +1,6 @@
# $NetBSD: Makefile,v 1.12 2003/05/18 07:57:31 lukem Exp $
# @(#)Makefile 8.1 (Berkeley) 5/31/93
PROG= cat
.include <bsd.prog.mk>

209
bin/cat/cat.1 Normal file
View File

@@ -0,0 +1,209 @@
.\" $NetBSD: cat.1,v 1.32 2006/09/23 11:24:44 wiz Exp $
.\"
.\" Copyright (c) 1989, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" the Institute of Electrical and Electronics Engineers, 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.
.\"
.\" @(#)cat.1 8.3 (Berkeley) 5/2/95
.\"
.Dd September 23, 2006
.Dt CAT 1
.Os
.Sh NAME
.Nm cat
.Nd concatenate and print files
.Sh SYNOPSIS
.Nm
.Op Fl beflnstuv
.Op Fl
.Op Ar
.Sh DESCRIPTION
The
.Nm
utility reads files sequentially, writing them to the standard output.
The
.Ar file
operands are processed in command line order.
A single dash represents the standard input,
and may appear multiple times in the
.Ar file
list.
.Pp
The word
.Dq concatenate
is just a verbose synonym for
.Dq catenate .
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl b
Implies the
.Fl n
option but doesn't number blank lines.
.It Fl e
Implies the
.Fl v
option, and displays a dollar sign
.Pq Ql \&$
at the end of each line
as well.
.It Fl f
Only attempt to display regular files.
.It Fl l
Set an exclusive advisory lock on the standard output file descriptor.
This lock is set using
.Xr fcntl 2
with the
.Dv F_SETLKW
command.
If the output file is already locked,
.Nm
will block until the lock is acquired.
.It Fl n
Number the output lines, starting at 1.
.It Fl s
Squeeze multiple adjacent empty lines, causing the output to be
single spaced.
.It Fl t
Implies the
.Fl v
option, and displays tab characters as
.Ql ^I
as well.
.It Fl u
The
.Fl u
option guarantees that the output is unbuffered.
.It Fl v
Displays non-printing characters so they are visible.
Control characters print as
.Ql ^X
for control-X; the delete
character (octal 0177) prints as
.Ql ^? .
Non-ascii characters (with the high bit set) are printed as
.Ql M-
(for meta) followed by the character for the low 7 bits.
.El
.Sh EXIT STATUS
The
.Nm
utility exits 0 on success, and \*[Gt]0 if an error occurs.
.Sh EXAMPLES
The command:
.Bd -literal -offset indent
.Ic cat file1
.Ed
.Pp
will print the contents of
.Ar file1
to the standard output.
.Pp
The command:
.Bd -literal -offset indent
.Ic cat file1 file2 \*[Gt] file3
.Ed
.Pp
will sequentially print the contents of
.Ar file1
and
.Ar file2
to the file
.Ar file3 ,
truncating
.Ar file3
if it already exists.
See the manual page for your shell (i.e.,
.Xr sh 1 )
for more information on redirection.
.Pp
The command:
.Bd -literal -offset indent
.Ic cat file1 - file2 - file3
.Ed
.Pp
will print the contents of
.Ar file1 ,
print data it receives from the standard input until it receives an
.Dv EOF
.Pq Sq ^D
character, print the contents of
.Ar file2 ,
read and output contents of the standard input again, then finally output
the contents of
.Ar file3 .
Note that if the standard input referred to a file, the second dash
on the command-line would have no effect, since the entire contents of the file
would have already been read and printed by
.Nm
when it encountered the first
.Ql \&-
operand.
.Sh SEE ALSO
.Xr head 1 ,
.Xr hexdump 1 ,
.Xr lpr 1 ,
.Xr more 1 ,
.Xr pr 1 ,
.Xr tail 1 ,
.Xr view 1 ,
.Xr vis 1 ,
.Xr fcntl 2
.Rs
.%A Rob Pike
.%T "UNIX Style, or cat -v Considered Harmful"
.%J "USENIX Summer Conference Proceedings"
.%D 1983
.Re
.Sh STANDARDS
The
.Nm
utility is expected to conform to the
.St -p1003.2-92
specification.
.Pp
The flags
.Op Fl belnstv
are extensions to the specification.
.Sh HISTORY
A
.Nm
utility appeared in
.At v1 .
Dennis Ritchie designed and wrote the first man page.
It appears to have been
.Xr cat 1 .
.Sh BUGS
Because of the shell language mechanism used to perform output
redirection, the command
.Dq Li cat file1 file2 \*[Gt] file1
will cause the original data in file1 to be destroyed!
This is performed by the shell before
.Nm
is run.

316
bin/cat/cat.c Normal file
View File

@@ -0,0 +1,316 @@
/* $NetBSD: cat.c,v 1.47 2008/07/20 00:52:39 lukem Exp $ */
/*
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Kevin Fall.
*
* 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.
*/
#if HAVE_NBTOOL_CONFIG_H
#include "nbtool_config.h"
#endif
#include <sys/cdefs.h>
#if !defined(lint)
__COPYRIGHT(
"@(#) Copyright (c) 1989, 1993\
The Regents of the University of California. All rights reserved.");
#if 0
static char sccsid[] = "@(#)cat.c 8.2 (Berkeley) 4/27/95";
#else
__RCSID("$NetBSD: cat.c,v 1.47 2008/07/20 00:52:39 lukem Exp $");
#endif
#endif /* not lint */
#include <sys/param.h>
#include <sys/stat.h>
#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int bflag, eflag, fflag, lflag, nflag, sflag, tflag, vflag;
int rval;
const char *filename;
int main(int, char *[]);
void cook_args(char *argv[]);
void cook_buf(FILE *);
void raw_args(char *argv[]);
void raw_cat(int);
int
main(int argc, char *argv[])
{
int ch;
struct flock stdout_lock;
setprogname(argv[0]);
(void)setlocale(LC_ALL, "");
while ((ch = getopt(argc, argv, "beflnstuv")) != -1)
switch (ch) {
case 'b':
bflag = nflag = 1; /* -b implies -n */
break;
case 'e':
eflag = vflag = 1; /* -e implies -v */
break;
case 'f':
fflag = 1;
break;
case 'l':
lflag = 1;
break;
case 'n':
nflag = 1;
break;
case 's':
sflag = 1;
break;
case 't':
tflag = vflag = 1; /* -t implies -v */
break;
case 'u':
setbuf(stdout, NULL);
break;
case 'v':
vflag = 1;
break;
default:
case '?':
(void)fprintf(stderr,
"usage: cat [-beflnstuv] [-] [file ...]\n");
exit(EXIT_FAILURE);
/* NOTREACHED */
}
argv += optind;
if (lflag) {
stdout_lock.l_len = 0;
stdout_lock.l_start = 0;
stdout_lock.l_type = F_WRLCK;
stdout_lock.l_whence = SEEK_SET;
if (fcntl(STDOUT_FILENO, F_SETLKW, &stdout_lock) == -1)
err(EXIT_FAILURE, "stdout");
}
if (bflag || eflag || nflag || sflag || tflag || vflag)
cook_args(argv);
else
raw_args(argv);
if (fclose(stdout))
err(EXIT_FAILURE, "stdout");
return (rval);
}
void
cook_args(char **argv)
{
FILE *fp;
fp = stdin;
filename = "stdin";
do {
if (*argv) {
if (!strcmp(*argv, "-"))
fp = stdin;
else if ((fp = fopen(*argv,
fflag ? "rf" : "r")) == NULL) {
warn("%s", *argv);
rval = EXIT_FAILURE;
++argv;
continue;
}
filename = *argv++;
}
cook_buf(fp);
if (fp != stdin)
(void)fclose(fp);
else
clearerr(fp);
} while (*argv);
}
void
cook_buf(FILE *fp)
{
int ch, gobble, line, prev;
line = gobble = 0;
for (prev = '\n'; (ch = getc(fp)) != EOF; prev = ch) {
if (prev == '\n') {
if (ch == '\n') {
if (sflag) {
if (!gobble && nflag && !bflag)
(void)fprintf(stdout,
"%6d\t\n", ++line);
else if (!gobble && putchar(ch) == EOF)
break;
gobble = 1;
continue;
}
if (nflag) {
if (!bflag) {
(void)fprintf(stdout,
"%6d\t", ++line);
if (ferror(stdout))
break;
} else if (eflag) {
(void)fprintf(stdout,
"%6s\t", "");
if (ferror(stdout))
break;
}
}
} else if (nflag) {
(void)fprintf(stdout, "%6d\t", ++line);
if (ferror(stdout))
break;
}
}
gobble = 0;
if (ch == '\n') {
if (eflag)
if (putchar('$') == EOF)
break;
} else if (ch == '\t') {
if (tflag) {
if (putchar('^') == EOF || putchar('I') == EOF)
break;
continue;
}
} else if (vflag) {
if (!isascii(ch)) {
if (putchar('M') == EOF || putchar('-') == EOF)
break;
ch = toascii(ch);
}
if (iscntrl(ch)) {
if (putchar('^') == EOF ||
putchar(ch == '\177' ? '?' :
ch | 0100) == EOF)
break;
continue;
}
}
if (putchar(ch) == EOF)
break;
}
if (ferror(fp)) {
warn("%s", filename);
rval = EXIT_FAILURE;
clearerr(fp);
}
if (ferror(stdout))
err(EXIT_FAILURE, "stdout");
}
void
raw_args(char **argv)
{
int fd;
fd = fileno(stdin);
filename = "stdin";
do {
if (*argv) {
if (!strcmp(*argv, "-"))
fd = fileno(stdin);
else if (fflag) {
struct stat st;
fd = open(*argv, O_RDONLY|O_NONBLOCK, 0);
if (fd < 0)
goto skip;
if (fstat(fd, &st) == -1) {
close(fd);
goto skip;
}
if (!S_ISREG(st.st_mode)) {
close(fd);
warnx("%s: not a regular file", *argv);
goto skipnomsg;
}
}
else if ((fd = open(*argv, O_RDONLY, 0)) < 0) {
skip:
warn("%s", *argv);
skipnomsg:
rval = EXIT_FAILURE;
++argv;
continue;
}
filename = *argv++;
}
raw_cat(fd);
if (fd != fileno(stdin))
(void)close(fd);
} while (*argv);
}
void
raw_cat(int rfd)
{
static char *buf;
static char fb_buf[BUFSIZ];
static size_t bsize;
ssize_t nr, nw, off;
int wfd;
wfd = fileno(stdout);
if (buf == NULL) {
struct stat sbuf;
if (fstat(wfd, &sbuf) == 0 &&
sbuf.st_blksize > sizeof(fb_buf)) {
bsize = sbuf.st_blksize;
buf = malloc(bsize);
}
if (buf == NULL) {
bsize = sizeof(fb_buf);
buf = fb_buf;
}
}
while ((nr = read(rfd, buf, bsize)) > 0)
for (off = 0; nr; nr -= nw, off += nw)
if ((nw = write(wfd, buf + off, (size_t)nr)) < 0)
err(EXIT_FAILURE, "stdout");
if (nr < 0) {
warn("%s", filename);
rval = EXIT_FAILURE;
}
}

6
bin/echo/Makefile Normal file
View File

@@ -0,0 +1,6 @@
# $NetBSD: Makefile,v 1.8 1997/07/20 22:36:53 christos Exp $
# @(#)Makefile 8.1 (Berkeley) 5/31/93
PROG= echo
.include <bsd.prog.mk>

68
bin/echo/echo.1 Normal file
View File

@@ -0,0 +1,68 @@
.\" $NetBSD: echo.1,v 1.13 2003/08/07 09:05:12 agc Exp $
.\"
.\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" the Institute of Electrical and Electronics Engineers, 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.
.\"
.\" @(#)echo.1 8.1 (Berkeley) 7/22/93
.\"
.Dd July 22, 1993
.Dt ECHO 1
.Os
.Sh NAME
.Nm echo
.Nd write arguments to the standard output
.Sh SYNOPSIS
.Nm
.Op Fl n
.Op Ar string ...
.Sh DESCRIPTION
The
.Nm
utility writes any specified operands, separated by single blank (`` '')
characters and followed by a newline (``\en'') character, to the standard
output.
.Pp
The following option is available:
.Bl -tag -width flag
.It Fl n
Do not print the trailing newline character.
.El
.Sh EXIT STATUS
The
.Nm
utility exits 0 on success, and \*[Gt]0 if an error occurs.
.Sh SEE ALSO
.Xr printf 1
.Sh STANDARDS
The
.Nm
utility is expected to be
.St -p1003.2
compatible.

83
bin/echo/echo.c Normal file
View File

@@ -0,0 +1,83 @@
/* $NetBSD: echo.c,v 1.18 2008/09/18 05:42:08 dholland Exp $ */
/*
* Copyright (c) 1989, 1993
* The Regents of the University of California. 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.
* 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.
*/
#include <sys/cdefs.h>
#ifndef lint
__COPYRIGHT(
"@(#) Copyright (c) 1989, 1993\
The Regents of the University of California. All rights reserved.");
#endif /* not lint */
#ifndef lint
#if 0
static char sccsid[] = "@(#)echo.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: echo.c,v 1.18 2008/09/18 05:42:08 dholland Exp $");
#endif
#endif /* not lint */
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int, char *[]);
/* ARGSUSED */
int
main(int argc, char *argv[])
{
int nflag;
setprogname(argv[0]);
(void)setlocale(LC_ALL, "");
/* This utility may NOT do getopt(3) option parsing. */
if (*++argv && !strcmp(*argv, "-n")) {
++argv;
nflag = 1;
}
else
nflag = 0;
while (*argv) {
(void)printf("%s", *argv);
if (*++argv)
(void)putchar(' ');
}
if (nflag == 0)
(void)putchar('\n');
fflush(stdout);
if (ferror(stdout))
exit(1);
exit(0);
/* NOTREACHED */
}

20
bin/ed/Makefile Normal file
View File

@@ -0,0 +1,20 @@
# $NetBSD: Makefile,v 1.36 2009/07/26 01:58:20 dholland Exp $
.include <bsd.own.mk>
PROG= ed
CPPFLAGS+=-DBACKWARDS
.if (${MKCRYPTO} != "no")
CPPFLAGS+=-DDES
.endif
SRCS= buf.c cbc.c glbl.c io.c main.c re.c sub.c undo.c
LDADD+= -lcrypt
DPADD+= ${LIBCRYPT}
#LINKS= ${BINDIR}/ed ${BINDIR}/red
#MLINKS= ed.1 red.1
.include <bsd.prog.mk>

103
bin/ed/POSIX Normal file
View File

@@ -0,0 +1,103 @@
$NetBSD: POSIX,v 1.10 1999/11/18 19:16:34 kristerw Exp $
This version of ed(1) is not strictly POSIX compliant, as described in
the POSIX 1003.2 document. The following is a summary of the omissions,
extensions and possible deviations from POSIX 1003.2.
OMISSIONS
---------
1) Locale(3) is not supported yet.
2) For backwards compatibility, the POSIX rule that says a range of
addresses cannot be used where only a single address is expected has
been relaxed.
3) To support the BSD `s' command (see extension [1] below),
substitution patterns cannot be delimited by numbers or the characters
`r', `g' and `p'. In contrast, POSIX specifies any character expect
space or newline can used as a delimiter.
EXTENSIONS
----------
1) BSD commands have been implemented wherever they do not conflict with
the POSIX standard. The BSD-ism's included are:
i) `s' (i.e., s[n][rgp]*) to repeat a previous substitution,
ii) `W' for appending text to an existing file,
iii) `wq' for exiting after a write,
iv) `z' for scrolling through the buffer, and
v) BSD line addressing syntax (i.e., `^' and `%') is recognized.
2) If crypt(3) is available, files can be read and written using DES
encryption. The `x' command prompts the user to enter a key used for
encrypting/ decrypting subsequent reads and writes. If only a newline
is entered as the key, then encryption is disabled. Otherwise, a key
is read in the same manner as a password entry. The key remains in
effect until encryption is disabled. For more information on the
encryption algorithm, see the bdes(1) man page. Encryption/decryption
should be fully compatible with SunOS des(1).
3) The POSIX interactive global commands `G' and `V' are extended to
support multiple commands, including `a', `i' and `c'. The command
format is the same as for the global commands `g' and `v', i.e., one
command per line with each line, except for the last, ending in a
backslash (\).
4) An extension to the POSIX file commands `E', `e', `r', `W' and `w' is
that <file> arguments are processed for backslash escapes, i.e., any
character preceded by a backslash is interpreted literally. If the
first unescaped character of a <file> argument is a bang (!), then the
rest of the line is interpreted as a shell command, and no escape
processing is performed by ed.
5) For SunOS ed(1) compatibility, ed runs in restricted mode if invoked
as red. This limits editing of files in the local directory only and
prohibits shell commands.
DEVIATIONS
----------
1) Though ed is not a stream editor, it can be used to edit binary files.
To assist in binary editing, when a file containing at least one ASCII
NUL character is written, a newline is not appended if it did not
already contain one upon reading. In particular, reading /dev/null
prior to writing prevents appending a newline to a binary file.
For example, to create a file with ed containing a single NUL character:
$ ed file
a
^@
.
r /dev/null
wq
Similarly, to remove a newline from the end of binary `file':
$ ed file
r /dev/null
wq
2) Since the behavior of `u' (undo) within a `g' (global) command list is
not specified by POSIX, it follows the behavior of the SunOS ed:
undo forces a global command list to be executed only once, rather than
for each line matching a global pattern. In addtion, each instance of
`u' within a global command undoes all previous commands (including
undo's) in the command list. This seems the best way, since the
alternatives are either too complicated to implement or too confusing
to use.
The global/undo combination is useful for masking errors that
would otherwise cause a script to fail. For instance, an ed script
to remove any occurrences of either `censor1' or `censor2' might be
written as:
ed - file <<EOF
1g/.*/u\
,s/censor1//g\
,s/censor2//g
...
3) The `m' (move) command within a `g' command list also follows the SunOS
ed implementation: any moved lines are removed from the global command's
`active' list.
4) If ed is invoked with a name argument prefixed by a bang (!), then the
remainder of the argument is interpreted as a shell command. To invoke
ed on a file whose name starts with bang, prefix the name with a
backslash.

24
bin/ed/README Normal file
View File

@@ -0,0 +1,24 @@
$NetBSD: README,v 1.9 1995/03/21 09:04:33 cgd Exp $
ed is an 8-bit-clean, POSIX-compliant line editor. It should work with
any regular expression package that conforms to the POSIX interface
standard, such as GNU regex(3).
If reliable signals are supported (e.g., POSIX sigaction(2)), it should
compile with little trouble. Otherwise, the macros SPL1() and SPL0()
should be redefined to disable interrupts.
The following compiler directives are recognized:
DES - to add encryption support (requires crypt(3))
NO_REALLOC_NULL - if realloc(3) does not accept a NULL pointer
BACKWARDS - for backwards compatibility
NEED_INSQUE - if insque(3) is missing
The file `POSIX' describes extensions to and deviations from the POSIX
standard.
The ./test directory contains regression tests for ed. The README
file in that directory explains how to run these.
For a description of the ed algorithm, see Kernighan and Plauger's book
"Software Tools in Pascal," Addison-Wesley, 1981.

319
bin/ed/buf.c Normal file
View File

@@ -0,0 +1,319 @@
/* $NetBSD: buf.c,v 1.26 2006/03/17 14:37:14 rumble Exp $ */
/* buf.c: This file contains the scratch-file buffer routines for the
ed line editor. */
/*-
* Copyright (c) 1993 Andrew Moore, Talke Studio.
* 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 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 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.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char *rcsid = "@(#)buf.c,v 1.4 1994/02/01 00:34:35 alm Exp";
#else
__RCSID("$NetBSD: buf.c,v 1.26 2006/03/17 14:37:14 rumble Exp $");
#endif
#endif /* not lint */
#include <sys/file.h>
#include <sys/stat.h>
#include <paths.h>
#include <stdio.h>
#include <err.h>
#include "ed.h"
FILE *sfp; /* scratch file pointer */
off_t sfseek; /* scratch file position */
int seek_write; /* seek before writing */
line_t buffer_head; /* incore buffer */
/* get_sbuf_line: get a line of text from the scratch file; return pointer
to the text */
char *
get_sbuf_line(line_t *lp)
{
static char *sfbuf = NULL; /* buffer */
static int sfbufsz = 0; /* buffer size */
int len, ct;
if (lp == &buffer_head)
return NULL;
seek_write = 1; /* force seek on write */
/* out of position */
if (sfseek != lp->seek) {
sfseek = lp->seek;
if (fseek(sfp, sfseek, SEEK_SET) < 0) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "cannot seek temp file");
return NULL;
}
}
len = lp->len;
REALLOC(sfbuf, sfbufsz, len + 1, NULL);
if ((ct = fread(sfbuf, sizeof(char), len, sfp)) < 0 || ct != len) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "cannot read temp file");
return NULL;
}
sfseek += len; /* update file position */
sfbuf[len] = '\0';
return sfbuf;
}
/* put_sbuf_line: write a line of text to the scratch file and add a line node
to the editor buffer; return a pointer to the end of the text */
char *
put_sbuf_line(char *cs)
{
line_t *lp;
int len, ct;
char *s;
if ((lp = (line_t *) malloc(sizeof(line_t))) == NULL) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "out of memory");
return NULL;
}
/* assert: cs is '\n' terminated */
for (s = cs; *s != '\n'; s++)
;
if (s - cs >= LINECHARS) {
sprintf(errmsg, "line too long");
free(lp);
return NULL;
}
len = s - cs;
/* out of position */
if (seek_write) {
if (fseek(sfp, 0L, SEEK_END) < 0) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "cannot seek temp file");
free(lp);
return NULL;
}
sfseek = ftell(sfp);
seek_write = 0;
}
/* assert: SPL1() */
if ((ct = fwrite(cs, sizeof(char), len, sfp)) < 0 || ct != len) {
sfseek = -1;
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "cannot write temp file");
free(lp);
return NULL;
}
lp->len = len;
lp->seek = sfseek;
add_line_node(lp);
sfseek += len; /* update file position */
return ++s;
}
/* add_line_node: add a line node in the editor buffer after the current line */
void
add_line_node(line_t *lp)
{
line_t *cp;
cp = get_addressed_line_node(current_addr); /* this get_addressed_line_node last! */
INSQUE(lp, cp);
addr_last++;
current_addr++;
}
/* get_line_node_addr: return line number of pointer */
long
get_line_node_addr(line_t *lp)
{
line_t *cp = &buffer_head;
long n = 0;
while (cp != lp && (cp = cp->q_forw) != &buffer_head)
n++;
if (n && cp == &buffer_head) {
sprintf(errmsg, "invalid address");
return ERR;
}
return n;
}
/* get_addressed_line_node: return pointer to a line node in the editor buffer */
line_t *
get_addressed_line_node(long n)
{
static line_t *lp = &buffer_head;
static long on = 0;
SPL1();
if (n > on) {
if (n <= (on + addr_last) >> 1) {
for (; on < n; on++)
lp = lp->q_forw;
} else {
lp = buffer_head.q_back;
for (on = addr_last; on > n; on--)
lp = lp->q_back;
}
} else {
if (n >= on >> 1) {
for (; on > n; on--)
lp = lp->q_back;
} else {
lp = &buffer_head;
for (on = 0; on < n; on++)
lp = lp->q_forw;
}
}
SPL0();
return lp;
}
char *sfn = NULL; /* scratch file name */
/* open_sbuf: open scratch file */
int
open_sbuf(void)
{
int u, fd;
const char *tmp;
size_t s;
isbinary = newline_added = 0;
fd = -1;
u = umask(077);
if ((tmp = getenv("TMPDIR")) == NULL)
tmp = _PATH_TMP;
if ((s = strlen(tmp)) == 0 || tmp[s - 1] == '/')
(void)asprintf(&sfn, "%sed.XXXXXX", tmp);
else
(void)asprintf(&sfn, "%s/ed.XXXXXX", tmp);
if (sfn == NULL) {
warn(NULL);
sprintf(errmsg, "could not allocate memory");
umask(u);
return ERR;
}
if ((fd = mkstemp(sfn)) == -1 || (sfp = fdopen(fd, "w+")) == NULL) {
if (fd != -1)
close(fd);
warn("%s", sfn);
sprintf(errmsg, "cannot open temp file");
umask(u);
return ERR;
}
umask(u);
return 0;
}
/* close_sbuf: close scratch file */
int
close_sbuf(void)
{
if (sfp) {
if (fclose(sfp) < 0) {
fprintf(stderr, "%s: %s\n", sfn, strerror(errno));
sprintf(errmsg, "cannot close temp file");
return ERR;
}
sfp = NULL;
if (sfn) {
unlink(sfn);
free(sfn);
sfn = NULL;
}
}
sfseek = seek_write = 0;
return 0;
}
/* quit: remove_lines scratch file and exit */
void
quit(int n)
{
if (sfp) {
fclose(sfp);
if (sfn) {
unlink(sfn);
free(sfn);
sfn = NULL;
}
}
exit(n);
/* NOTREACHED */
}
unsigned char ctab[256]; /* character translation table */
/* init_buffers: open scratch buffer; initialize line queue */
void
init_buffers(void)
{
int i = 0;
/* Read stdin one character at a time to avoid i/o contention
with shell escapes invoked by nonterminal input, e.g.,
ed - <<EOF
!cat
hello, world
EOF */
setbuffer(stdin, stdinbuf, 1);
if (open_sbuf() < 0)
quit(2);
REQUE(&buffer_head, &buffer_head);
for (i = 0; i < 256; i++)
ctab[i] = i;
}
/* translit_text: translate characters in a string */
char *
translit_text(char *s, int len, int from, int to)
{
static int i = 0;
unsigned char *us;
ctab[i] = i; /* restore table to initial state */
ctab[i = from] = to;
for (us = (unsigned char *) s; len-- > 0; us++)
*us = ctab[*us];
return s;
}

460
bin/ed/cbc.c Normal file
View File

@@ -0,0 +1,460 @@
/* $NetBSD: cbc.c,v 1.22 2010/06/09 19:20:18 riz Exp $ */
/* cbc.c: This file contains the encryption routines for the ed line editor */
/*-
* Copyright (c) 1993 The Regents of the University of California.
* 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.
* 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.
*
* from: @(#)bdes.c 5.5 (Berkeley) 6/27/91
*/
/*-
* Copyright (c) 1993 Andrew Moore, Talke Studio.
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. 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.
*
* from: @(#)bdes.c 5.5 (Berkeley) 6/27/91
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char *rcsid = "@(#)cbc.c,v 1.2 1994/02/01 00:34:36 alm Exp";
#else
__RCSID("$NetBSD: cbc.c,v 1.22 2010/06/09 19:20:18 riz Exp $");
#endif
#endif /* not lint */
#include <sys/types.h>
#include <ctype.h>
#include <errno.h>
#include <pwd.h>
#ifdef DES
#include <time.h>
#endif
#include "ed.h"
/*
* Define a divisor for rand() that yields a uniform distribution in the
* range 0-255.
*/
#define RAND_DIV (((unsigned) RAND_MAX + 1) >> 8)
/*
* BSD and System V systems offer special library calls that do
* block move_liness and fills, so if possible we take advantage of them
*/
#define MEMCPY(dest,src,len) memcpy((dest),(src),(len))
#define MEMZERO(dest,len) memset((dest), 0, (len))
/* Hide the calls to the primitive encryption routines. */
#define DES_KEY(buf) \
if (des_setkey(buf)) \
des_error("des_setkey");
#define DES_XFORM(buf) \
if (des_cipher(buf, buf, 0L, (inverse ? -1 : 1))) \
des_error("des_cipher");
/*
* read/write - no error checking
*/
#define READ(buf, n, fp) fread(buf, sizeof(char), n, fp)
#define WRITE(buf, n, fp) fwrite(buf, sizeof(char), n, fp)
/*
* some things to make references easier
*/
typedef char Desbuf[8];
#define CHAR(x,i) (x[i])
#define UCHAR(x,i) (x[i])
#define BUFFER(x) (x)
#define UBUFFER(x) (x)
#ifdef DES
/*
* global variables and related macros
*/
static Desbuf ivec; /* initialization vector */
static Desbuf pvec; /* padding vector */
static char bits[] = { /* used to extract bits from a char */
'\200', '\100', '\040', '\020', '\010', '\004', '\002', '\001'
};
static int pflag; /* 1 to preserve parity bits */
static char des_buf[8]; /* shared buffer for get_des_char/put_des_char */
static int des_ct = 0; /* count for get_des_char/put_des_char */
static int des_n = 0; /* index for put_des_char/get_des_char */
#endif
#ifdef DES
static void des_error(const char *);
static int hex_to_binary(int, int);
static void expand_des_key(char *, char *);
static void set_des_key(char *);
static int cbc_decode(char *, FILE *);
static int cbc_encode(char *, int, FILE *);
#endif
/* init_des_cipher: initialize DES */
void
init_des_cipher(void)
{
#ifdef DES
int i;
des_ct = des_n = 0;
/* initialize the initialization vector */
MEMZERO(ivec, 8);
/* intialize the padding vector */
srand((unsigned) time((time_t *) 0));
for (i = 0; i < 8; i++)
CHAR(pvec, i) = (char) (rand()/RAND_DIV);
#endif
}
/* get_des_char: return next char in an encrypted file */
int
get_des_char(FILE *fp)
{
#ifdef DES
if (des_n >= des_ct) {
des_n = 0;
des_ct = cbc_decode(des_buf, fp);
}
return (des_ct > 0) ? (unsigned char) des_buf[des_n++] : EOF;
#else
return EOF;
#endif
}
/* put_des_char: write a char to an encrypted file; return char written */
int
put_des_char(int c, FILE *fp)
{
#ifdef DES
if (des_n == sizeof des_buf) {
des_ct = cbc_encode(des_buf, des_n, fp);
des_n = 0;
}
return (des_ct >= 0) ? (unsigned char) (des_buf[des_n++] = c) : EOF;
#else
return EOF;
#endif
}
/* flush_des_file: flush an encrypted file's output; return status */
int
flush_des_file(FILE *fp)
{
#ifdef DES
if (des_n == sizeof des_buf) {
des_ct = cbc_encode(des_buf, des_n, fp);
des_n = 0;
}
return (des_ct >= 0 && cbc_encode(des_buf, des_n, fp) >= 0) ? 0 : EOF;
#else
return EOF;
#endif
}
#ifdef DES
/*
* get keyword from tty or stdin
*/
int
get_keyword(void)
{
char *p; /* used to obtain the key */
Desbuf msgbuf; /* I/O buffer */
/*
* get the key
*/
if (*(p = getpass("Enter key: "))) {
/*
* copy it, nul-padded, into the key area
*/
expand_des_key(BUFFER(msgbuf), p);
MEMZERO(p, _PASSWORD_LEN);
set_des_key(msgbuf);
MEMZERO(msgbuf, sizeof msgbuf);
return 1;
}
return 0;
}
/*
* print a warning message and, possibly, terminate
*/
static void
des_error(const char *s /* the message */)
{
(void)sprintf(errmsg, "%s", s ? s : strerror(errno));
}
/*
* map a hex character to an integer
*/
static int
hex_to_binary(int c /* char to be converted */,
int radix /* base (2 to 16) */)
{
switch(c) {
case '0': return(0x0);
case '1': return(0x1);
case '2': return(radix > 2 ? 0x2 : -1);
case '3': return(radix > 3 ? 0x3 : -1);
case '4': return(radix > 4 ? 0x4 : -1);
case '5': return(radix > 5 ? 0x5 : -1);
case '6': return(radix > 6 ? 0x6 : -1);
case '7': return(radix > 7 ? 0x7 : -1);
case '8': return(radix > 8 ? 0x8 : -1);
case '9': return(radix > 9 ? 0x9 : -1);
case 'A': case 'a': return(radix > 10 ? 0xa : -1);
case 'B': case 'b': return(radix > 11 ? 0xb : -1);
case 'C': case 'c': return(radix > 12 ? 0xc : -1);
case 'D': case 'd': return(radix > 13 ? 0xd : -1);
case 'E': case 'e': return(radix > 14 ? 0xe : -1);
case 'F': case 'f': return(radix > 15 ? 0xf : -1);
}
/*
* invalid character
*/
return(-1);
}
/*
* convert the key to a bit pattern
*/
static void
expand_des_key(char *obuf /* bit pattern */, char *inbuf /* the key itself */)
{
int i, j; /* counter in a for loop */
int nbuf[64]; /* used for hex/key translation */
/*
* leading '0x' or '0X' == hex key
*/
if (inbuf[0] == '0' && (inbuf[1] == 'x' || inbuf[1] == 'X')) {
inbuf = &inbuf[2];
/*
* now translate it, bombing on any illegal hex digit
*/
for (i = 0; inbuf[i] && i < 16; i++)
if ((nbuf[i] = hex_to_binary((int) inbuf[i], 16)) == -1)
des_error("bad hex digit in key");
while (i < 16)
nbuf[i++] = 0;
for (i = 0; i < 8; i++)
obuf[i] =
((nbuf[2*i]&0xf)<<4) | (nbuf[2*i+1]&0xf);
/* preserve parity bits */
pflag = 1;
return;
}
/*
* leading '0b' or '0B' == binary key
*/
if (inbuf[0] == '0' && (inbuf[1] == 'b' || inbuf[1] == 'B')) {
inbuf = &inbuf[2];
/*
* now translate it, bombing on any illegal binary digit
*/
for (i = 0; inbuf[i] && i < 16; i++)
if ((nbuf[i] = hex_to_binary((int) inbuf[i], 2)) == -1)
des_error("bad binary digit in key");
while (i < 64)
nbuf[i++] = 0;
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
obuf[i] = (obuf[i]<<1)|nbuf[8*i+j];
/* preserve parity bits */
pflag = 1;
return;
}
/*
* no special leader -- ASCII
*/
(void)strncpy(obuf, inbuf, 8);
}
/*****************
* DES FUNCTIONS *
*****************/
/*
* This sets the DES key and (if you're using the deszip version)
* the direction of the transformation. This uses the Sun
* to map the 64-bit key onto the 56 bits that the key schedule
* generation routines use: the old way, which just uses the user-
* supplied 64 bits as is, and the new way, which resets the parity
* bit to be the same as the low-order bit in each character. The
* new way generates a greater variety of key schedules, since many
* systems set the parity (high) bit of each character to 0, and the
* DES ignores the low order bit of each character.
*/
static void
set_des_key(Desbuf buf /* key block */)
{
int i, j; /* counter in a for loop */
int par; /* parity counter */
/*
* if the parity is not preserved, flip it
*/
if (!pflag) {
for (i = 0; i < 8; i++) {
par = 0;
for (j = 1; j < 8; j++)
if ((bits[j]&UCHAR(buf, i)) != 0)
par++;
if ((par&01) == 01)
UCHAR(buf, i) = UCHAR(buf, i)&0177;
else
UCHAR(buf, i) = (UCHAR(buf, i)&0177)|0200;
}
}
DES_KEY(UBUFFER(buf));
}
/*
* This encrypts using the Cipher Block Chaining mode of DES
*/
static int
cbc_encode(char *msgbuf, int n, FILE *fp)
{
int inverse = 0; /* 0 to encrypt, 1 to decrypt */
/*
* do the transformation
*/
if (n == 8) {
for (n = 0; n < 8; n++)
CHAR(msgbuf, n) ^= CHAR(ivec, n);
DES_XFORM(UBUFFER(msgbuf));
MEMCPY(BUFFER(ivec), BUFFER(msgbuf), 8);
return WRITE(BUFFER(msgbuf), 8, fp);
}
/*
* at EOF or last block -- in either case, the last byte contains
* the character representation of the number of bytes in it
*/
/*
MEMZERO(msgbuf + n, 8 - n);
*/
/*
* Pad the last block randomly
*/
(void)MEMCPY(BUFFER(msgbuf + n), BUFFER(pvec), 8 - n);
CHAR(msgbuf, 7) = n;
for (n = 0; n < 8; n++)
CHAR(msgbuf, n) ^= CHAR(ivec, n);
DES_XFORM(UBUFFER(msgbuf));
return WRITE(BUFFER(msgbuf), 8, fp);
}
/*
* This decrypts using the Cipher Block Chaining mode of DES
*/
static int
cbc_decode(char *msgbuf /* I/O buffer */,
FILE *fp /* input file descriptor */)
{
Desbuf inbuf; /* temp buffer for initialization vector */
int n; /* number of bytes actually read */
int c; /* used to test for EOF */
int inverse = 1; /* 0 to encrypt, 1 to decrypt */
if ((n = READ(BUFFER(msgbuf), 8, fp)) == 8) {
/*
* do the transformation
*/
MEMCPY(BUFFER(inbuf), BUFFER(msgbuf), 8);
DES_XFORM(UBUFFER(msgbuf));
for (c = 0; c < 8; c++)
UCHAR(msgbuf, c) ^= UCHAR(ivec, c);
MEMCPY(BUFFER(ivec), BUFFER(inbuf), 8);
/*
* if the last one, handle it specially
*/
if ((c = fgetc(fp)) == EOF) {
n = CHAR(msgbuf, 7);
if (n < 0 || n > 7) {
des_error("decryption failed (block corrupted)");
return EOF;
}
} else
(void)ungetc(c, fp);
return n;
}
if (n > 0)
des_error("decryption failed (incomplete block)");
else if (n < 0)
des_error("cannot read file");
return EOF;
}
#endif /* DES */

972
bin/ed/ed.1 Normal file
View File

@@ -0,0 +1,972 @@
.\" $NetBSD: ed.1,v 1.30 2010/05/14 02:09:58 joerg Exp $
.\" $OpenBSD: ed.1,v 1.42 2003/07/27 13:25:43 jmc Exp $
.\"
.\" Copyright (c) 1993 Andrew Moore, Talke Studio.
.\" 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 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 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.
.\"
.Dd January 23, 2002
.Dt ED 1
.Os
.Sh NAME
.Nm ed
.Nd text editor
.Sh SYNOPSIS
.Nm
.Op Fl
.Op Fl Esx
.Op Fl p Ar string
.Op Ar file
.Sh DESCRIPTION
.Nm
is a line-oriented text editor.
It is used to create, display, modify, and otherwise manipulate text files.
If invoked with a
.Ar file
argument, then a copy of
.Ar file
is read into the editor's buffer.
Changes are made to this copy and not directly to
.Ar file
itself.
Upon quitting
.Nm ,
any changes not explicitly saved with a
.Ic w
command are lost.
.Pp
Editing is done in two distinct modes:
.Em command
and
.Em input .
When first invoked,
.Nm
is in command mode.
In this mode, commands are read from the standard input and
executed to manipulate the contents of the editor buffer.
.Pp
A typical command might look like:
.Bd -literal -offset indent
,s/old/new/g
.Ed
.Pp
which replaces all occurrences of the string
.Pa old
with
.Pa new .
.Pp
When an input command, such as
.Ic a
(append),
.Ic i
(insert),
or
.Ic c
(change) is given,
.Nm
enters input mode.
This is the primary means of adding text to a file.
In this mode, no commands are available;
instead, the standard input is written directly to the editor buffer.
Lines consist of text up to and including a newline character.
Input mode is terminated by entering a single period
.Pq Ql \&.
on a line.
.Pp
All
.Nm
commands operate on whole lines or ranges of lines; e.g.,
the
.Ic d
command deletes lines; the
.Ic m
command moves lines, and so on.
It is possible to modify only a portion of a line by means of replacement,
as in the example above.
However, even here, the
.Ic s
command is applied to whole lines at a time.
.Pp
In general,
.Nm
commands consist of zero or more line addresses, followed by a single
character command and possibly additional parameters; i.e.,
commands have the structure:
.Bd -literal -offset indent
[address [,address]]command[parameters]
.Ed
.Pp
The address(es) indicate the line or range of lines to be affected by the
command.
If fewer addresses are given than the command accepts, then
default addresses are supplied.
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl
Same as the
.Fl s
option (deprecated).
.It Fl E
Enables the use of extended regular expressions instead of the basic
regular expressions that are normally used.
.It Fl p Ar string
Specifies a command prompt.
This may be toggled on and off with the
.Ic P
command.
.It Fl s
Suppress diagnostics.
This should be used if
.Nm
standard input is from a script.
.It Fl x
Prompt for an encryption key to be used in subsequent reads and writes
(see the
.Ic x
command).
.It Ar file
Specifies the name of a file to read.
If
.Ar file
is prefixed with a
bang
.Pq Ql \&! ,
then it is interpreted as a shell command.
In this case, what is read is the standard output of
.Ar file
executed via
.Xr sh 1 .
To read a file whose name begins with a bang, prefix the
name with a backslash
.Pq Ql \e .
The default filename is set to
.Ar file
only if it is not prefixed with a bang.
.El
.Ss LINE ADDRESSING
An address represents the number of a line in the buffer.
.Nm
maintains a
.Em current address
which is typically supplied to commands as the default address
when none is specified.
When a file is first read, the current address is set to the last line
of the file.
In general, the current address is set to the last line affected by a command.
.Pp
A line address is
constructed from one of the bases in the list below, optionally followed
by a numeric offset.
The offset may include any combination of digits, operators (i.e.,
.Sq + ,
.Sq - ,
and
.Sq ^ ) ,
and whitespace.
Addresses are read from left to right, and their values are computed
relative to the current address.
.Pp
One exception to the rule that addresses represent line numbers is the
address
.Em 0
(zero).
This means
.Dq before the first line ,
and is legal wherever it makes sense.
.Pp
An address range is two addresses separated either by a comma or semi-colon.
The value of the first address in a range cannot exceed the
value of the second.
If only one address is given in a range,
then the second address is set to the given address.
If an
.Em n Ns No -tuple
of addresses is given where
.Em n \*[Gt] 2 ,
then the corresponding range is determined by the last two addresses in the
.Em n Ns No -tuple.
If only one address is expected, then the last address is used.
.Pp
Each address in a comma-delimited range is interpreted relative to the
current address.
In a semi-colon-delimited range, the first address is
used to set the current address, and the second address is interpreted
relative to the first.
.Pp
The following address symbols are recognized:
.Bl -tag -width Ds
.It Em \&.
The current line (address) in the buffer.
.It Em $
The last line in the buffer.
.It Em n
The
.Em n Ns No th
line in the buffer where
.Em n
is a number in the range
.Em [0,$] .
.It Em - No or Em ^
The previous line.
This is equivalent to
.Em -1
and may be repeated with cumulative effect.
.It Em -n No or Em ^n
The
.Em n Ns No th
previous line, where
.Em n
is a non-negative number.
.It Em +
The next line.
This is equivalent to
.Em +1
and may be repeated with cumulative effect.
.It Em +n
The
.Em n Ns No th
next line, where
.Em n
is a non-negative number.
.It Em whitespace Em n
.Em whitespace
followed by a number
.Em n
is interpreted as
.Sq Em +n .
.It Em \&, No or Em %
The first through last lines in the buffer.
This is equivalent to the address range
.Em 1,$ .
.It Em \&;
The current through last lines in the buffer.
This is equivalent to the address range
.Em .,$ .
.It Em / Ns Ar re Ns Em /
The next line containing the regular expression
.Ar re .
The search wraps to the beginning of the buffer and continues down to the
current line, if necessary.
.Em //
repeats the last search.
.It Em \&? Ns Ar re Ns Em \&?
The previous line containing the regular expression
.Ar re .
The search wraps to the end of the buffer and continues up to the
current line, if necessary.
.Em ??
repeats the last search.
.It Em \&\' Ns Ar lc
The line previously marked by a
.Ic k
(mark) command, where
.Ar lc
is a lower case letter.
.El
.Ss REGULAR EXPRESSIONS
Regular expressions are patterns used in selecting text.
For example, the
.Nm
command
.Bd -literal -offset indent
g/string/
.Ed
.Pp
prints all lines containing
.Em string .
Regular expressions are also used by the
.Ic s
command for selecting old text to be replaced with new.
.Pp
In addition to specifying string literals, regular expressions can
represent classes of strings.
Strings thus represented are said to be matched by the
corresponding regular expression.
If it is possible for a regular expression to match several strings in
a line, then the leftmost longest match is the one selected.
.Pp
The following symbols are used in constructing regular expressions:
.Bl -tag -width Dsasdfsd
.It Em c
Any character
.Em c
not listed below, including
.Sq { ,
.Sq } ,
.Sq \&( ,
.Sq \&) ,
.Sq \*[Lt] ,
and
.Sq \*[Gt]
matches itself.
.It Em \ec
Any backslash-escaped character
.Em c ,
except for
.Sq { ,
.Sq } ,
.Sq \&( ,
.Sq \&) ,
.Sq \*[Lt] ,
and
.Sq \*[Gt]
matches itself.
.It Em \&.
Matches any single character.
.It Em [char-class]
Matches any single character in the character class
.Em char-class .
See
.Sx CHARACTER CLASSES
below for further information.
.It Em [^char-class]
Matches any single character, other than newline, not in the
character class
.Em char-class .
.It Em ^
If
.Em ^
is the first character of a regular expression, then it
anchors the regular expression to the beginning of a line.
Otherwise, it matches itself.
.It Em $
If
.Em $
is the last character of a regular expression,
it anchors the regular expression to the end of a line.
Otherwise, it matches itself.
.It Em \e\*[Lt]
Anchors the single character regular expression or subexpression
immediately following it to the beginning of a word.
(This may not be available.)
.It Em \e\*[Gt]
Anchors the single character regular expression or subexpression
immediately following it to the end of a word.
(This may not be available.)
.It Em \e( Ns Ar re Ns Em \e)
Defines a subexpression
.Ar re .
Subexpressions may be nested.
A subsequent backreference of the form
.Em \en ,
where
.Em n
is a number in the range [1,9], expands to the text matched by the
.Em n Ns No th
subexpression.
For example, the regular expression
.Em \e(.*\e)\e1
matches any string consisting of identical adjacent substrings.
Subexpressions are ordered relative to their left delimiter.
.It Em *
Matches the single character regular expression or subexpression
immediately preceding it zero or more times.
If
.Em *
is the first character of a regular expression or subexpression,
then it matches itself.
The
.Em *
operator sometimes yields unexpected results.
For example, the regular expression
.Em b*
matches the beginning of the string
.Em abbb
(as opposed to the substring
.Em bbb ) ,
since a null match is the only leftmost match.
.Sm off
.It Em \e{ No n,m Em \e}\ \e{ No n, Em \e}\ \& Em \e{ No n Em \e}
.Sm on
Matches the single character regular expression or subexpression
immediately preceding it at least
.Em n
and at most
.Em m
times.
If
.Em m
is omitted, then it matches at least
.Em n
times.
If the comma is also omitted, then it matches exactly
.Em n
times.
.El
.Pp
Additional regular expression operators may be defined depending on the
particular
.Xr regex 3
implementation.
.Ss CHARACTER CLASSES
A character class specifies a set of characters. It is written within
square brackets
.Pq []
and in its most basic form contains just the characters in the set.
.Pp
To include a
.Sq \&]
in a character class, it must be the first character.
A range of characters may be specified by separating the end characters
of the range with a
.Sq \&- ,
e.g.,
.Sq a-z
specifies the lower case characters.
.Pp
The following literals can also be used within character classes as
shorthand for particular sets of characters:
.Bl -tag -offset indent -compact -width [:blahblah:]
.It [:alnum:]
Alphanumeric characters.
.It [:cntrl:]
Control characters.
.It [:lower:]
Lowercase alphabetic characters.
.It [:space:]
Whitespace (space, tab, newline, form feed, etc.)
.It [:alpha:]
Alphabetic characters.
.It [:digit:]
Numeric characters (digits).
.It [:print:]
Printable characters.
.It [:upper:]
Uppercase alphabetic characters.
.It [:blank:]
Blank characters (space and tab).
.It [:graph:]
Graphical characters (printing nonblank characters).
.It [:punct:]
Punctuation characters.
.It [:xdigit:]
Hexadecimal digits.
.El
If
.Sq \&-
appears as the first or last character of a character class, then
it matches itself.
All other characters in a character class match themselves.
.Pp
Patterns in
a character class
of the form
.Em [.col-elm.]
or
.Em [=col-elm=]
where
.Em col-elm
is a
.Em collating element
are interpreted according to
.Xr locale 5
(not currently supported).
See
.Xr regex 3
for an explanation of these constructs.
.Ss COMMANDS
All
.Nm
commands are single characters, though some require additional parameters.
If a command's parameters extend over several lines, then
each line except for the last must be terminated with a backslash
.Pq Ql \e .
.Pp
In general, at most one command is allowed per line.
However, most commands accept a print suffix, which is any of
.Ic p
(print),
.Ic l
(list),
or
.Ic n
(enumerate), to print the last line affected by the command.
.Pp
An interrupt (typically ^C) has the effect of aborting the current command
and returning the editor to command mode.
.Pp
.Nm
recognizes the following commands.
The commands are shown together with
the default address or address range supplied if none is
specified (in parentheses), and other possible arguments on the right.
.Bl -tag -width Dxxs
.It (.) Ns Ic a
Appends text to the buffer after the addressed line.
Text is entered in input mode.
The current address is set to last line entered.
.It (.,.) Ns Ic c
Changes lines in the buffer.
The addressed lines are deleted from the buffer,
and text is appended in their place.
Text is entered in input mode.
The current address is set to last line entered.
.It (.,.) Ns Ic d
Deletes the addressed lines from the buffer.
If there is a line after the deleted range, then the current address is set
to this line.
Otherwise the current address is set to the line before the deleted range.
.It Ic e Ar file
Edits
.Ar file ,
and sets the default filename.
If
.Ar file
is not specified, then the default filename is used.
Any lines in the buffer are deleted before the new file is read.
The current address is set to the last line read.
.It Ic e Ar !command
Edits the standard output of
.Ar command ,
(see
.Ic \&! Ar command
below).
The default filename is unchanged.
Any lines in the buffer are deleted before the output of
.Em command
is read.
The current address is set to the last line read.
.It Ic E Ar file
Edits
.Ar file
unconditionally.
This is similar to the
.Ic e
command, except that unwritten changes are discarded without warning.
The current address is set to the last line read.
.It Ic f Ar file
Sets the default filename to
.Ar file .
If
.Ar file
is not specified, then the default unescaped filename is printed.
.It (1,$) Ns Ic g Ns Ar /re/command-list
Applies
.Ar command-list
to each of the addressed lines matching a regular expression
.Ar re .
The current address is set to the line currently matched before
.Ar command-list
is executed.
At the end of the
.Ic g
command, the current address is set to the last line affected by
.Ar command-list .
.Pp
Each command in
.Ar command-list
must be on a separate line,
and every line except for the last must be terminated by a backslash
.Pq Sq \e .
Any commands are allowed, except for
.Ic g ,
.Ic G ,
.Ic v ,
and
.Ic V .
A newline alone in
.Ar command-list
is equivalent to a
.Ic p
command.
.It (1,$) Ns Ic G Ns Ar /re/
Interactively edits the addressed lines matching a regular expression
.Ar re .
For each matching line, the line is printed, the current address is set,
and the user is prompted to enter a
.Ar command-list .
At the end of the
.Ic G
command, the current address is set to the last line affected by (the last)
.Ar command-list .
.Pp
The format of
.Ar command-list
is the same as that of the
.Ic g
command.
A newline alone acts as a null command list.
A single
.Sq \*[Am]
repeats the last non-null command list.
.It Ic H
Toggles the printing of error explanations.
By default, explanations are not printed.
It is recommended that
.Nm
scripts begin with this command to aid in debugging.
.It Ic h
Prints an explanation of the last error.
.It (.) Ns Ic i
Inserts text in the buffer before the current line.
Text is entered in input mode.
The current address is set to the last line entered.
.It (.,.+1) Ns Ic j
Joins the addressed lines.
The addressed lines are deleted from the buffer and replaced by a single
line containing their joined text.
The current address is set to the resultant line.
.It (.) Ns Ic k Ns Ar lc
Marks a line with a lower case letter
.Ar lc .
The line can then be addressed as
.Ar \&'lc
(i.e., a single quote followed by
.Ar lc )
in subsequent commands.
The mark is not cleared until the line is deleted or otherwise modified.
.It (.,.) Ns Ic l
Prints the addressed lines unambiguously.
If a single line fills more than one screen (as might be the case
when viewing a binary file, for instance), a
.Dq --More--
prompt is printed on the last line.
.Nm
waits until the RETURN key is pressed before displaying the next screen.
The current address is set to the last line printed.
.It (.,.) Ns Ic m Ns No (.)
Moves lines in the buffer.
The addressed lines are moved to after the
right-hand destination address, which may be the address
.Em 0
(zero).
The current address is set to the last line moved.
.It (.,.) Ns Ic n
Prints the addressed lines along with their line numbers.
The current address is set to the last line printed.
.It (.,.) Ns Ic p
Prints the addressed lines.
The current address is set to the last line printed.
.It Ic P
Toggles the command prompt on and off.
Unless a prompt was specified with the command-line option
.Fl p Ar string ,
the command prompt is by default turned off.
.It Ic q
Quits
.Nm .
.It Ic Q
Quits
.Nm
unconditionally.
This is similar to the
.Ic q
command, except that unwritten changes are discarded without warning.
.It ($) Ns Ic r Ar file
Reads
.Ar file
to after the addressed line.
If
.Ar file
is not specified, then the default filename is used.
If there was no default filename prior to the command,
then the default filename is set to
.Ar file .
Otherwise, the default filename is unchanged.
The current address is set to the last line read.
.It ($) Ns Ic r Ar !command
Reads to after the addressed line the standard output of
.Ar command ,
(see the
.Ic \&!
command below).
The default filename is unchanged.
The current address is set to the last line read.
.Sm off
.It (.,.) Ic s Ar /re/replacement/ , \ (.,.) \
Ic s Ar /re/replacement/ Em g , Ar \ (.,.) \
Ic s Ar /re/replacement/ Em n
.Sm on
Replaces text in the addressed lines matching a regular expression
.Ar re
with
.Ar replacement .
By default, only the first match in each line is replaced.
If the
.Em g
(global) suffix is given, then every match to be replaced.
The
.Em n
suffix, where
.Em n
is a positive number, causes only the
.Em n Ns No th
match to be replaced.
It is an error if no substitutions are performed on any of the addressed
lines.
The current address is set the last line affected.
.Pp
.Ar re
and
.Ar replacement
may be delimited by any character other than space and newline
(see the
.Ic s
command below).
If one or two of the last delimiters is omitted, then the last line
affected is printed as though the print suffix
.Em p
were specified.
.Pp
An unescaped
.Ql \*[Am]
in
.Ar replacement
is replaced by the currently matched text.
The character sequence
.Em \em ,
where
.Em m
is a number in the range [1,9], is replaced by the
.Em m Ns No th
backreference expression of the matched text.
If
.Ar replacement
consists of a single
.Ql % ,
then
.Ar replacement
from the last substitution is used.
Newlines may be embedded in
.Ar replacement
if they are escaped with a backslash
.Pq Ql \e .
.It (.,.) Ns Ic s
Repeats the last substitution.
This form of the
.Ic s
command accepts a count suffix
.Em n ,
or any combination of the characters
.Em r ,
.Em g ,
and
.Em p .
If a count suffix
.Em n
is given, then only the
.Em n Ns No th
match is replaced.
The
.Em r
suffix causes
the regular expression of the last search to be used instead of
that of the last substitution.
The
.Em g
suffix toggles the global suffix of the last substitution.
The
.Em p
suffix toggles the print suffix of the last substitution.
The current address is set to the last line affected.
.It (.,.) Ns Ic t Ns No (.)
Copies (i.e., transfers) the addressed lines to after the right-hand
destination address, which may be the address
.Em 0
(zero).
The current address is set to the last line copied.
.It Ic u
Undoes the last command and restores the current address
to what it was before the command.
The global commands
.Ic g ,
.Ic G ,
.Ic v ,
and
.Ic V
are treated as a single command by undo.
.Ic u
is its own inverse.
.It (1,$) Ns Ic v Ns Ar /re/command-list
Applies
.Ar command-list
to each of the addressed lines not matching a regular expression
.Ar re .
This is similar to the
.Ic g
command.
.It (1,$) Ns Ic V Ns Ar /re/
Interactively edits the addressed lines not matching a regular expression
.Ar re .
This is similar to the
.Ic G
command.
.It (1,$) Ns Ic w Ar file
Writes the addressed lines to
.Ar file .
Any previous contents of
.Ar file
are lost without warning.
If there is no default filename, then the default filename is set to
.Ar file ,
otherwise it is unchanged.
If no filename is specified, then the default filename is used.
The current address is unchanged.
.It (1,$) Ns Ic wq Ar file
Writes the addressed lines to
.Ar file ,
and then executes a
.Ic q
command.
.It (1,$) Ns Ic w Ar !command
Writes the addressed lines to the standard input of
.Ar command ,
(see the
.Ic \&!
command below).
The default filename and current address are unchanged.
.It (1,$) Ns Ic W Ar file
Appends the addressed lines to the end of
.Ar file .
This is similar to the
.Ic w
command, except that the previous contents of file are not clobbered.
The current address is unchanged.
.It Ic x
Prompts for an encryption key which is used in subsequent reads and writes.
If a newline alone is entered as the key, then encryption is turned off.
Otherwise, echoing is disabled while a key is read.
Encryption/decryption is done using the
.Xr bdes 1
algorithm.
.It (.+1) Ns Ic z Ns Ar n
Scrolls
.Ar n
lines at a time starting at addressed line.
If
.Ar n
is not specified, then the current window size is used.
The current address is set to the last line printed.
.It ($) Ns Ic =
Prints the line number of the addressed line.
.It (.+1) Ns Ic newline
Prints the addressed line, and sets the current address to that line.
.It Ic \&! Ns Ar command
Executes
.Ar command
via
.Xr sh 1 .
If the first character of
.Ar command
is
.Ic \&! ,
then it is replaced by text of the previous
.Ic !command .
.Nm
does not process
.Ar command
for
.Sq \e
(backslash) escapes.
However, an unescaped
.Sq %
is replaced by the default filename.
When the shell returns from execution, a
.Sq \&!
is printed to the standard output.
The current line is unchanged.
.El
.Sh LIMITATIONS
.Nm
processes
.Em file
arguments for backslash escapes, i.e., in a filename,
any characters preceded by a backslash
.Pq Ql \e
are interpreted literally.
.Pp
If a text (non-binary) file is not terminated by a newline character,
then
.Nm
appends one on reading/writing it.
In the case of a binary file,
.Nm
does not append a newline on reading/writing.
.Sh ENVIRONMENT
.Bl -tag -width iTMPDIR
.It Ev TMPDIR
The location used to store temporary files.
.El
.Sh FILES
.Bl -tag -width /tmp/ed.* -compact
.It Pa /tmp/ed.*
buffer file
.It Pa ed.hup
where
.Nm
attempts to write the buffer if the terminal hangs up
.El
.Sh DIAGNOSTICS
When an error occurs,
.Nm
prints a
.Dq \&?
and either returns to command mode or exits if its input is from a script.
An explanation of the last error can be printed with the
.Ic h
(help) command.
.Pp
Since the
.Ic g
(global) command masks any errors from failed searches and substitutions,
it can be used to perform conditional operations in scripts; e.g.,
.Bd -literal -offset indent
g/old/s//new/
.Ed
.Pp
replaces any occurrences of
.Em old
with
.Em new .
.Pp
If the
.Ic u
(undo) command occurs in a global command list, then
the command list is executed only once.
.Pp
If diagnostics are not disabled, attempting to quit
.Nm
or edit another file before writing a modified buffer results in an error.
If the command is entered a second time, it succeeds,
but any changes to the buffer are lost.
.Sh SEE ALSO
.Xr bdes 1 ,
.Xr sed 1 ,
.Xr sh 1 ,
.Xr vi 1 ,
.Xr regex 3
.Pp
USD:09-10
.Rs
.%A B. W. Kernighan
.%A P. J. Plauger
.%B Software Tools in Pascal
.%I Addison-Wesley
.%D 1981
.Re
.Sh HISTORY
An
.Nm
command appeared in
.At v1 .

293
bin/ed/ed.h Normal file
View File

@@ -0,0 +1,293 @@
/* $NetBSD: ed.h,v 1.35 2011/08/29 14:51:18 joerg Exp $ */
/* ed.h: type and constant definitions for the ed editor. */
/*
* Copyright (c) 1993 Andrew Moore
* 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 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.
*
* @(#)ed.h,v 1.5 1994/02/01 00:34:39 alm Exp
*/
#include <sys/types.h>
#if defined(BSD) && BSD >= 199103 || defined(__386BSD__)
# include <sys/param.h> /* for MAXPATHLEN */
#endif
#include <errno.h>
#if defined(sun) || defined(__NetBSD__) || defined(__APPLE__) || \
defined(__minix)
# include <limits.h>
#endif
#include <regex.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define ERR (-2)
#define EMOD (-3)
#define FATAL (-4)
#ifndef MAXPATHLEN
# define MAXPATHLEN 255 /* _POSIX_PATH_MAX */
#endif
#define MINBUFSZ 512 /* minimum buffer size - must be > 0 */
#define SE_MAX 30 /* max subexpressions in a regular expression */
#ifdef INT_MAX
# define LINECHARS INT_MAX /* max chars per line */
#else
# define LINECHARS MAXINT /* max chars per line */
#endif
/* gflags */
#define GLB 001 /* global command */
#define GPR 002 /* print after command */
#define GLS 004 /* list after command */
#define GNP 010 /* enumerate after command */
#define GSG 020 /* global substitute */
typedef regex_t pattern_t;
/* Line node */
typedef struct line {
struct line *q_forw;
struct line *q_back;
off_t seek; /* address of line in scratch buffer */
int len; /* length of line */
} line_t;
typedef struct undo {
/* type of undo nodes */
#define UADD 0
#define UDEL 1
#define UMOV 2
#define VMOV 3
int type; /* command type */
line_t *h; /* head of list */
line_t *t; /* tail of list */
} undo_t;
#ifndef max
# define max(a,b) ((a) > (b) ? (a) : (b))
#endif
#ifndef min
# define min(a,b) ((a) < (b) ? (a) : (b))
#endif
#define INC_MOD(l, k) ((l) + 1 > (k) ? 0 : (l) + 1)
#define DEC_MOD(l, k) ((l) - 1 < 0 ? (k) : (l) - 1)
/* SPL1: disable some interrupts (requires reliable signals) */
#define SPL1() mutex++
/* SPL0: enable all interrupts; check sigflags (requires reliable signals) */
#define SPL0() \
if (--mutex == 0) { \
if (sigflags & (1 << (SIGHUP - 1))) handle_hup(SIGHUP); \
if (sigflags & (1 << (SIGINT - 1))) handle_int(SIGINT); \
}
/* STRTOL: convert a string to long */
#define STRTOL(i, p) { \
errno = 0 ; \
if (((i = strtol(p, &p, 10)) == LONG_MIN || i == LONG_MAX) && \
errno == ERANGE) { \
sprintf(errmsg, "number out of range"); \
i = 0; \
return ERR; \
} \
}
#if defined(sun) || defined(NO_REALLOC_NULL)
/* REALLOC: assure at least a minimum size for buffer b */
#define REALLOC(b,n,i,err) \
if ((i) > (n)) { \
int ti = (n); \
char *ts; \
SPL1(); \
if ((b) != NULL) { \
if ((ts = (char *) realloc((b), ti += max((i), MINBUFSZ))) == NULL) { \
fprintf(stderr, "%s\n", strerror(errno)); \
sprintf(errmsg, "out of memory"); \
SPL0(); \
return err; \
} \
} else { \
if ((ts = (char *) malloc(ti += max((i), MINBUFSZ))) == NULL) { \
fprintf(stderr, "%s\n", strerror(errno)); \
sprintf(errmsg, "out of memory"); \
SPL0(); \
return err; \
} \
} \
(n) = ti; \
(b) = ts; \
SPL0(); \
}
#else /* NO_REALLOC_NULL */
/* REALLOC: assure at least a minimum size for buffer b */
#define REALLOC(b,n,i,err) \
if ((i) > (n)) { \
int ti = (n); \
char *ts; \
SPL1(); \
if ((ts = (char *) realloc((b), ti += max((i), MINBUFSZ))) == NULL) { \
fprintf(stderr, "%s\n", strerror(errno)); \
sprintf(errmsg, "out of memory"); \
SPL0(); \
return err; \
} \
(n) = ti; \
(b) = ts; \
SPL0(); \
}
#endif /* NO_REALLOC_NULL */
/* REQUE: link pred before succ */
#define REQUE(pred, succ) (pred)->q_forw = (succ), (succ)->q_back = (pred)
/* INSQUE: insert elem in circular queue after pred */
#define INSQUE(elem, pred) \
{ \
REQUE((elem), (pred)->q_forw); \
REQUE((pred), elem); \
}
/* remque: remove_lines elem from circular queue */
#define REMQUE(elem) REQUE((elem)->q_back, (elem)->q_forw);
/* NUL_TO_NEWLINE: overwrite ASCII NULs with newlines */
#define NUL_TO_NEWLINE(s, l) translit_text(s, l, '\0', '\n')
/* NEWLINE_TO_NUL: overwrite newlines with ASCII NULs */
#define NEWLINE_TO_NUL(s, l) translit_text(s, l, '\n', '\0')
#if defined(sun) && !defined(__SVR4)
# define strerror(n) sys_errlist[n]
#endif
/* Local Function Declarations */
void add_line_node(line_t *);
int append_lines(long);
int apply_subst_template(char *, regmatch_t *, int, int);
int build_active_list(int);
int check_addr_range(long, long);
void clear_active_list(void);
void clear_undo_stack(void);
int close_sbuf(void);
int copy_lines(long);
int delete_lines(long, long);
int display_lines(long, long, int);
line_t *dup_line_node(line_t *);
int exec_command(void);
long exec_global(int, int);
int extract_addr_range(void);
char *extract_pattern(int);
int extract_subst_tail(int *, long *);
char *extract_subst_template(void);
int filter_lines(long, long, char *);
int flush_des_file(FILE *);
line_t *get_addressed_line_node(long);
pattern_t *get_compiled_pattern(void);
int get_des_char(FILE *);
char *get_extended_line(int *, int);
char *get_filename(void);
int get_keyword(void);
long get_line_node_addr(line_t *);
long get_matching_node_addr(pattern_t *, int);
long get_marked_node_addr(int);
char *get_sbuf_line(line_t *);
int get_shell_command(void);
int get_stream_line(FILE *);
int get_tty_line(void);
__dead void handle_hup(int);
__dead void handle_int(int);
void handle_winch(int);
int has_trailing_escape(char *, char *);
void init_buffers(void);
void init_des_cipher(void);
int is_legal_filename(char *);
int join_lines(long, long);
int mark_line_node(line_t *, int);
int move_lines(long);
line_t *next_active_node(void);
long next_addr(void);
int open_sbuf(void);
char *parse_char_class(char *);
int pop_undo_stack(void);
undo_t *push_undo_stack(int, long, long);
int put_des_char(int, FILE *);
char *put_sbuf_line(char *);
int put_stream_line(FILE *, char *, int);
int put_tty_line(char *, int, long, int);
__dead void quit(int);
long read_file(char *, long);
long read_stream(FILE *, long);
int search_and_replace(pattern_t *, int, int);
int set_active_node(line_t *);
void signal_hup(int);
void signal_int(int);
char *strip_escapes(const char *);
int substitute_matching_text(pattern_t *, line_t *, int, int);
char *translit_text(char *, int, int, int);
void unmark_line_node(line_t *);
void unset_active_nodes(line_t *, line_t *);
long write_file(const char *, const char *, long, long);
long write_stream(FILE *, long, long);
/* global buffers */
extern char stdinbuf[];
extern char *ibuf;
extern char *ibufp;
extern int ibufsz;
/* global flags */
extern int isbinary;
extern int isglobal;
extern int modified;
extern int mutex;
extern int sigflags;
/* global vars */
extern long addr_last;
extern long current_addr;
extern long first_addr;
extern int lineno;
extern long second_addr;
extern long rows;
extern int cols;
extern int scripted;
extern int ere;
extern int des;
extern int newline_added; /* io.c */
extern int patlock;
extern char errmsg[]; /* re.c */
extern long u_current_addr; /* undo.c */
extern long u_addr_last; /* undo.c */
#if defined(sun) && !defined(__SVR4)
extern char *sys_errlist[];
#endif

227
bin/ed/glbl.c Normal file
View File

@@ -0,0 +1,227 @@
/* $NetBSD: glbl.c,v 1.6 2005/06/26 19:10:49 christos Exp $ */
/* glob.c: This file contains the global command routines for the ed line
editor */
/*-
* Copyright (c) 1993 Andrew Moore, Talke Studio.
* 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 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 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.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char *rcsid = "@(#)glob.c,v 1.1 1994/02/01 00:34:40 alm Exp";
#else
__RCSID("$NetBSD: glbl.c,v 1.6 2005/06/26 19:10:49 christos Exp $");
#endif
#endif /* not lint */
#include <sys/ioctl.h>
#include <sys/wait.h>
#include "ed.h"
/* build_active_list: add line matching a pattern to the global-active list */
int
build_active_list(int isgcmd)
{
pattern_t *pat;
line_t *lp;
long n;
char *s;
char delimiter;
if ((delimiter = *ibufp) == ' ' || delimiter == '\n') {
sprintf(errmsg, "invalid pattern delimiter");
return ERR;
} else if ((pat = get_compiled_pattern()) == NULL)
return ERR;
else if (*ibufp == delimiter)
ibufp++;
clear_active_list();
lp = get_addressed_line_node(first_addr);
for (n = first_addr; n <= second_addr; n++, lp = lp->q_forw) {
if ((s = get_sbuf_line(lp)) == NULL)
return ERR;
if (isbinary)
NUL_TO_NEWLINE(s, lp->len);
if (!regexec(pat, s, 0, NULL, 0) == isgcmd &&
set_active_node(lp) < 0)
return ERR;
}
return 0;
}
/* exec_global: apply command list in the command buffer to the active
lines in a range; return command status */
long
exec_global(int interact, int gflag)
{
static char *ocmd = NULL;
static int ocmdsz = 0;
line_t *lp = NULL;
int status;
int n;
char *cmd = NULL;
#ifdef BACKWARDS
char cmdp[] = "p\n";
if (!interact) {
if (!strcmp(ibufp, "\n"))
cmd = cmdp; /* null cmd-list == `p' */
else if ((cmd = get_extended_line(&n, 0)) == NULL)
return ERR;
}
#else
if (!interact && (cmd = get_extended_line(&n, 0)) == NULL)
return ERR;
#endif
clear_undo_stack();
while ((lp = next_active_node()) != NULL) {
if ((current_addr = get_line_node_addr(lp)) < 0)
return ERR;
if (interact) {
/* print current_addr; get a command in global syntax */
if (display_lines(current_addr, current_addr, gflag) < 0)
return ERR;
while ((n = get_tty_line()) > 0 &&
ibuf[n - 1] != '\n')
clearerr(stdin);
if (n < 0)
return ERR;
else if (n == 0) {
sprintf(errmsg, "unexpected end-of-file");
return ERR;
} else if (n == 1 && !strcmp(ibuf, "\n"))
continue;
else if (n == 2 && !strcmp(ibuf, "&\n")) {
if (cmd == NULL) {
sprintf(errmsg, "no previous command");
return ERR;
} else cmd = ocmd;
} else if ((cmd = get_extended_line(&n, 0)) == NULL)
return ERR;
else {
REALLOC(ocmd, ocmdsz, n + 1, ERR);
memcpy(ocmd, cmd, n + 1);
cmd = ocmd;
}
}
ibufp = cmd;
for (; *ibufp;)
if ((status = extract_addr_range()) < 0 ||
(status = exec_command()) < 0 ||
(status > 0 && (status = display_lines(
current_addr, current_addr, status))) < 0)
return status;
}
return 0;
}
line_t **active_list; /* list of lines active in a global command */
long active_last; /* index of last active line in active_list */
long active_size; /* size of active_list */
long active_ptr; /* active_list index (non-decreasing) */
long active_ndx; /* active_list index (modulo active_last) */
/* set_active_node: add a line node to the global-active list */
int
set_active_node(line_t *lp)
{
if (active_last + 1 > active_size) {
int ti = active_size;
line_t **ts;
SPL1();
#if defined(sun) || defined(NO_REALLOC_NULL)
if (active_list != NULL) {
#endif
if ((ts = (line_t **) realloc(active_list,
(ti += MINBUFSZ) * sizeof(line_t **))) == NULL) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "out of memory");
SPL0();
return ERR;
}
#if defined(sun) || defined(NO_REALLOC_NULL)
} else {
if ((ts = (line_t **) malloc((ti += MINBUFSZ) *
sizeof(line_t **))) == NULL) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "out of memory");
SPL0();
return ERR;
}
}
#endif
active_size = ti;
active_list = ts;
SPL0();
}
active_list[active_last++] = lp;
return 0;
}
/* unset_active_nodes: remove a range of lines from the global-active list */
void
unset_active_nodes(line_t *np, line_t *mp)
{
line_t *lp;
long i;
for (lp = np; lp != mp; lp = lp->q_forw)
for (i = 0; i < active_last; i++)
if (active_list[active_ndx] == lp) {
active_list[active_ndx] = NULL;
active_ndx = INC_MOD(active_ndx, active_last - 1);
break;
} else active_ndx = INC_MOD(active_ndx, active_last - 1);
}
/* next_active_node: return the next global-active line node */
line_t *
next_active_node(void)
{
while (active_ptr < active_last && active_list[active_ptr] == NULL)
active_ptr++;
return (active_ptr < active_last) ? active_list[active_ptr++] : NULL;
}
/* clear_active_list: clear the global-active list */
void
clear_active_list(void)
{
SPL1();
active_size = active_last = active_ptr = active_ndx = 0;
free(active_list);
active_list = NULL;
SPL0();
}

358
bin/ed/io.c Normal file
View File

@@ -0,0 +1,358 @@
/* $NetBSD: io.c,v 1.9 2011/05/23 23:13:10 joerg Exp $ */
/* io.c: This file contains the i/o routines for the ed line editor */
/*-
* Copyright (c) 1993 Andrew Moore, Talke Studio.
* 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 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 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.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char *rcsid = "@(#)io.c,v 1.1 1994/02/01 00:34:41 alm Exp";
#else
__RCSID("$NetBSD: io.c,v 1.9 2011/05/23 23:13:10 joerg Exp $");
#endif
#endif /* not lint */
#include "ed.h"
/* read_file: read a named file/pipe into the buffer; return line count */
long
read_file(char *fn, long n)
{
FILE *fp;
long size;
fp = (*fn == '!') ? popen(fn + 1, "r") : fopen(strip_escapes(fn), "r");
if (fp == NULL) {
fprintf(stderr, "%s: %s\n", fn, strerror(errno));
sprintf(errmsg, "cannot open input file");
return ERR;
} else if ((size = read_stream(fp, n)) < 0)
return ERR;
else if (((*fn == '!') ? pclose(fp) : fclose(fp)) < 0) {
fprintf(stderr, "%s: %s\n", fn, strerror(errno));
sprintf(errmsg, "cannot close input file");
return ERR;
}
if (!scripted)
fprintf(stderr, "%lu\n", size);
return current_addr - n;
}
char *sbuf; /* file i/o buffer */
int sbufsz; /* file i/o buffer size */
int newline_added; /* if set, newline appended to input file */
/* read_stream: read a stream into the editor buffer; return status */
long
read_stream(FILE *fp, long n)
{
line_t *lp = get_addressed_line_node(n);
undo_t *up = NULL;
unsigned long size = 0;
int o_newline_added = newline_added;
int o_isbinary = isbinary;
int appended = (n == addr_last);
int len;
isbinary = newline_added = 0;
if (des)
init_des_cipher();
for (current_addr = n; (len = get_stream_line(fp)) > 0; size += len) {
SPL1();
if (put_sbuf_line(sbuf) == NULL) {
SPL0();
return ERR;
}
lp = lp->q_forw;
if (up)
up->t = lp;
else if ((up = push_undo_stack(UADD, current_addr,
current_addr)) == NULL) {
SPL0();
return ERR;
}
SPL0();
}
if (len < 0)
return ERR;
if (appended && size && o_isbinary && o_newline_added)
fputs("newline inserted\n", stderr);
else if (newline_added && (!appended || (!isbinary && !o_isbinary)))
fputs("newline appended\n", stderr);
if (isbinary && newline_added && !appended)
size += 1;
if (!size)
newline_added = 1;
newline_added = appended ? newline_added : o_newline_added;
isbinary = isbinary | o_isbinary;
if (des)
size += 8 - size % 8; /* adjust DES size */
return size;
}
/* get_stream_line: read a line of text from a stream; return line length */
int
get_stream_line(FILE *fp)
{
int c;
int i = 0;
while (((c = des ? get_des_char(fp) : getc(fp)) != EOF || (!feof(fp) &&
!ferror(fp))) && c != '\n') {
REALLOC(sbuf, sbufsz, i + 1, ERR);
if (!(sbuf[i++] = c))
isbinary = 1;
}
REALLOC(sbuf, sbufsz, i + 2, ERR);
if (c == '\n')
sbuf[i++] = c;
else if (ferror(fp)) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "cannot read input file");
return ERR;
} else if (i) {
sbuf[i++] = '\n';
newline_added = 1;
}
sbuf[i] = '\0';
return (isbinary && newline_added && i) ? --i : i;
}
/* write_file: write a range of lines to a named file/pipe; return line count */
long
write_file(const char *fn, const char *mode, long n, long m)
{
FILE *fp;
long size;
fp = (*fn == '!') ? popen(fn+1, "w") : fopen(strip_escapes(fn), mode);
if (fp == NULL) {
fprintf(stderr, "%s: %s\n", fn, strerror(errno));
sprintf(errmsg, "cannot open output file");
return ERR;
} else if ((size = write_stream(fp, n, m)) < 0)
return ERR;
else if (((*fn == '!') ? pclose(fp) : fclose(fp)) < 0) {
fprintf(stderr, "%s: %s\n", fn, strerror(errno));
sprintf(errmsg, "cannot close output file");
return ERR;
}
if (!scripted)
fprintf(stderr, "%lu\n", size);
return n ? m - n + 1 : 0;
}
/* write_stream: write a range of lines to a stream; return status */
long
write_stream(FILE *fp, long n, long m)
{
line_t *lp = get_addressed_line_node(n);
unsigned long size = 0;
char *s;
int len;
if (des)
init_des_cipher();
for (; n && n <= m; n++, lp = lp->q_forw) {
if ((s = get_sbuf_line(lp)) == NULL)
return ERR;
len = lp->len;
if (n != addr_last || !isbinary || !newline_added)
s[len++] = '\n';
if (put_stream_line(fp, s, len) < 0)
return ERR;
size += len;
}
if (des) {
flush_des_file(fp); /* flush buffer */
size += 8 - size % 8; /* adjust DES size */
}
return size;
}
/* put_stream_line: write a line of text to a stream; return status */
int
put_stream_line(FILE *fp, char *s, int len)
{
while (len--)
if ((des ? put_des_char(*s++, fp) : fputc(*s++, fp)) < 0) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "cannot write file");
return ERR;
}
return 0;
}
/* get_extended_line: get a an extended line from stdin */
char *
get_extended_line(int *sizep, int nonl)
{
static char *cvbuf = NULL; /* buffer */
static int cvbufsz = 0; /* buffer size */
int l, n;
char *t = ibufp;
while (*t++ != '\n')
;
if ((l = t - ibufp) < 2 || !has_trailing_escape(ibufp, ibufp + l - 1)) {
*sizep = l;
return ibufp;
}
*sizep = -1;
REALLOC(cvbuf, cvbufsz, l, NULL);
memcpy(cvbuf, ibufp, l);
*(cvbuf + --l - 1) = '\n'; /* strip trailing esc */
if (nonl) l--; /* strip newline */
for (;;) {
if ((n = get_tty_line()) < 0)
return NULL;
else if (n == 0 || ibuf[n - 1] != '\n') {
sprintf(errmsg, "unexpected end-of-file");
return NULL;
}
REALLOC(cvbuf, cvbufsz, l + n, NULL);
memcpy(cvbuf + l, ibuf, n);
l += n;
if (n < 2 || !has_trailing_escape(cvbuf, cvbuf + l - 1))
break;
*(cvbuf + --l - 1) = '\n'; /* strip trailing esc */
if (nonl) l--; /* strip newline */
}
REALLOC(cvbuf, cvbufsz, l + 1, NULL);
cvbuf[l] = '\0';
*sizep = l;
return cvbuf;
}
/* get_tty_line: read a line of text from stdin; return line length */
int
get_tty_line(void)
{
int oi = 0;
int i = 0;
int c;
for (;;)
switch (c = getchar()) {
default:
oi = 0;
REALLOC(ibuf, ibufsz, i + 2, ERR);
if (!(ibuf[i++] = c)) isbinary = 1;
if (c != '\n')
continue;
lineno++;
ibuf[i] = '\0';
ibufp = ibuf;
return i;
case EOF:
if (ferror(stdin)) {
fprintf(stderr, "stdin: %s\n", strerror(errno));
sprintf(errmsg, "cannot read stdin");
clearerr(stdin);
ibufp = NULL;
return ERR;
} else {
clearerr(stdin);
if (i != oi) {
oi = i;
continue;
} else if (i)
ibuf[i] = '\0';
ibufp = ibuf;
return i;
}
}
}
#define ESCAPES "\a\b\f\n\r\t\v\\"
#define ESCCHARS "abfnrtv\\"
/* put_tty_line: print text to stdout */
int
put_tty_line(char *s, int l, long n, int gflag)
{
int col = 0;
char *cp;
#ifndef BACKWARDS
int lc = 0;
#endif
if (gflag & GNP) {
printf("%ld\t", n);
col = 8;
}
for (; l--; s++) {
if ((gflag & GLS) && ++col > cols) {
fputs("\\\n", stdout);
col = 1;
#ifndef BACKWARDS
if (!scripted && !isglobal && ++lc > rows) {
lc = 0;
fputs("Press <RETURN> to continue... ", stdout);
fflush(stdout);
if (get_tty_line() < 0)
return ERR;
}
#endif
}
if (gflag & GLS) {
if (31 < *s && *s < 127 && *s != '\\')
putchar(*s);
else {
putchar('\\');
col++;
if (*s && (cp = strchr(ESCAPES, *s)) != NULL)
putchar(ESCCHARS[cp - ESCAPES]);
else {
putchar((((unsigned char) *s & 0300) >> 6) + '0');
putchar((((unsigned char) *s & 070) >> 3) + '0');
putchar(((unsigned char) *s & 07) + '0');
col += 2;
}
}
} else
putchar(*s);
}
#ifndef BACKWARDS
if (gflag & GLS)
putchar('$');
#endif
putchar('\n');
return 0;
}

1425
bin/ed/main.c Normal file

File diff suppressed because it is too large Load Diff

135
bin/ed/re.c Normal file
View File

@@ -0,0 +1,135 @@
/* $NetBSD: re.c,v 1.19 2005/02/17 16:29:26 xtraeme Exp $ */
/* re.c: This file contains the regular expression interface routines for
the ed line editor. */
/*-
* Copyright (c) 1993 Andrew Moore, Talke Studio.
* 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 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 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.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char *rcsid = "@(#)re.c,v 1.6 1994/02/01 00:34:43 alm Exp";
#else
__RCSID("$NetBSD: re.c,v 1.19 2005/02/17 16:29:26 xtraeme Exp $");
#endif
#endif /* not lint */
#include "ed.h"
char errmsg[MAXPATHLEN + 40] = "";
/* get_compiled_pattern: return pointer to compiled pattern from command
buffer */
pattern_t *
get_compiled_pattern(void)
{
static pattern_t *expr = NULL;
char *exps;
char delimiter;
int n;
if ((delimiter = *ibufp) == ' ') {
sprintf(errmsg, "invalid pattern delimiter");
return NULL;
} else if (delimiter == '\n' || *++ibufp == '\n' || *ibufp == delimiter) {
if (!expr) sprintf(errmsg, "no previous pattern");
return expr;
} else if ((exps = extract_pattern(delimiter)) == NULL)
return NULL;
/* buffer alloc'd && not reserved */
if (expr && !patlock)
regfree(expr);
else if ((expr = (pattern_t *) malloc(sizeof(pattern_t))) == NULL) {
fprintf(stderr, "%s\n", strerror(errno));
sprintf(errmsg, "out of memory");
return NULL;
}
patlock = 0;
if ((n = regcomp(expr, exps, ere)) != 0) {
regerror(n, expr, errmsg, sizeof errmsg);
free(expr);
return expr = NULL;
}
return expr;
}
/* extract_pattern: copy a pattern string from the command buffer; return
pointer to the copy */
char *
extract_pattern(int delimiter)
{
static char *lhbuf = NULL; /* buffer */
static int lhbufsz = 0; /* buffer size */
char *nd;
int len;
for (nd = ibufp; *nd != delimiter && *nd != '\n'; nd++)
switch (*nd) {
default:
break;
case '[':
if ((nd = parse_char_class(++nd)) == NULL) {
sprintf(errmsg, "unbalanced brackets ([])");
return NULL;
}
break;
case '\\':
if (*++nd == '\n') {
sprintf(errmsg, "trailing backslash (\\)");
return NULL;
}
break;
}
len = nd - ibufp;
REALLOC(lhbuf, lhbufsz, len + 1, NULL);
memcpy(lhbuf, ibufp, len);
lhbuf[len] = '\0';
ibufp = nd;
return (isbinary) ? NUL_TO_NEWLINE(lhbuf, len) : lhbuf;
}
/* parse_char_class: expand a POSIX character class */
char *
parse_char_class(char *s)
{
int c, d;
if (*s == '^')
s++;
if (*s == ']')
s++;
for (; *s != ']' && *s != '\n'; s++)
if (*s == '[' && ((d = *(s+1)) == '.' || d == ':' || d == '='))
for (s++, c = *++s; *s != ']' || c != d; s++)
if ((c = *s) == '\n')
return NULL;
return (*s == ']') ? s : NULL;
}

260
bin/ed/sub.c Normal file
View File

@@ -0,0 +1,260 @@
/* $NetBSD: sub.c,v 1.6 2005/02/17 16:29:26 xtraeme Exp $ */
/* sub.c: This file contains the substitution routines for the ed
line editor */
/*-
* Copyright (c) 1993 Andrew Moore, Talke Studio.
* 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 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 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.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char *rcsid = "@(#)sub.c,v 1.1 1994/02/01 00:34:44 alm Exp";
#else
__RCSID("$NetBSD: sub.c,v 1.6 2005/02/17 16:29:26 xtraeme Exp $");
#endif
#endif /* not lint */
#include "ed.h"
char *rhbuf; /* rhs substitution buffer */
int rhbufsz; /* rhs substitution buffer size */
int rhbufi; /* rhs substitution buffer index */
/* extract_subst_tail: extract substitution tail from the command buffer */
int
extract_subst_tail(int *flagp, long *np)
{
char delimiter;
*flagp = *np = 0;
if ((delimiter = *ibufp) == '\n') {
rhbufi = 0;
*flagp = GPR;
return 0;
} else if (extract_subst_template() == NULL)
return ERR;
else if (*ibufp == '\n') {
*flagp = GPR;
return 0;
} else if (*ibufp == delimiter)
ibufp++;
if ('1' <= *ibufp && *ibufp <= '9') {
STRTOL(*np, ibufp);
return 0;
} else if (*ibufp == 'g') {
ibufp++;
*flagp = GSG;
return 0;
}
return 0;
}
/* extract_subst_template: return pointer to copy of substitution template
in the command buffer */
char *
extract_subst_template(void)
{
int n = 0;
int i = 0;
char c;
char delimiter = *ibufp++;
if (*ibufp == '%' && *(ibufp + 1) == delimiter) {
ibufp++;
if (!rhbuf) sprintf(errmsg, "no previous substitution");
return rhbuf;
}
while (*ibufp != delimiter) {
REALLOC(rhbuf, rhbufsz, i + 2, NULL);
if ((c = rhbuf[i++] = *ibufp++) == '\n' && *ibufp == '\0') {
i--, ibufp--;
break;
} else if (c != '\\')
;
else if ((rhbuf[i++] = *ibufp++) != '\n')
;
else if (!isglobal) {
while ((n = get_tty_line()) == 0 ||
(n > 0 && ibuf[n - 1] != '\n'))
clearerr(stdin);
if (n < 0)
return NULL;
}
}
REALLOC(rhbuf, rhbufsz, i + 1, NULL);
rhbuf[rhbufi = i] = '\0';
return rhbuf;
}
char *rbuf; /* substitute_matching_text buffer */
int rbufsz; /* substitute_matching_text buffer size */
/* search_and_replace: for each line in a range, change text matching a pattern
according to a substitution template; return status */
int
search_and_replace(pattern_t *pat, int gflag, int kth)
{
undo_t *up;
char *txt;
char *eot;
long lc;
long xa = current_addr;
int nsubs = 0;
line_t *lp;
int len;
current_addr = first_addr - 1;
for (lc = 0; lc <= second_addr - first_addr; lc++) {
lp = get_addressed_line_node(++current_addr);
if ((len = substitute_matching_text(pat, lp, gflag, kth)) < 0)
return ERR;
else if (len) {
up = NULL;
if (delete_lines(current_addr, current_addr) < 0)
return ERR;
txt = rbuf;
eot = rbuf + len;
SPL1();
do {
if ((txt = put_sbuf_line(txt)) == NULL) {
SPL0();
return ERR;
} else if (up)
up->t = get_addressed_line_node(current_addr);
else if ((up = push_undo_stack(UADD,
current_addr, current_addr)) == NULL) {
SPL0();
return ERR;
}
} while (txt != eot);
SPL0();
nsubs++;
xa = current_addr;
}
}
current_addr = xa;
if (nsubs == 0 && !(gflag & GLB)) {
sprintf(errmsg, "no match");
return ERR;
} else if ((gflag & (GPR | GLS | GNP)) &&
display_lines(current_addr, current_addr, gflag) < 0)
return ERR;
return 0;
}
/* substitute_matching_text: replace text matched by a pattern according to
a substitution template; return pointer to the modified text */
int
substitute_matching_text(pattern_t *pat, line_t *lp, int gflag, int kth)
{
int off = 0;
int changed = 0;
int matchno = 0;
int i = 0;
regmatch_t rm[SE_MAX];
char *txt;
char *eot;
if ((txt = get_sbuf_line(lp)) == NULL)
return ERR;
if (isbinary)
NUL_TO_NEWLINE(txt, lp->len);
eot = txt + lp->len;
if (!regexec(pat, txt, SE_MAX, rm, 0)) {
do {
if (!kth || kth == ++matchno) {
changed++;
i = rm[0].rm_so;
REALLOC(rbuf, rbufsz, off + i, ERR);
if (isbinary)
NEWLINE_TO_NUL(txt, rm[0].rm_eo);
memcpy(rbuf + off, txt, i);
off += i;
if ((off = apply_subst_template(txt, rm, off,
pat->re_nsub)) < 0)
return ERR;
} else {
i = rm[0].rm_eo;
REALLOC(rbuf, rbufsz, off + i, ERR);
if (isbinary)
NEWLINE_TO_NUL(txt, i);
memcpy(rbuf + off, txt, i);
off += i;
}
txt += rm[0].rm_eo;
} while (*txt && (!changed || ((gflag & GSG) && rm[0].rm_eo))
&& !regexec(pat, txt, SE_MAX, rm, REG_NOTBOL));
i = eot - txt;
REALLOC(rbuf, rbufsz, off + i + 2, ERR);
if (i > 0 && !rm[0].rm_eo && (gflag & GSG)) {
sprintf(errmsg, "infinite substitution loop");
return ERR;
}
if (isbinary)
NEWLINE_TO_NUL(txt, i);
memcpy(rbuf + off, txt, i);
memcpy(rbuf + off + i, "\n", 2);
}
return changed ? off + i + 1 : 0;
}
/* apply_subst_template: modify text according to a substitution template;
return offset to end of modified text */
int
apply_subst_template(char *boln, regmatch_t *rm, int off, int re_nsub)
{
int j = 0;
int k = 0;
int n;
char *sub = rhbuf;
for (; sub - rhbuf < rhbufi; sub++)
if (*sub == '&') {
j = rm[0].rm_so;
k = rm[0].rm_eo;
REALLOC(rbuf, rbufsz, off + k - j, ERR);
while (j < k)
rbuf[off++] = boln[j++];
} else if (*sub == '\\' && '1' <= *++sub && *sub <= '9' &&
(n = *sub - '0') <= re_nsub) {
j = rm[n].rm_so;
k = rm[n].rm_eo;
REALLOC(rbuf, rbufsz, off + k - j, ERR);
while (j < k)
rbuf[off++] = boln[j++];
} else {
REALLOC(rbuf, rbufsz, off + 1, ERR);
rbuf[off++] = *sub;
}
REALLOC(rbuf, rbufsz, off + 1, ERR);
rbuf[off] = '\0';
return off;
}

1
bin/ed/test/=.err Normal file
View File

@@ -0,0 +1 @@
1,$=

28
bin/ed/test/Makefile Normal file
View File

@@ -0,0 +1,28 @@
# $NetBSD: Makefile,v 1.12 2003/10/26 03:50:07 lukem Exp $
.include <bsd.own.mk>
ED?= ../obj/ed
all: check
@:
check: build test
@if grep -h '\*\*\*' errs.o scripts.o; then :; else \
echo "tests completed successfully."; \
fi
build: mkscripts.sh
@if [ -f errs.o ]; then :; else \
echo "building test scripts for $(ED) ..."; \
${HOST_SH} ${.CURDIR}/mkscripts.sh $(ED); \
fi
test: build ckscripts.sh
@echo testing $(ED) ...
@${HOST_SH} ckscripts.sh $(ED)
clean:
rm -f *.ed *.red *.[oz] *~
.include <bsd.prog.mk>

32
bin/ed/test/README Normal file
View File

@@ -0,0 +1,32 @@
$NetBSD: README,v 1.8 1995/03/21 09:05:18 cgd Exp $
The files in this directory with suffixes `.t', `.d', `.r' and `.err' are
used for testing ed. To run the tests, set the ED variable in the Makefile
for the path name of the program to be tested (e.g., /bin/ed), and type
`make'. The tests do not exhaustively verify POSIX compliance nor do
they verify correct 8-bit or long line support.
The test file suffixes have the following meanings:
.t Template - a list of ed commands from which an ed script is
constructed
.d Data - read by an ed script
.r Result - the expected output after processing data via an ed
script.
.err Error - invalid ed commands that should generate an error
The output of the tests is written to the two files err.o and scripts.o.
At the end of the tests, these files are grep'ed for error messages,
which look like:
*** The script u.ed exited abnormally ***
or:
*** Output u.o of script u.ed is incorrect ***
The POSIX requirement that an address range not be used where at most
a single address is expected has been relaxed in this version of ed.
Therefore, the following scripts which test for compliance with this
POSIX rule exit abnormally:
=-err.ed
a1-err.ed
i1-err.ed
k1-err.ed
r1-err.ed

17
bin/ed/test/TODO Normal file
View File

@@ -0,0 +1,17 @@
$NetBSD: TODO,v 1.3 1995/03/21 09:05:20 cgd Exp $
Some missing tests:
0) g/./s^@^@ - okay: NULs in commands
1) g/./s/^@/ - okay: NULs in patterns
2) a
hello^V^Jworld
. - okay: embedded newlines in insert mode
3) ed "" - error: invalid filename
4) red .. - error: restricted
5) red / - error: restricted
5) red !xx - error: restricted
6) ed -x - verify: 8-bit clean
7) ed - verify: long-line support
8) ed - verify: interactive/help mode
9) G/pat/ - verify: global interactive command
10) V/pat/ - verify: global interactive command

8
bin/ed/test/a.r Normal file
View File

@@ -0,0 +1,8 @@
hello world
line 1
hello world!
line 2
line 3
line 4
line5
hello world!!

9
bin/ed/test/a.t Normal file
View File

@@ -0,0 +1,9 @@
0a
hello world
.
2a
hello world!
.
$a
hello world!!
.

3
bin/ed/test/a1.err Normal file
View File

@@ -0,0 +1,3 @@
1,$a
hello world
.

3
bin/ed/test/a2.err Normal file
View File

@@ -0,0 +1,3 @@
aa
hello world
.

2
bin/ed/test/addr.r Normal file
View File

@@ -0,0 +1,2 @@
line 2
line9

5
bin/ed/test/addr.t Normal file
View File

@@ -0,0 +1,5 @@
1 d
1 1 d
1,2,d
1;+ + ,d
1,2;., + 2d

1
bin/ed/test/addr1.err Normal file
View File

@@ -0,0 +1 @@
100

1
bin/ed/test/addr2.err Normal file
View File

@@ -0,0 +1 @@
-100

BIN
bin/ed/test/ascii.r Normal file

Binary file not shown.

1
bin/ed/test/bang1.err Normal file
View File

@@ -0,0 +1 @@
.!date

1
bin/ed/test/bang1.r Normal file
View File

@@ -0,0 +1 @@
okay

5
bin/ed/test/bang1.t Normal file
View File

@@ -0,0 +1,5 @@
!read one
hello, world
a
okay
.

1
bin/ed/test/bang2.err Normal file
View File

@@ -0,0 +1 @@
!!

4
bin/ed/test/c.r Normal file
View File

@@ -0,0 +1,4 @@
at the top
between top/middle
in the middle
at the bottom

12
bin/ed/test/c.t Normal file
View File

@@ -0,0 +1,12 @@
1c
at the top
.
4c
in the middle
.
$c
at the bottom
.
2,3c
between top/middle
.

3
bin/ed/test/c1.err Normal file
View File

@@ -0,0 +1,3 @@
cc
hello world
.

3
bin/ed/test/c2.err Normal file
View File

@@ -0,0 +1,3 @@
0c
hello world
.

37
bin/ed/test/ckscripts.sh Executable file
View File

@@ -0,0 +1,37 @@
#!/bin/sh -
# $NetBSD: ckscripts.sh,v 1.9 1995/04/23 10:07:34 cgd Exp $
#
# This script runs the .ed scripts generated by mkscripts.sh
# and compares their output against the .r files, which contain
# the correct output
PATH="/bin:/usr/bin:/usr/local/bin/:."
ED=$1
[ ! -x $ED ] && { echo "$ED: cannot execute"; exit 1; }
# Run the *.red scripts first, since these don't generate output;
# they exit with non-zero status
for i in *.red; do
echo $i
if $i; then
echo "*** The script $i exited abnormally ***"
fi
done >errs.o 2>&1
# Run the remainding scripts; they exit with zero status
for i in *.ed; do
# base=`expr $i : '\([^.]*\)'`
# base=`echo $i | sed 's/\..*//'`
base=`$ED - \!"echo $i" <<-EOF
s/\..*
EOF`
if $base.ed; then
if cmp -s $base.o $base.r; then :; else
echo "*** Output $base.o of script $i is incorrect ***"
fi
else
echo "*** The script $i exited abnormally ***"
fi
done >scripts.o 2>&1
grep -h '\*\*\*' errs.o scripts.o

1
bin/ed/test/d.err Normal file
View File

@@ -0,0 +1 @@
dd

1
bin/ed/test/d.r Normal file
View File

@@ -0,0 +1 @@
line 2

3
bin/ed/test/d.t Normal file
View File

@@ -0,0 +1,3 @@
1d
2;+1d
$d

1
bin/ed/test/e1.err Normal file
View File

@@ -0,0 +1 @@
ee e1.err

1
bin/ed/test/e1.r Normal file
View File

@@ -0,0 +1 @@
E e1.t

1
bin/ed/test/e1.t Normal file
View File

@@ -0,0 +1 @@
E e1.t

1
bin/ed/test/e2.err Normal file
View File

@@ -0,0 +1 @@
.e e2.err

1
bin/ed/test/e2.r Normal file
View File

@@ -0,0 +1 @@
hello world-

1
bin/ed/test/e2.t Normal file
View File

@@ -0,0 +1 @@
E !echo hello world-

1
bin/ed/test/e3.err Normal file
View File

@@ -0,0 +1 @@
ee.err

1
bin/ed/test/e3.r Normal file
View File

@@ -0,0 +1 @@
E !echo hello world-

1
bin/ed/test/e3.t Normal file
View File

@@ -0,0 +1 @@
E

1
bin/ed/test/e4.r Normal file
View File

@@ -0,0 +1 @@
E !echo hello world-

1
bin/ed/test/e4.t Normal file
View File

@@ -0,0 +1 @@
e

1
bin/ed/test/f1.err Normal file
View File

@@ -0,0 +1 @@
.f f1.err

1
bin/ed/test/f2.err Normal file
View File

@@ -0,0 +1 @@
ff1.err

1
bin/ed/test/g1.err Normal file
View File

@@ -0,0 +1 @@
g/./s //x/

15
bin/ed/test/g1.r Normal file
View File

@@ -0,0 +1,15 @@
line5
help! world
order
line 4
help! world
order
line 3
help! world
order
line 2
help! world
order
line 1
help! world
order

6
bin/ed/test/g1.t Normal file
View File

@@ -0,0 +1,6 @@
g/./m0
g/./s/$/\
hello world
g/hello /s/lo/p!/\
a\
order

1
bin/ed/test/g2.err Normal file
View File

@@ -0,0 +1 @@
g//s/./x/

1
bin/ed/test/g2.r Normal file
View File

@@ -0,0 +1 @@
hello world

2
bin/ed/test/g2.t Normal file
View File

@@ -0,0 +1,2 @@
g/[2-4]/-1,+1c\
hello world

1
bin/ed/test/g3.err Normal file
View File

@@ -0,0 +1 @@
g

5
bin/ed/test/g3.r Normal file
View File

@@ -0,0 +1,5 @@
linc 3
xine 1
xine 2
xinc 4
xinc5

4
bin/ed/test/g3.t Normal file
View File

@@ -0,0 +1,4 @@
g/./s//x/\
3m0
g/./s/e/c/\
2,3m1

7
bin/ed/test/g4.r Normal file
View File

@@ -0,0 +1,7 @@
hello
zine 1
line 2
line 3
line 4
line5
world

13
bin/ed/test/g4.t Normal file
View File

@@ -0,0 +1,13 @@
g/./s/./x/\
u\
s/./y/\
u\
s/./z/\
u
u
0a
hello
.
$a
world
.

9
bin/ed/test/g5.r Normal file
View File

@@ -0,0 +1,9 @@
line 1
line 2
line 3
line 2
line 3
line 1
line 3
line 1
line 2

2
bin/ed/test/g5.t Normal file
View File

@@ -0,0 +1,2 @@
g/./1,3t$\
1d

1
bin/ed/test/h.err Normal file
View File

@@ -0,0 +1 @@
.h

8
bin/ed/test/i.r Normal file
View File

@@ -0,0 +1,8 @@
hello world
hello world!
line 1
line 2
line 3
line 4
hello world!!
line5

9
bin/ed/test/i.t Normal file
View File

@@ -0,0 +1,9 @@
1i
hello world
.
2i
hello world!
.
$i
hello world!!
.

3
bin/ed/test/i1.err Normal file
View File

@@ -0,0 +1,3 @@
1,$i
hello world
.

3
bin/ed/test/i2.err Normal file
View File

@@ -0,0 +1,3 @@
ii
hello world
.

3
bin/ed/test/i3.err Normal file
View File

@@ -0,0 +1,3 @@
0i
hello world
.

4
bin/ed/test/j.r Normal file
View File

@@ -0,0 +1,4 @@
line 1
line 2line 3
line 4
line5

2
bin/ed/test/j.t Normal file
View File

@@ -0,0 +1,2 @@
1,1j
2,3j

5
bin/ed/test/k.r Normal file
View File

@@ -0,0 +1,5 @@
line 3
hello world
line 4
line5
line 2

10
bin/ed/test/k.t Normal file
View File

@@ -0,0 +1,10 @@
2ka
1d
'am$
1ka
0a
hello world
.
'ad
u
'am0

1
bin/ed/test/k1.err Normal file
View File

@@ -0,0 +1 @@
1,$ka

1
bin/ed/test/k2.err Normal file
View File

@@ -0,0 +1 @@
kA

1
bin/ed/test/k3.err Normal file
View File

@@ -0,0 +1 @@
0ka

6
bin/ed/test/k4.err Normal file
View File

@@ -0,0 +1,6 @@
a
hello
.
.ka
'ad
'ap

0
bin/ed/test/l.r Normal file
View File

0
bin/ed/test/l.t Normal file
View File

4
bin/ed/test/m.err Normal file
View File

@@ -0,0 +1,4 @@
a
hello world
.
1,$m1

5
bin/ed/test/m.r Normal file
View File

@@ -0,0 +1,5 @@
line5
line 1
line 2
line 3
line 4

7
bin/ed/test/m.t Normal file
View File

@@ -0,0 +1,7 @@
1,2m$
1,2m$
1,2m$
$m0
$m0
2,3m1
2,3m3

75
bin/ed/test/mkscripts.sh Executable file
View File

@@ -0,0 +1,75 @@
#!/bin/sh -
# $NetBSD: mkscripts.sh,v 1.10 1995/04/23 10:07:36 cgd Exp $
#
# This script generates ed test scripts (.ed) from .t files
PATH="/bin:/usr/bin:/usr/local/bin/:."
ED=$1
[ ! -x $ED ] && { echo "$ED: cannot execute"; exit 1; }
for i in *.t; do
# base=${i%.*}
# base=`echo $i | sed 's/\..*//'`
# base=`expr $i : '\([^.]*\)'`
# (
# echo "#!/bin/sh -"
# echo "$ED - <<\EOT"
# echo "r $base.d"
# cat $i
# echo "w $base.o"
# echo EOT
# ) >$base.ed
# chmod +x $base.ed
# The following is pretty ugly way of doing the above, and not appropriate
# use of ed but the point is that it can be done...
base=`$ED - \!"echo $i" <<-EOF
s/\..*
EOF`
$ED - <<-EOF
a
#!/bin/sh -
$ED - <<\EOT
H
r $base.d
w $base.o
EOT
.
-2r $i
w $base.ed
!chmod +x $base.ed
EOF
done
for i in *.err; do
# base=${i%.*}
# base=`echo $i | sed 's/\..*//'`
# base=`expr $i : '\([^.]*\)'`
# (
# echo "#!/bin/sh -"
# echo "$ED - <<\EOT"
# echo H
# echo "r $base.err"
# cat $i
# echo "w $base.o"
# echo EOT
# ) >$base-err.ed
# chmod +x $base-err.ed
# The following is pretty ugly way of doing the above, and not appropriate
# use of ed but the point is that it can be done...
base=`$ED - \!"echo $i" <<-EOF
s/\..*
EOF`
$ED - <<-EOF
a
#!/bin/sh -
$ED - <<\EOT
H
r $base.err
w $base.o
EOT
.
-2r $i
w ${base}.red
!chmod +x ${base}.red
EOF
done

0
bin/ed/test/n.r Normal file
View File

0
bin/ed/test/n.t Normal file
View File

1
bin/ed/test/nl.err Normal file
View File

@@ -0,0 +1 @@
,1

8
bin/ed/test/nl1.r Normal file
View File

@@ -0,0 +1,8 @@
hello world
line 1
line 2
line 3
line 4
line5

8
bin/ed/test/nl1.t Normal file
View File

@@ -0,0 +1,8 @@
1
0a
hello world
.

Some files were not shown because too many files have changed in this diff Show More