Commit graph

7205 commits

Author SHA1 Message Date
Ori Bernstein
2d59d75e3a stdio: fix warnings, make code more standard
Masking with _IO_CHMASK after the assignment causes a warning.
We're better off masking before, but casting the assignment to
prevent sign extension.
2020-07-19 14:14:14 -07:00
cinap_lenrek
9ea93a5fd3 libndb: order subnets by prefix length for ndbipinfo() lookups
to reproduce:

ipnet=foo0 ip=192.168.0.0 ipmask=/16
ipnet=foo1 ip=192.168.0.0 ipmask=/24
ip=192.168.0.1 sys=foo2

% ndb/ipquery sys foo2 ipnet ipmask
ipnet=foo0 ipmask=/16

we would expect to get ipnet=foo1 here as it is more
specific subnet.

the solution is to order the subnets by prefix length
in subnet() before calling filter(), so that we process
the longest prefixes first.
2020-07-17 16:53:20 +02:00
Ori Bernstein
407cf4ac6e ape: simplify mkfile (thanks amavect)
ape cp, mv, and cc build with ?c, not pcc
ape cp and mv just ignore one or two extra flags,
instead of providing posix compatibility
it's better to fail then do nothing

remove cp.c and mv.c
move cc.c to /sys/src/ape/9src so it doesn't
need its own mkfile rule
2020-07-16 15:22:42 -07:00
cinap_lenrek
61b1134df9 merge 2020-07-16 03:12:31 +02:00
cinap_lenrek
e7e6f4fc90 pc64: disable interrupts in mmuwalk() for checkmmu()
we have to disable interrupts during mmuwalk() of user pages
as we can get preempted during mmu walk and the original
m->pml4 might become one of a different process.
2020-07-16 03:11:27 +02:00
Ori Bernstein
0366f11300 cpp: fix mutually recursive macros
Handle cases where parameterless macros expand to each other:

	#define FOO BAR
	#define BAR FOO
	FOO

There were cases where the macros didn't make it into the hidesets,
and we would recurse infinitely. This fixes that.
2020-07-13 18:50:14 -07:00
cinap_lenrek
77ddc8c654 kernel: make segments non-executable when icache is not maintained
This change makes it mandatory for programs to call segflush() on
code that is not in the text segment if they want to execute it.

As a side effect, this means that everything but the text segment
will be non-executable by default, even without the SG_NOEXEC
attribute. Segments with the SG_NOEXEC attribute never become
executable, even when segflush() is called on them.
2020-07-12 21:42:26 +02:00
cinap_lenrek
11fcf41472 aux/cpuid: flush instruction cache of after patching trampoline 2020-07-12 19:37:38 +02:00
cinap_lenrek
2c8c2bc727 hjfs: update mtime and qid.vers for directory on rename
when wstating a file, its directory should be updated to
reflect this change.

here is what the manpage states:

> The mtime field reflects the time of the last change of content
> (except when later changed by wstat). For a directory it is the
> time of the most recent remove, create, or wstat of a file in the
> directory.
2020-07-12 18:54:22 +02:00
cinap_lenrek
a469cffafe cwfs: update mtime and qid.vers for directory on rename
when wstating a file, its directory should be updated to
reflect this change.

here is what the manpage states:

> The mtime field reflects the time of the last change of content
> (except when later changed by wstat). For a directory it is the
> time of the most recent remove, create, or wstat of a file in the
> directory.
2020-07-12 18:52:28 +02:00
Ori Bernstein
1987cc69c8 stdio, ape/stdio: fix order of operations in putc
When calling putc, we need to return either EOF
or the character returned. To distinguish the
two, we need to avoid sign extending 0xff. The
code attempted to do this, but the order of
operations was wrong, so we ended up masking,
setting a character, and then sign extending
the character.

This fixes things so we mask after assignment.
2020-07-11 13:28:58 -07:00
cinap_lenrek
ad26dc48a6 imap4d: fix missing return in %δ format of Dfmt() 2020-07-05 22:15:02 +02:00
cinap_lenrek
b33eb658e2 imap4d: get rid of unixdate/unixfrom handling
all this logic is already done by upas/fs, the unixdate and from
fields in the info file will always be correct.
2020-07-05 21:18:26 +02:00
cinap_lenrek
24dcdb54b8 imap4d: fix mkfile to have the correct default target 2020-07-05 21:16:41 +02:00
cinap_lenrek
fc2a3496fe upas/fs: wait until the index becomes unlocked
For big mailboxes with imap4d, ignoring the index and trying to scan
the mailbox concurrently is not very productive. Just wait for the
other upas/fs to write the whole index.

The issue is that imap might time out and make another connection
spawning even more upas/fs instances that all then try to rebuild
the index concurrently.
2020-07-05 21:15:55 +02:00
cinap_lenrek
786ec28b7b upas/fs: fix wrong nparts field index (changed in previous commit) 2020-07-05 19:51:59 +02:00
cinap_lenrek
e844c77845 nedmail: don't try to shoot down subcommand on interrupt
this breaks interrupt key handling in rio. theres also no
point in trying todo so as rio sends the note to the whole
process group so the subcommand should have got the note
already.

just wait for the subprocess to terminate.
2020-07-05 18:17:20 +02:00
cinap_lenrek
43e56e26de upas/fs: put date822 into the index, fix from and replyto handling
the date, from and replyto fields where unstable, in that the value
read depended on the state of the cache.

fixing the from and replyto fields is easy, we just handle the
substitution in parsebody().

the date field however requires us to put the date822 into the index
so it can be recovered without requiering to reparse the header
(and body, as we might have a message/rfc822 message with promoted
fields).

with these changes, the fields will be consistent and independnet
of the cache state.

a small optimization also has been added:

after parsing the body, attachments and substitution of from/replyto,
the boundary and unixfrom strings are not needed anymore and can
be freed early.
2020-07-05 17:44:32 +02:00
cinap_lenrek
e161f1c8ba upas/fs: fix memory leak in ref822() 2020-07-05 17:05:49 +02:00
Ori Bernstein
a71450412a imap4d: respect errors from read(), remove debug prints
When read() failed, we were casting the -1 return to
unsigned, which would cause us to index out of bounds.
found using dovecot imap test suite. While we're here,
let's remove the stray debug prints.
2020-07-03 11:29:45 -07:00
Alex Musolino
a3a4f5c3e3 kbdfs/mklatin: allow >16 bit runes in /lib/keyboard 2020-07-03 22:14:49 +09:30
cinap_lenrek
03852d9408 bcm64: increase maximum segment size to 8GB
make it possible for one process to use all
of physical memory.
2020-07-03 01:17:38 +02:00
cinap_lenrek
91994dc5d8 bcm64: handle 8GB of physical memory for raspberry pi4
widen and move the KMAP window to a new address so we can
handle the 8GB of physical memory of the new raspberry pi4.

the new memory map on pi4 uses the following 4 banks:

0x000000000	0x03e600000
0x040000000	0x0fc000000 <- soc.dramsize (only < 4GB)
0x100000000	0x180000000
0x180000000 0x200000000
2020-07-02 21:12:40 +02:00
cinap_lenrek
bd23963c8f bcm64: fix usb xhci controller on pi4 8GB variant (thanks richard miller)
On the 8GB variant of the raspberry pi 4,
the eeprom chip for the xhci controller is missing and
instead loaded from sdram (by the gpu firmware).

for this, the gpu firmware needs to be notified of
the xhci controllers pci bus address (after reset)
that was assigned by our pci enumeration code.
2020-07-02 21:04:01 +02:00
cinap_lenrek
91c277a724 merge 2020-06-29 00:24:45 +02:00
cinap_lenrek
85132f197b upas/fs: move unixheader handling to parseheaders()
parsing the unixheader in mdir fetch routine is the wrong place,
as no invalid character handling has been performed yet. also
the string is not neccesarily null terminated.

avoid duplication with plan9 mbox parsing and just do it in
parseheaders(), which already handles faking the unix headers
for pop3 and imap.
2020-06-29 00:23:37 +02:00
kvik
359362395f graphics(2): fix typo 2020-06-28 23:45:18 +02:00
cinap_lenrek
30ab804b58 kernel: segflush() needs to flush tlb of other processes
instruction cache maintenance is done on tlb miss;
when a page gets fauled in; with putmmu() checking
the page->txtflush cpu bitmap.

syssegflush() used to only call flushmmu() after
segflush() for the calling process, but when a segment
is shared with other processes, we have to flush the
other processes tlb as well.

this adds the missing procflushseg() call into segflush().

note that procflushseg() leaves the calling process alone,
so the flushmmu() call in syssegflush() is still required.

segmentioproc() does not need to call flushmmu() after
segflush() as it is never going to jump to the modified
page, hence the stale icache does not matter.
2020-06-28 16:26:59 +02:00
cinap_lenrek
675ebaeca3 aux/trampoline: Implement inactivity timeout (-t option)
Using aux/trampoline to relay udp traffic needs a inactivity
timeout to be practical as there is no explicit connection
termination.
2020-06-27 16:40:53 +02:00
kvik
f0ea4af5ef 9p(2): fix typo 2020-06-25 23:23:23 +02:00
cinap_lenrek
739bb1a06f upas/fs: remove now unused Mtrunc mimeflags constant 2020-06-24 19:21:47 +02:00
cinap_lenrek
d7613e356c upas/fs: use memchr() instead of strchr() in hdrlen()
make sure we look for the end of the header within the
pointer range, and not accidentally read beyond hend.

also, messages are not null terminated, so this could
even go beyond the email data buffer.

get rid of mimeflag which was only used for some assert
checks.

take header length into account when comparing header
against ignored header strings.
2020-06-24 19:18:37 +02:00
cinap_lenrek
1e8eb61a37 merge 2020-06-24 18:47:03 +02:00
cinap_lenrek
b33773def8 ip/tinc: run script sub-shell in its own environment 2020-06-24 18:45:58 +02:00
Alex Musolino
200c18bc15 upas/marshal: make attachment failure fatal 2020-06-22 16:34:31 +09:30
cinap_lenrek
55d8082842 usbxhci: implement isochronous in transfers (for webcam, audio recording) 2020-06-21 21:42:13 +02:00
cinap_lenrek
4fb65ae3e8 devusb: keep isochronous ep->hz consistent with maxpkt, ntds and pollival
The sample frequency is an artificial parameter used for
isochronous out transfers to better match the target
frequency (usually, a sound card).

when hz is set, devusb adjusts the endpoint's maxpkt to get
the requested frequency and a multiple of the samplesize per
packet.

however, when hz is not set, then we should calculate the
frequency from maxpkt, ntds and pollival, so all parameters
will be consistent with each other.
2020-06-21 21:36:50 +02:00
Alex Musolino
78a6eb52c8 abaco: add fonts.h to HFILES in mkfile (thanks eekee) 2020-06-21 19:34:54 +09:30
cinap_lenrek
7c3477cb61 ip/torrent: fix size check in 64-bit "v" unpack (thanks pr) 2020-06-19 20:19:57 +02:00
Alex Musolino
86a77e5088 cifsd(8): fix typo (thanks senthil) 2020-06-18 12:11:06 +09:30
cinap_lenrek
febe84af75 libc: revert date change again. this is getting ridicuoulus.
this breaks the sample from the seconds manpage, and overall
produces funky results. this needs alot more testing.

term% seconds '23 may 2011'
seconds: tmparse: invalid date 23 may 2011 near 'may 2011'

term% seconds '2019-01-01 00:00:00'
-118370073600
2020-06-15 00:12:57 +02:00
Ori Bernstein
8b3efcfc4e libc, seconds: new time and date apis (try 2)
Redo date handling in libc almost entirely. This allows
handling dates and times from outside your timezones,
fixes timezone loading in multithreaded applications,
and allows parsing and formatting using custom format
strings.

As a test of the APIs, we replace the formatting code in
seconds(1), shrinking it massively.

The last commit missed a few removals, and made it
unnecessarily hard to do an update.
2020-06-14 09:33:32 -07:00
cinap_lenrek
f380851ddb libc: reverting previous change until ori can fix it 2020-06-14 04:47:22 +02:00
Ori Bernstein
e2ee991490 libc, seconds: new time and date apis.
Redo date handling in libc almost entirely. This allows
handling dates and times from outside your timezones,
fixes timezone loading in multithreaded applications,
and allows parsing and formatting using custom format
strings.

As a test of the APIs, we replace the formatting code in
seconds(1), shrinking it massively.
2020-06-13 12:38:49 -07:00
cinap_lenrek
8ffcc91b1b merge 2020-06-12 01:36:50 +02:00
cinap_lenrek
ac6cb9af29 ramfs: make Elocked[] more consistent (thanks fazlul)
Go expects the error to be one of the three errors returned in
Bell Labs Plan 9. As listed in
f7ba82d68f/src/cmd/go/internal/lockedfile/lockedfile_plan9.go (L16):

	// Opening an exclusive-use file returns an error.
	// The expected error strings are:
	//
	//  - "open/create -- file is locked" (cwfs, kfs)
	//  - "exclusive lock" (fossil)
	//  - "exclusive use file already open" (ramfs)
	var lockedErrStrings = [...]string{
		"file is locked",
		"exclusive lock",
		"exclusive use file already open",
	}
2020-06-12 01:35:37 +02:00
kvik
57362e0c8c acme: implement position-dependent scroll-wheel scrolling
This brings acme scrolling behaviour in line with that of 9front's rio
and sam, where the amount scrolled varies with a vertical position of
the pointer within the window, similar to how the scrollbar works.

At some point it would be good to implement a line-at-a-time scrolling
when the Shift key is pressed, as seen in rio.  For this to happen the
acme keyboard input needs to be rewritten in terms of /dev/kbd instead
of relying on keyboard(2) -- that is, the /dev/cons interface.
2020-06-11 15:33:57 +02:00
Ori Bernstein
db6e26d55e libplumb: add missing mkfile 2020-06-09 12:23:24 -07:00
Ori Bernstein
ebb9acecdd acme: document log file in manpage 2020-06-07 08:27:36 -07:00
cinap_lenrek
7c8d75a309 acme: add missing logf.c 2020-06-07 17:06:33 +02:00