Changeset 5559


Ignore:
Timestamp:
Nov 20, 2006, 11:55:56 PM (18 years ago)
Author:
Gary Byers
Message:

INIT-UNIX-SOCKADDR: don't use %COPY-IVECTOR-TO-PTR to copy string to
foreign memory.

Basic file-socket streams.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-1/l1-sockets.lisp

    r5494 r5559  
    357357
    358358
     359(defmethod map-to-basic-stream-class-name ((name (eql 'file-socket-stream)))
     360  'basic-file-socket-stream)
    359361
    360362(defmethod select-stream-class ((class file-socket-stream) in-p out-p char-p)
    361363  (declare (ignore char-p)) ; TODO: is there any real reason to care about this?
    362   (assert (and in-p out-p) () "Non-bidirectional tcp stream?")
     364  (assert (and in-p out-p) () "Non-bidirectional file-socket stream?")
    363365  'fundamental-file-socket-stream)
     366
     367(defmethod select-stream-class ((s (eql 'basic-file-socket-stream)) in-p out-p char-p)
     368  (declare (ignore char-p))
     369  (assert (and in-p out-p) () "Non-bidirectional file-socket stream?")
     370  'basic-file-socket-stream)
    364371
    365372(defclass unconnected-socket (socket)
     
    11241131  (macrolet ((sockaddr_un-path-len ()
    11251132               (/ (ensure-foreign-type-bits
    1126                     (foreign-record-field-type
    1127                      (%find-foreign-record-type-field
    1128                       (parse-foreign-type '(:struct :sockaddr_un)) :sun_path)))
     1133                   (foreign-record-field-type
     1134                    (%find-foreign-record-type-field
     1135                     (parse-foreign-type '(:struct :sockaddr_un)) :sun_path)))
    11291136                  8)))
    11301137    (let* ((name (native-translated-namestring path))
     
    11321139           (pathlen (sockaddr_un-path-len))
    11331140           (copylen (min (1- pathlen) namelen)))
    1134         (setf (pref addr :sockaddr_un.sun_family) #$AF_LOCAL)
    1135         (%copy-ivector-to-ptr name 0
    1136                               (pref addr :sockaddr_un.sun_path) 0
    1137                               copylen))))
     1141      (setf (pref addr :sockaddr_un.sun_family) #$AF_LOCAL)
     1142      (let* ((sun-path (pref addr :sockaddr_un.sun_path)))
     1143        (dotimes (i copylen)
     1144          (setf (%get-unsigned-byte sun-path i)
     1145                (let* ((code (char-code (schar name i))))
     1146                  (if (> code 255)
     1147                    (char-code #\Sub)
     1148                    code))))))))
    11381149
    11391150(defun bind-unix-socket (socketfd path)
Note: See TracChangeset for help on using the changeset viewer.