changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: evdev/kbd fully operational, rustls and blake3 cleanups

changeset 685: ebe3315b7add
parent 684: 29fe829a7ac3
child 686: 8e16efedfd76
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 29 Sep 2024 22:44:52 -0400
files: lisp/ffi/blake3/constants.lisp lisp/ffi/blake3/pkg.lisp lisp/ffi/blake3/tests.lisp lisp/ffi/evdev/input.lisp lisp/ffi/evdev/pkg.lisp lisp/ffi/evdev/tests.lisp lisp/ffi/rustls/macs.lisp lisp/ffi/rustls/rustls.asd lisp/ffi/rustls/rustls.lisp lisp/ffi/rustls/tests.lisp lisp/ffi/rustls/types.lisp lisp/lib/io/kbd.lisp lisp/std/fmt.lisp lisp/std/os.lisp lisp/std/pkg.lisp
description: evdev/kbd fully operational, rustls and blake3 cleanups
     1.1--- a/lisp/ffi/blake3/constants.lisp	Sun Sep 29 00:31:24 2024 -0400
     1.2+++ b/lisp/ffi/blake3/constants.lisp	Sun Sep 29 22:44:52 2024 -0400
     1.3@@ -1,3 +1,8 @@
     1.4-("stddef.h" "stdint.h")
     1.5+("stddef.h" "stdint.h" "blake3.h")
     1.6 
     1.7-()
     1.8+( ;; (:string blake3-version-string "BLAKE3_VERSION_STRING")
     1.9+ (:integer +blake3-key-len+ "BLAKE3_KEY_LEN")
    1.10+ (:integer +blake3-out-len+ "BLAKE3_OUT_LEN")
    1.11+ (:integer +blake3-block-len+ "BLAKE3_BLOCK_LEN")
    1.12+ (:integer +blake3-chunk-len+ "BLAKE3_CHUNK_LEN")
    1.13+ (:integer +blake3-max-depth+ "BLAKE3_MAX_DEPTH"))
     2.1--- a/lisp/ffi/blake3/pkg.lisp	Sun Sep 29 00:31:24 2024 -0400
     2.2+++ b/lisp/ffi/blake3/pkg.lisp	Sun Sep 29 22:44:52 2024 -0400
     2.3@@ -7,6 +7,7 @@
     2.4   (:nicknames :blake3)
     2.5   (:use :cl :std :sb-alien)
     2.6   (:export 
     2.7+   :load-blake3
     2.8    :+blake3-key-len+
     2.9    :+blake3-out-len+
    2.10    :+blake3-block-len+
    2.11@@ -26,13 +27,7 @@
    2.12 
    2.13 (in-package :blake3)
    2.14 
    2.15-(defvar +blake3-key-len+ 32)
    2.16-(defvar +blake3-out-len+ 32)
    2.17-(defvar +blake3-block-len+ 64)
    2.18-(defvar +blake3-chunk-len+ 1024)
    2.19-(defvar +blake3-max-depth+ 54)
    2.20-
    2.21-(define-alien-loader "blake3" t "/usr/local/lib/")
    2.22+(define-alien-loader "blake3")
    2.23 
    2.24 (define-alien-routine blake3-version c-string)
    2.25 
     3.1--- a/lisp/ffi/blake3/tests.lisp	Sun Sep 29 00:31:24 2024 -0400
     3.2+++ b/lisp/ffi/blake3/tests.lisp	Sun Sep 29 22:44:52 2024 -0400
     3.3@@ -12,7 +12,7 @@
     3.4 (load-blake3)
     3.5 
     3.6 (deftest version ()
     3.7-  (is (string= "1.5.0" (blake3-version))))
     3.8+  (is (stringp (blake3-version))))
     3.9 
    3.10 (deftest hasher ()
    3.11   (with-alien ((h blake3-hasher)
    3.12@@ -21,6 +21,4 @@
    3.13     (blake3-hasher-init (addr h))
    3.14     (blake3-hasher-update (addr h) nil 0)
    3.15     (blake3-hasher-finalize (addr h) o olen)
    3.16-    (print (addr h))
    3.17-    (print (addr o))
    3.18     (blake3-hasher-reset (addr h))))
     4.1--- a/lisp/ffi/evdev/input.lisp	Sun Sep 29 00:31:24 2024 -0400
     4.2+++ b/lisp/ffi/evdev/input.lisp	Sun Sep 29 22:44:52 2024 -0400
     4.3@@ -5,15 +5,13 @@
     4.4 ;;; Code:
     4.5 (in-package :evdev/input)
     4.6 
     4.7-;; from linux/time.h
     4.8-(define-alien-type timeval
     4.9-    (struct timeval
    4.10-            (tv-sec sb-unix:time-t)
    4.11-            (tv-nsec long)))
    4.12+;; (defun eviocgbit (ev len)
    4.13+;;   ;; ioctl read
    4.14+;;   (sb-posix::ioctl 8 2 "E" (+ #x20 ev) len))
    4.15 
    4.16 (define-alien-type input-event
    4.17     (struct input-event
    4.18-            (time timeval)
    4.19+            (time sb-posix::alien-timeval)
    4.20             (type (unsigned 16))
    4.21             (code (unsigned 16))
    4.22             (value (signed 32))))
     5.1--- a/lisp/ffi/evdev/pkg.lisp	Sun Sep 29 00:31:24 2024 -0400
     5.2+++ b/lisp/ffi/evdev/pkg.lisp	Sun Sep 29 22:44:52 2024 -0400
     5.3@@ -16,7 +16,11 @@
     5.4 
     5.5 (defpackage :evdev
     5.6   (:use :cl :std :sb-alien :evdev/input)
     5.7-  (:export))
     5.8+  (:export
     5.9+   #:libevdev-new
    5.10+   #:libevdev-new-from-fd
    5.11+   #:libevdev-free
    5.12+   #:libevdev-set-fd))
    5.13 
    5.14 (in-package :evdev)
    5.15 (define-alien-loader "evdev" t "/usr/lib/")
     6.1--- a/lisp/ffi/evdev/tests.lisp	Sun Sep 29 00:31:24 2024 -0400
     6.2+++ b/lisp/ffi/evdev/tests.lisp	Sun Sep 29 22:44:52 2024 -0400
     6.3@@ -25,4 +25,10 @@
     6.4 
     6.5 libevdev_free(dev);
     6.6 |#
     6.7-(deftest basic ())
     6.8+(deftest basic ()
     6.9+  (with-open-file (file "/dev/input/event4")
    6.10+    (let ((dev (libevdev-new))
    6.11+          (fd (sb-sys:fd-stream-fd file)))
    6.12+      (is (typep dev '(alien (* evdev::libevdev))))
    6.13+      (is (zerop (libevdev-set-fd dev fd)))
    6.14+      (is (null (libevdev-free dev))))))
     7.1--- a/lisp/ffi/rustls/macs.lisp	Sun Sep 29 00:31:24 2024 -0400
     7.2+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3@@ -1,6 +0,0 @@
     7.4-;;; rustls/macs.lisp --- Rustls FFI Macros
     7.5-
     7.6-;;
     7.7-
     7.8-;;; Code:
     7.9-(in-package :rustls)
     8.1--- a/lisp/ffi/rustls/rustls.asd	Sun Sep 29 00:31:24 2024 -0400
     8.2+++ b/lisp/ffi/rustls/rustls.asd	Sun Sep 29 22:44:52 2024 -0400
     8.3@@ -10,8 +10,8 @@
     8.4 (defsystem :rustls
     8.5   :depends-on (:std)
     8.6   :components ((:file "pkg")
     8.7-               (:file "macs")
     8.8-               (:file "types"))
     8.9+               (:file "types")
    8.10+               (:file "rustls"))
    8.11   :in-order-to ((test-op (test-op "rustls/tests"))))
    8.12 
    8.13 (defsystem :rustls/tests
     9.1--- a/lisp/ffi/rustls/rustls.lisp	Sun Sep 29 00:31:24 2024 -0400
     9.2+++ b/lisp/ffi/rustls/rustls.lisp	Sun Sep 29 22:44:52 2024 -0400
     9.3@@ -33,9 +33,9 @@
     9.4   (accepted (* rustls-accepted))
     9.5   (i size-t))
     9.6 
     9.7-(define-alien-routine rustls-accepted-alpn rustls-slice-bytes
     9.8-  (accepted (* rustls-accepted))
     9.9-  (i size-t))
    9.10+;; (define-alien-routine rustls-accepted-alpn rustls-slice-bytes
    9.11+;;   (accepted (* rustls-accepted))
    9.12+;;   (i size-t))
    9.13 
    9.14 (define-alien-routine rustls-accepted-into-connection rustls-result
    9.15   (accepted (* rustls-accepted))
    9.16@@ -232,7 +232,7 @@
    9.17   (count size-t)
    9.18   (out-n (* size-t)))
    9.19 
    9.20-(define-alien-routine rustl-connection-free void (* rustls-connection))
    9.21+(define-alien-routine rustl-connection-free void (conn (* rustls-connection)))
    9.22 
    9.23 (define-alien-routine rustls-error void (result rustls-result) (len size-t) (out-n (* size-t)))
    9.24 
    9.25@@ -243,9 +243,9 @@
    9.26 (define-alien-routine rustls-slice-slice-bytes-len size-t
    9.27   (input (* rustls-slice-slice-bytes)))
    9.28 
    9.29-(define-alien-routine rustls-slice-slice-bytes-get rustls-slice-bytes
    9.30-  (input (* rustls-slice-slice-bytes))
    9.31-  (n size-t))
    9.32+;; (define-alien-routine rustls-slice-slice-bytes-get rustls-slice-bytes
    9.33+;;   (input (* rustls-slice-slice-bytes))
    9.34+;;   (n size-t))
    9.35 
    9.36 (define-alien-routine rustls-slice-str-len size-t
    9.37   (input (* rustls-slice-str)))
    9.38@@ -259,10 +259,31 @@
    9.39 
    9.40 (define-alien-routine rustls-server-config-builder-free void (config (* rustls-server-config-builder)))
    9.41 
    9.42-(define-alien-routine rustls-server-config-builder-build (* rustls-server-config) (* rustls-server-config-builder))
    9.43+(define-alien-routine rustls-server-config-builder-build (* rustls-server-config) (builder (* rustls-server-config-builder)))
    9.44 
    9.45 (define-alien-routine rustls-server-config-free void (config (* rustls-server-config)))
    9.46 
    9.47 (define-alien-routine rustls-server-connection-new rustls-result
    9.48   (config (* rustls-server-config))
    9.49   (conn-out (* (* rustls-connection))))
    9.50+
    9.51+(define-alien-routine rustls-server-connection-get-server-name rustls-result
    9.52+  (conn (* rustls-connection))
    9.53+  (buf (* unsigned-char))
    9.54+  (count size-t)
    9.55+  (out-n (* size-t)))
    9.56+
    9.57+(define-alien-routine rustls-server-config-builder-set-hello-callback rustls-result
    9.58+  (builder (* rustls-server-config-builder))
    9.59+  (callback rustls-client-hello-callback))
    9.60+
    9.61+(define-alien-routine rustls-client-hello-select-certified-key rustls-result
    9.62+  (hello (* rustls-client-hello))
    9.63+  (certified-keys (* (* rustls-certified-key)))
    9.64+  (certified-keys-len size-t)
    9.65+  (out-key (* (* rustls-certified-key))))
    9.66+
    9.67+(define-alien-routine rustls-server-config-builder-set-persistence rustls-result
    9.68+  (builder (* rustls-server-config-builder))
    9.69+  (get-cb rustls-session-store-get-callback)
    9.70+  (put-cb rustls-session-store-put-callback))
    10.1--- a/lisp/ffi/rustls/tests.lisp	Sun Sep 29 00:31:24 2024 -0400
    10.2+++ b/lisp/ffi/rustls/tests.lisp	Sun Sep 29 22:44:52 2024 -0400
    10.3@@ -11,5 +11,7 @@
    10.4 
    10.5 (load-rustls)
    10.6 
    10.7-(deftest rustls ())
    10.8+(deftest sanity ()
    10.9+  (is (stringp (rustls::rustls-version))))
   10.10 
   10.11+(deftest basic ())
    11.1--- a/lisp/ffi/rustls/types.lisp	Sun Sep 29 00:31:24 2024 -0400
    11.2+++ b/lisp/ffi/rustls/types.lisp	Sun Sep 29 22:44:52 2024 -0400
    11.3@@ -5,126 +5,124 @@
    11.4 ;;; Code:
    11.5 (in-package :rustls)
    11.6 
    11.7-(define-alien-type rustls-result unsigned-int)
    11.8+(define-alien-enum (rustls-result unsigned-int)
    11.9+                   :ok 7000
   11.10+                   :io 7001
   11.11+                   :null-parameter 7002
   11.12+                   :invalid-dns-name-error 7003
   11.13+                   :panic 7004
   11.14+                   :certificate-parse-error 7005
   11.15+                   :private-key-parse-error 7006
   11.16+                   :insufficient-size 7007
   11.17+                   :not-found 7008
   11.18+                   :invalid-parameter 7009
   11.19+                   :unexpected-eof 7010
   11.20+                   :plaintext-empty 7011
   11.21+                   :acceptor-not-ready 7012
   11.22+                   :already-used 7013
   11.23+                   :certificate-revocation-list-parse-error 7014
   11.24+                   :no-certificates-presented 7101
   11.25+                   :decrypt-error 7102
   11.26+                   :failed-to-get-current-time 7103
   11.27+                   :failed-to-get-random-bytes 7113
   11.28+                   :handshake-not-complete 7104
   11.29+                   :peer-sent-oversized-record 7105
   11.30+                   :no-application-protocol 7106
   11.31+                   :bad-max-fragment-size 7114
   11.32+                   :unsupported-name-type 7115
   11.33+                   :encrypt-error 7116
   11.34+                   :cert-encoding-bad 7121
   11.35+                   :cert-expired 7122
   11.36+                   :cert-not-yet-valid 7123
   11.37+                   :cert-revoked 7124
   11.38+                   :cert-unhandled-critical-extension 7125
   11.39+                   :cert-unknown-issuer 7126
   11.40+                   :cert-bad-signature 7127
   11.41+                   :cert-not-valid-for-name 7128
   11.42+                   :cert-invalid-purpose 7129
   11.43+                   :cert-application-verification-failure 7130
   11.44+                   :cert-other-error 7131
   11.45+                   :message-handshake-payload-too-large 7133
   11.46+                   :message-invalid-ccs 7134
   11.47+                   :message-invalid-content-type 7135
   11.48+                   :message-invalid-cert-status-type 7136
   11.49+                   :message-invalid-cert-request 7137
   11.50+                   :message-invalid-dh-params 7138
   11.51+                   :message-invalid-empty-payload 7139
   11.52+                   :message-invalid-key-update 7140
   11.53+                   :message-invalid-server-name 7141
   11.54+                   :message-too-large 7142
   11.55+                   :message-too-short 7143
   11.56+                   :message-missing-data 7144
   11.57+                   :message-missing-key-exchange 7145
   11.58+                   :message-no-signature-schemes 7146
   11.59+                   :message-trailing-data 7147
   11.60+                   :message-unexpected-message 7148
   11.61+                   :message-unknown-protocol-version 7149
   11.62+                   :message-unsupported-compression 7150
   11.63+                   :message-unsupported-curve-type 7151
   11.64+                   :message-unsupported-key-exchange-algorithm 7152
   11.65+                   :message-invalid-other 7153
   11.66+                   :peer-incompatible-error 7107
   11.67+                   :peer-misbehaved-error 7108
   11.68+                   :inappropriate-message 7109
   11.69+                   :inappropriate-handshake-message 7110
   11.70+                   :general 7112
   11.71+                   :alert-close-notify 7200
   11.72+                   :alert-unexpected-message 7201
   11.73+                   :alert-bad-record-mac 7202
   11.74+                   :alert-decryption-failed 7203
   11.75+                   :alert-record-overflow 7204
   11.76+                   :alert-decompression-failure 7205
   11.77+                   :alert-handshake-failure 7206
   11.78+                   :alert-no-certificate 7207
   11.79+                   :alert-bad-certificate 7208
   11.80+                   :alert-unsupported-certificate 7209
   11.81+                   :alert-certificate-revoked 7210
   11.82+                   :alert-certificate-expired 7211
   11.83+                   :alert-certificate-unknown 7212
   11.84+                   :alert-illegal-parameter 7213
   11.85+                   :alert-unknown-ca 7214
   11.86+                   :alert-access-denied 7215
   11.87+                   :alert-decode-error 7216
   11.88+                   :alert-decrypt-error 7217
   11.89+                   :alert-export-restriction 7218
   11.90+                   :alert-protocol-version 7219
   11.91+                   :alert-insufficient-security 7220
   11.92+                   :alert-internal-error 7221
   11.93+                   :alert-inappropriate-fallback 7222
   11.94+                   :alert-user-canceled 7223
   11.95+                   :alert-no-renegotiation 7224
   11.96+                   :alert-missing-extension 7225
   11.97+                   :alert-unsupported-extension 7226
   11.98+                   :alert-certificate-unobtainable 7227
   11.99+                   :alert-unrecognised-name 7228
  11.100+                   :alert-bad-certificate-status-response 7229
  11.101+                   :alert-bad-certificate-hash-value 7230
  11.102+                   :alert-unknown-psk-identity 7231
  11.103+                   :alert-certificate-required 7232
  11.104+                   :alert-no-application-protocol 7233
  11.105+                   :alert-unknown 7234
  11.106+                   :cert-revocation-list-bad-signature 7400
  11.107+                   :cert-revocation-list-invalid-crl-number 7401
  11.108+                   :cert-revocation-list-invalid-revoked-cert-serial-number 7402
  11.109+                   :cert-revocation-list-issuer-invalid-for-crl 7403
  11.110+                   :cert-revocation-list-other-error 7404
  11.111+                   :cert-revocation-list-parse-error 7405
  11.112+                   :cert-revocation-list-unsupported-crl-version 7406
  11.113+                   :cert-revocation-list-unsupported-critical-extension 7407
  11.114+                   :cert-revocation-list-unsupported-delta-crl 7408
  11.115+                   :cert-revocation-list-unsupported-indirect-crl 7409
  11.116+                   :cert-revocation-list-unsupported-revocation-reason 7410
  11.117+                   :client-cert-verifier-builder-no-root-anchors 7500)
  11.118 
  11.119-(defconstant +rustls-result-ok+ 7000)
  11.120-(defconstant +rustls-result-io+ 7001)
  11.121-(defconstant +rustls-result-null-parameter+ 7002)
  11.122-(defconstant +rustls-result-invalid-dns-name-error+ 7003)
  11.123-(defconstant +rustls-result-panic+ 7004)
  11.124-(defconstant +rustls-result-certificate-parse-error+ 7005)
  11.125-(defconstant +rustls-result-private-key-parse-error+ 7006)
  11.126-(defconstant +rustls-result-insufficient-size+ 7007)
  11.127-(defconstant +rustls-result-not-found+ 7008)
  11.128-(defconstant +rustls-result-invalid-parameter+ 7009)
  11.129-(defconstant +rustls-result-unexpected-eof+ 7010)
  11.130-(defconstant +rustls-result-plaintext-empty+ 7011)
  11.131-(defconstant +rustls-result-acceptor-not-ready+ 7012)
  11.132-(defconstant +rustls-result-already-used+ 7013)
  11.133-(defconstant +rustls-result-certificate-revocation-list-parse-error+ 7014)
  11.134-(defconstant +rustls-result-no-certificates-presented+ 7101)
  11.135-(defconstant +rustls-result-decrypt-error+ 7102)
  11.136-(defconstant +rustls-result-failed-to-get-current-time+ 7103)
  11.137-(defconstant +rustls-result-failed-to-get-random-bytes+ 7113)
  11.138-(defconstant +rustls-result-handshake-not-complete+ 7104)
  11.139-(defconstant +rustls-result-peer-sent-oversized-record+ 7105)
  11.140-(defconstant +rustls-result-no-application-protocol+ 7106)
  11.141-(defconstant +rustls-result-bad-max-fragment-size+ 7114)
  11.142-(defconstant +rustls-result-unsupported-name-type+ 7115)
  11.143-(defconstant +rustls-result-encrypt-error+ 7116)
  11.144-(defconstant +rustls-result-cert-encoding-bad+ 7121)
  11.145-(defconstant +rustls-result-cert-expired+ 7122)
  11.146-(defconstant +rustls-result-cert-not-yet-valid+ 7123)
  11.147-(defconstant +rustls-result-cert-revoked+ 7124)
  11.148-(defconstant +rustls-result-cert-unhandled-critical-extension+ 7125)
  11.149-(defconstant +rustls-result-cert-unknown-issuer+ 7126)
  11.150-(defconstant +rustls-result-cert-bad-signature+ 7127)
  11.151-(defconstant +rustls-result-cert-not-valid-for-name+ 7128)
  11.152-(defconstant +rustls-result-cert-invalid-purpose+ 7129)
  11.153-(defconstant +rustls-result-cert-application-verification-failure+ 7130)
  11.154-(defconstant +rustls-result-cert-other-error+ 7131)
  11.155-(defconstant +rustls-result-message-handshake-payload-too-large+ 7133)
  11.156-(defconstant +rustls-result-message-invalid-ccs+ 7134)
  11.157-(defconstant +rustls-result-message-invalid-content-type+ 7135)
  11.158-(defconstant +rustls-result-message-invalid-cert-status-type+ 7136)
  11.159-(defconstant +rustls-result-message-invalid-cert-request+ 7137)
  11.160-(defconstant +rustls-result-message-invalid-dh-params+ 7138)
  11.161-(defconstant +rustls-result-message-invalid-empty-payload+ 7139)
  11.162-(defconstant +rustls-result-message-invalid-key-update+ 7140)
  11.163-(defconstant +rustls-result-message-invalid-server-name+ 7141)
  11.164-(defconstant +rustls-result-message-too-large+ 7142)
  11.165-(defconstant +rustls-result-message-too-short+ 7143)
  11.166-(defconstant +rustls-result-message-missing-data+ 7144)
  11.167-(defconstant +rustls-result-message-missing-key-exchange+ 7145)
  11.168-(defconstant +rustls-result-message-no-signature-schemes+ 7146)
  11.169-(defconstant +rustls-result-message-trailing-data+ 7147)
  11.170-(defconstant +rustls-result-message-unexpected-message+ 7148)
  11.171-(defconstant +rustls-result-message-unknown-protocol-version+ 7149)
  11.172-(defconstant +rustls-result-message-unsupported-compression+ 7150)
  11.173-(defconstant +rustls-result-message-unsupported-curve-type+ 7151)
  11.174-(defconstant +rustls-result-message-unsupported-key-exchange-algorithm+ 7152)
  11.175-(defconstant +rustls-result-message-invalid-other+ 7153)
  11.176-(defconstant +rustls-result-peer-incompatible-error+ 7107)
  11.177-(defconstant +rustls-result-peer-misbehaved-error+ 7108)
  11.178-(defconstant +rustls-result-inappropriate-message+ 7109)
  11.179-(defconstant +rustls-result-inappropriate-handshake-message+ 7110)
  11.180-(defconstant +rustls-result-general+ 7112)
  11.181-(defconstant +rustls-result-alert-close-notify+ 7200)
  11.182-(defconstant +rustls-result-alert-unexpected-message+ 7201)
  11.183-(defconstant +rustls-result-alert-bad-record-mac+ 7202)
  11.184-(defconstant +rustls-result-alert-decryption-failed+ 7203)
  11.185-(defconstant +rustls-result-alert-record-overflow+ 7204)
  11.186-(defconstant +rustls-result-alert-decompression-failure+ 7205)
  11.187-(defconstant +rustls-result-alert-handshake-failure+ 7206)
  11.188-(defconstant +rustls-result-alert-no-certificate+ 7207)
  11.189-(defconstant +rustls-result-alert-bad-certificate+ 7208)
  11.190-(defconstant +rustls-result-alert-unsupported-certificate+ 7209)
  11.191-(defconstant +rustls-result-alert-certificate-revoked+ 7210)
  11.192-(defconstant +rustls-result-alert-certificate-expired+ 7211)
  11.193-(defconstant +rustls-result-alert-certificate-unknown+ 7212)
  11.194-(defconstant +rustls-result-alert-illegal-parameter+ 7213)
  11.195-(defconstant +rustls-result-alert-unknown-ca+ 7214)
  11.196-(defconstant +rustls-result-alert-access-denied+ 7215)
  11.197-(defconstant +rustls-result-alert-decode-error+ 7216)
  11.198-(defconstant +rustls-result-alert-decrypt-error+ 7217)
  11.199-(defconstant +rustls-result-alert-export-restriction+ 7218)
  11.200-(defconstant +rustls-result-alert-protocol-version+ 7219)
  11.201-(defconstant +rustls-result-alert-insufficient-security+ 7220)
  11.202-(defconstant +rustls-result-alert-internal-error+ 7221)
  11.203-(defconstant +rustls-result-alert-inappropriate-fallback+ 7222)
  11.204-(defconstant +rustls-result-alert-user-canceled+ 7223)
  11.205-(defconstant +rustls-result-alert-no-renegotiation+ 7224)
  11.206-(defconstant +rustls-result-alert-missing-extension+ 7225)
  11.207-(defconstant +rustls-result-alert-unsupported-extension+ 7226)
  11.208-(defconstant +rustls-result-alert-certificate-unobtainable+ 7227)
  11.209-(defconstant +rustls-result-alert-unrecognised-name+ 7228)
  11.210-(defconstant +rustls-result-alert-bad-certificate-status-response+ 7229)
  11.211-(defconstant +rustls-result-alert-bad-certificate-hash-value+ 7230)
  11.212-(defconstant +rustls-result-alert-unknown-psk-identity+ 7231)
  11.213-(defconstant +rustls-result-alert-certificate-required+ 7232)
  11.214-(defconstant +rustls-result-alert-no-application-protocol+ 7233)
  11.215-(defconstant +rustls-result-alert-unknown+ 7234)
  11.216-(defconstant +rustls-result-cert-revocation-list-bad-signature+ 7400)
  11.217-(defconstant +rustls-result-cert-revocation-list-invalid-crl-number+ 7401)
  11.218-(defconstant +rustls-result-cert-revocation-list-invalid-revoked-cert-serial-number+ 7402)
  11.219-(defconstant +rustls-result-cert-revocation-list-issuer-invalid-for-crl+ 7403)
  11.220-(defconstant +rustls-result-cert-revocation-list-other-error+ 7404)
  11.221-(defconstant +rustls-result-cert-revocation-list-parse-error+ 7405)
  11.222-(defconstant +rustls-result-cert-revocation-list-unsupported-crl-version+ 7406)
  11.223-(defconstant +rustls-result-cert-revocation-list-unsupported-critical-extension+ 7407)
  11.224-(defconstant +rustls-result-cert-revocation-list-unsupported-delta-crl+ 7408)
  11.225-(defconstant +rustls-result-cert-revocation-list-unsupported-indirect-crl+ 7409)
  11.226-(defconstant +rustls-result-cert-revocation-list-unsupported-revocation-reason+ 7410)
  11.227-(defconstant +rustls-result-client-cert-verifier-builder-no-root-anchors+ 7500)
  11.228-
  11.229-(define-alien-type rustls-tls-version int)
  11.230-
  11.231-(defconstant +rustls-tls-version-sslv2+ 512)
  11.232-(defconstant +rustls-tls-version-sslv3+ 768)
  11.233-(defconstant +rustls-tls-version-tlsv1-0+ 769)
  11.234-(defconstant +rustls-tls-version-tlsv1-1+ 770)
  11.235-(defconstant +rustls-tls-version-tlsv1-2+ 771)
  11.236-(defconstant +rustls-tls-version-tlsv1-3+ 772)
  11.237+(define-alien-enum (rustls-tls-version int)
  11.238+                   :sslv2 512
  11.239+                   :sslv3 768
  11.240+                   :tlsv1-0 769
  11.241+                   :tlsv1-1 770
  11.242+                   :tlsv1-2 771
  11.243+                   :tlsv1-3 772)
  11.244 
  11.245 (define-alien-type rustls-accepted (struct rustls-accepted))
  11.246 
  11.247@@ -156,7 +154,10 @@
  11.248 
  11.249 (define-alien-type rustls-server-config-builder (struct rustls-server-config-builder))
  11.250 
  11.251-(define-alien-type rustls-slice-slice-bytes (struct rustls-slice-slice-bytes))
  11.252+(define-alien-type rustls-slice-slice-bytes 
  11.253+    (struct rustls-slice-slice-bytes
  11.254+            (data (* unsigned-char))
  11.255+            (len size-t)))
  11.256 
  11.257 (define-alien-type rustls-slice-str (struct rustls-slice-str))
  11.258 
  11.259@@ -166,28 +167,104 @@
  11.260 
  11.261 (define-alien-type rustls-web-pki-server-cert-verifier-builder (struct rustls-web-pki-server-cert-verifier-builder))
  11.262 
  11.263-(define-alien-type rustls-str (struct rustls-str))
  11.264+(define-alien-type rustls-str 
  11.265+    (struct rustls-str
  11.266+            (data (* char))
  11.267+            (len size-t)))
  11.268 
  11.269 (define-alien-type rustls-io-result int)
  11.270 
  11.271-(define-alien-type rustls-slice-bytes (struct rustls-slice-bytes))
  11.272+(define-alien-type rustls-slice-bytes 
  11.273+    (struct rustls-slice-bytes
  11.274+            (data (* unsigned-char))
  11.275+            (len size-t)))
  11.276 
  11.277 (define-alien-type rustls-verify-server-cert-user-data (* t))
  11.278 
  11.279-(define-alien-type rustls-verify-server-cert-params (struct rustls-verify-server-cert-params))
  11.280+(define-alien-type rustls-verify-server-cert-params 
  11.281+    (struct rustls-verify-server-cert-params
  11.282+            (end-entity-cert-der rustls-slice-bytes)
  11.283+            (intermediate-certs-der (* rustls-slice-slice-bytes))
  11.284+            (server-name rustls-str)
  11.285+            (ocsp-response rustls-slice-bytes)))
  11.286+
  11.287+(define-alien-type rustls-verify-server-cert-callback
  11.288+  (function unsigned-int
  11.289+            rustls-verify-server-cert-user-data
  11.290+            (* rustls-verify-server-cert-params)))
  11.291 
  11.292 (define-alien-type rustls-log-level size-t)
  11.293 
  11.294-(define-alien-type rustls-log-params (struct rustls-log-params))
  11.295+(define-alien-type rustls-log-params 
  11.296+    (struct rustls-log-params
  11.297+            (level rustls-log-level)
  11.298+            (message rustls-str)))
  11.299+
  11.300+(define-alien-type rustls-log-callback
  11.301+    (function void
  11.302+              (* t)
  11.303+              (* rustls-log-params)))
  11.304 
  11.305 (define-alien-type rustls-client-hello-userdata (* t))
  11.306 
  11.307-(define-alien-type rustls-slice-u16 (struct rustls-slice-u16))
  11.308+(define-alien-type rustls-slice-u16 
  11.309+    (struct rustls-slice-u16
  11.310+            (data (* unsigned-short))
  11.311+            (len size-t)))
  11.312 
  11.313-(define-alien-type rustls-client-hello (struct rustls-client-hello))
  11.314+(define-alien-type rustls-client-hello 
  11.315+    (struct rustls-client-hello
  11.316+            (server-name rustls-str)
  11.317+            (signature-schemes rustls-slice-u16)
  11.318+            (alpn (* rustls-slice-slice-bytes))))
  11.319 
  11.320 (define-alien-type rustls-certified-key (struct rustls-certified-key))
  11.321 
  11.322+(define-alien-type rustls-client-hello-callback 
  11.323+  (function (* rustls-certified-key)
  11.324+            rustls-client-hello-userdata
  11.325+            (* rustls-client-hello)))
  11.326+
  11.327 (define-alien-type rustls-session-store-userdata (* t))
  11.328 
  11.329+(define-alien-type rustls-session-store-get-callback
  11.330+    (function unsigned-int
  11.331+              rustls-session-store-userdata
  11.332+              (* rustls-slice-bytes)
  11.333+              int
  11.334+              (* unsigned-char)
  11.335+              size-t
  11.336+              (* size-t)))
  11.337+
  11.338+(define-alien-type rustls-session-store-put-callback
  11.339+    (function unsigned-int
  11.340+              rustls-session-store-userdata
  11.341+              (* rustls-slice-bytes)
  11.342+              (* rustls-slice-bytes)))
  11.343+
  11.344 (define-alien-type rustls-supported-ciphersuite (struct rustls-supported-ciphersuite))
  11.345+
  11.346+(define-alien-type rustls-web-pki-client-vert-verifier-builder (struct rustls-web-pki-client-vert-verifier-builder))
  11.347+
  11.348+(define-alien-type rustls-web-pki-server-cert-verifier-builder (struct rustls-web-pki-server-cert-verifier-builder))
  11.349+
  11.350+(define-alien-type rustls-read-callback
  11.351+  (function rustls-io-result
  11.352+            (* t)
  11.353+            (* unsigned-char)
  11.354+            size-t
  11.355+            (* size-t)))
  11.356+
  11.357+(define-alien-type rustls-write-callback
  11.358+  (function rustls-io-result
  11.359+            (* t)
  11.360+            (* unsigned-char)
  11.361+            size-t
  11.362+            (* size-t)))
  11.363+
  11.364+(define-alien-type rustls-write-vectored-callback
  11.365+  (function rustls-io-result
  11.366+            (* t)
  11.367+            (* rustls-iovec)
  11.368+            size-t
  11.369+            (* size-t)))
    12.1--- a/lisp/lib/io/kbd.lisp	Sun Sep 29 00:31:24 2024 -0400
    12.2+++ b/lisp/lib/io/kbd.lisp	Sun Sep 29 22:44:52 2024 -0400
    12.3@@ -8,6 +8,10 @@
    12.4 
    12.5 ;; - https://www.kernel.org/doc/Documentation/input/event-codes.txt
    12.6 
    12.7+;; - https://github.com/xkbcommon/libxkbcommon/blob/master/tools/interactive-evdev.c
    12.8+
    12.9+;; - https://gitlab.freedesktop.org/libevdev/libevdev/-/tree/master/tools
   12.10+
   12.11 ;;; Code:
   12.12 (in-package :io/kbd)
   12.13 (load-xkbcommon)
   12.14@@ -18,10 +22,37 @@
   12.15 
   12.16 (defconstant +evdev-offset+ 8)
   12.17 
   12.18-(defun evdev-bit-is-set (array bit))
   12.19+(defconstant +long-bit+ (sb-alien:alien-size sb-alien:unsigned-long))
   12.20+
   12.21+(defun evdev-bit-p (array bit)
   12.22+  "Array elements should be unsigned-long."
   12.23+  (let ((idx (/ bit +long-bit+)))
   12.24+    ;; the literal 1 here is 1LL in C - there is potential to overflow a
   12.25+    ;; singled long.
   12.26+    (logand (aref array idx) (ash 1 (mod bit +long-bit+)))))
   12.27 
   12.28-(defun keyboard-device-p (path))
   12.29-  ;; (sb-posix:ioctl (fd path)
   12.30+(defun new-device-from-path (path)
   12.31+  (with-fd (fd path :flags sb-posix:o-rdonly :close nil)
   12.32+    (sb-alien:with-alien ((dev (* evdev::libevdev)))
   12.33+      (let ((ret (evdev:libevdev-new-from-fd fd (sb-alien:addr dev))))
   12.34+        (if (minusp ret)
   12.35+            (sb-unix::strerror (abs ret))
   12.36+            dev)))))
   12.37+
   12.38+;; evdev::+ev-cnt+ evdev::+key-cnt+
   12.39+(defun keyboard-device-p (path)
   12.40+  (with-open-file (st path :element-type 'octet)
   12.41+    (let ((evbits (make-array evdev::+ev-cnt+))
   12.42+          (keybits (make-array evdev::+key-cnt+)))
   12.43+      ;; (sb-posix:ioctl (fd path)
   12.44+      (read-sequence evbits st)
   12.45+      (read-sequence keybits st)
   12.46+      ;; (cons evbits keybits)
   12.47+      (loop for i from evdev::+key-reserved+ upto evdev::+key-min-interesting+
   12.48+            if (not (evdev-bit-p keybits i))
   12.49+            do (break)
   12.50+            else return t))))
   12.51+      
   12.52 (defun make-keyboard-from-dev (dev keymap compose-table))
   12.53 
   12.54 (defun get-keyboards (keymap compose-table &optional (dir "/dev/input"))
   12.55@@ -34,4 +65,23 @@
   12.56 ;;   (let ((fd (sb-sys:fd-stream-fd file))
   12.57 ;;         (evbits))))
   12.58 
   12.59-                         
   12.60+;; (xkb::xkb-consumed-mode :xkb)
   12.61+
   12.62+;; (let ((dev (new-device-from-path "/dev/input/event4")))
   12.63+;;   (unless (evdev::libevdev-has-event-code dev evdev::+ev-key+ evdev::+key-scrollup+)
   12.64+;;     (println "probably not a mouse:"))
   12.65+;;   (println
   12.66+;;    (list 
   12.67+;;     (evdev::libevdev-get-name dev) 
   12.68+;;     (evdev::libevdev-get-id-bustype dev) 
   12.69+;;     (evdev::libevdev-get-id-vendor dev)))
   12.70+;;   (with-alien ((ev evdev/input:input-event))
   12.71+;;     (when (evdev::libevdev-has-event-pending dev)
   12.72+;;       (println "has event pending"))
   12.73+;;     (assert (zerop (evdev::libevdev-next-event dev (evdev::libevdev-read-flag :normal) (addr ev))))
   12.74+;;     (with-alien-slots ((* time) type (code evdev/input::code) (value evdev/input::value)) ev
   12.75+;;       (println (obj/time:unix-to-timestamp (sb-posix::alien-timeval-sec time)))
   12.76+;;       (println (evdev::libevdev-event-type-get-name type))
   12.77+;;       (println (evdev::libevdev-event-code-get-name type code))
   12.78+;;       (println (evdev::libevdev-event-value-get-name type code value)))))
   12.79+
    13.1--- a/lisp/std/fmt.lisp	Sun Sep 29 00:31:24 2024 -0400
    13.2+++ b/lisp/std/fmt.lisp	Sun Sep 29 22:44:52 2024 -0400
    13.3@@ -23,17 +23,17 @@
    13.4   (format t ";;        *print-readably* = ~a~%" *print-readably*)
    13.5   (format t ";;    *print-right-margin* = ~a~%" *print-right-margin*))
    13.6 
    13.7-(defun fmt-row (data)
    13.8-  (format nil "| ~{~A~^ | ~} |~%" data))
    13.9+(defun fmt-row (data &optional stream)
   13.10+  (format stream "| ~{~A~^ | ~} |~%" data))
   13.11 
   13.12-(defun format-sxhash (code)
   13.13+(defun format-sxhash (code &optional stream)
   13.14   "Turn the fixnum value CODE into a human-friendly string. CODE should
   13.15 be produced by `sxhash'."
   13.16   (let (r)
   13.17     (dotimes (i 8 r)
   13.18       (push (ldb (byte 8 (* i 8)) code) r))
   13.19     (format
   13.20-     nil
   13.21+     stream
   13.22      "~{~A~^-~}"
   13.23      (mapcar
   13.24       (lambda (x) (format nil "~{~(~2,'0x~)~}" x))
    14.1--- a/lisp/std/os.lisp	Sun Sep 29 00:31:24 2024 -0400
    14.2+++ b/lisp/std/os.lisp	Sun Sep 29 22:44:52 2024 -0400
    14.3@@ -35,3 +35,8 @@
    14.4          (sb-posix:umask ,umask)))))
    14.5 
    14.6 ;; (with-umask #o22 nil)
    14.7+
    14.8+(defmacro with-fd ((fvar fname &key (flags #.sb-posix:o-rdonly) (close t)) &body body)
    14.9+  `(let* ((,fvar (sb-posix:open ,fname ,flags)))
   14.10+     (unwind-protect (progn ,@body)
   14.11+       ,@(when close `(sb-posix:close ,fvar)))))
    15.1--- a/lisp/std/pkg.lisp	Sun Sep 29 00:31:24 2024 -0400
    15.2+++ b/lisp/std/pkg.lisp	Sun Sep 29 22:44:52 2024 -0400
    15.3@@ -402,7 +402,8 @@
    15.4   (:export
    15.5    :list-all-users
    15.6    :list-all-groups
    15.7-   :with-umask))
    15.8+   :with-umask
    15.9+   :with-fd))
   15.10 
   15.11 (defpkg :std/file
   15.12   (:use :cl)