Index: /trunk/ccl/level-1/l1-sockets.lisp
===================================================================
--- /trunk/ccl/level-1/l1-sockets.lisp	(revision 4827)
+++ /trunk/ccl/level-1/l1-sockets.lisp	(revision 4828)
@@ -158,5 +158,8 @@
   (require "X8664-LINUX-SYSCALLS")
   #+darwin-target
-  (require "DARWIN-SYSCALLS"))
+  (require "DARWIN-SYSCALLS")
+  #+freebsdx8664-target
+  (require "X8664-FREEBSD-SYSCALLS")
+  )
 
 (define-condition socket-error (simple-stream-error)
@@ -708,9 +711,9 @@
 		      (or (eql res (- #$ENETDOWN))
 			  (eql res (- #+linux-target #$EPROTO
-				      #+darwin-target #$EPROTOTYPE))
+				      #+(or darwin-target freebsd-target) #$EPROTOTYPE))
 			  (eql res (- #$ENOPROTOOPT))
 			  (eql res (- #$EHOSTDOWN))
 			  (eql res (- #+linux-target #$ENONET
-				      #+darwin-target #$ENETDOWN))
+				      #+(or darwin-target freebsd-target) #$ENETDOWN))
 			  (eql res (- #$EHOSTUNREACH))
 			  (eql res (- #$EOPNOTSUPP))
@@ -1030,10 +1033,11 @@
   (with-cstrs ((name string))
     (rlet ((addr :in_addr))
-      (let* ((result (#_inet_aton name addr)))
+      (let* ((result #+freebsd-target (#___inet_aton name addr)
+                     #-freebsd-target (#_inet_aton name addr)))
 	(unless (eql result 0)
 	  (pref addr :in_addr.s_addr))))))
 
 (defun c_socket (domain type protocol)
-  #+(or darwinppc-target linuxx8664-target)
+  #-linuxppc-target
   (syscall syscalls::socket domain type protocol)
   #+linuxppc-target
@@ -1082,7 +1086,7 @@
 
 (defun c_bind (sockfd sockaddr addrlen)
-  #+(or darwinppc-target linuxx8664-target)
-  (progn
-    #+darwinppc-target
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
+  (progn
+    #+(or darwinppc-target freebsd-target)
     (setf (pref sockaddr :sockaddr_in.sin_len) addrlen)
     (syscall syscalls::bind sockfd sockaddr addrlen))
@@ -1103,5 +1107,5 @@
 
 (defun c_connect (sockfd addr len)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::connect sockfd addr len)
   #+linuxppc-target
@@ -1121,5 +1125,5 @@
 
 (defun c_listen (sockfd backlog)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::listen sockfd backlog)
   #+linuxppc-target
@@ -1137,5 +1141,5 @@
 
 (defun c_accept (sockfd addrp addrlenp)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::accept sockfd addrp addrlenp)
   #+linuxppc-target
@@ -1155,5 +1159,5 @@
 
 (defun c_getsockname (sockfd addrp addrlenp)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::getsockname sockfd addrp addrlenp)
   #+linuxppc-target
@@ -1173,5 +1177,5 @@
 
 (defun c_getpeername (sockfd addrp addrlenp)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::getpeername sockfd addrp addrlenp)
   #+linuxppc-target
@@ -1191,5 +1195,5 @@
 
 (defun c_socketpair (domain type protocol socketsptr)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::socketpair domain type protocol socketsptr)
   #+linuxppc-target
@@ -1213,5 +1217,5 @@
 
 (defun c_sendto (sockfd msgptr len flags addrp addrlen)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::sendto sockfd msgptr len flags addrp addrlen)
   #+linuxppc-target
@@ -1237,5 +1241,5 @@
 
 (defun c_recvfrom (sockfd bufptr len flags addrp addrlenp)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::recvfrom sockfd bufptr len flags addrp addrlenp)
   #+linuxppc-target
@@ -1261,5 +1265,5 @@
 
 (defun c_shutdown (sockfd how)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::shutdown sockfd how)
   #+linuxppc-target
@@ -1277,5 +1281,5 @@
 
 (defun c_setsockopt (sockfd level optname optvalp optlen)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::setsockopt sockfd level optname optvalp optlen)
   #+linuxppc-target
@@ -1299,5 +1303,5 @@
 
 (defun c_getsockopt (sockfd level optname optvalp optlenp)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::getsockopt sockfd level optname optvalp optlenp)
   #+linuxppc-target
@@ -1321,5 +1325,5 @@
 
 (defun c_sendmsg (sockfd msghdrp flags)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::sendmsg sockfd msghdrp flags)
   #+linuxppc-target
@@ -1339,5 +1343,5 @@
 
 (defun c_recvmsg (sockfd msghdrp flags)
-  #+(or darwinppc-target linuxx8664-target)
+  #+(or darwinppc-target linuxx8664-target freebsd-target)
   (syscall syscalls::recvmsg sockfd msghdrp flags)
   #+linuxppc-target
Index: /trunk/ccl/level-1/l1-streams.lisp
===================================================================
--- /trunk/ccl/level-1/l1-streams.lisp	(revision 4827)
+++ /trunk/ccl/level-1/l1-streams.lisp	(revision 4828)
@@ -24,5 +24,7 @@
   (require "X8664-LINUX-SYSCALLS")
   #+darwin-target
-  (require "DARWIN-SYSCALLS"))
+  (require "DARWIN-SYSCALLS")
+  #+freebsdx8664-target
+  (require "X8664-FREEBSD-SYSCALLS"))
 
 ;;;
Index: /trunk/ccl/level-1/linux-files.lisp
===================================================================
--- /trunk/ccl/level-1/linux-files.lisp	(revision 4827)
+++ /trunk/ccl/level-1/linux-files.lisp	(revision 4828)
@@ -23,5 +23,8 @@
   (require "X8664-LINUX-SYSCALLS")
   #+darwin-target
-  (require "DARWIN-SYSCALLS"))
+  (require "DARWIN-SYSCALLS")
+  #+(and freebsd-target x8664-target)
+  (require "X8664-FREEBSD-SYSCALLS")
+  )
 
 
@@ -186,4 +189,5 @@
   )
 
+#-freebsd-target
 (defun setenv (key value &optional (overwrite t))
   "Set the value of the environment variable named by name, in the OS
@@ -218,5 +222,5 @@
        #+linux-target
        (pref stat :stat.st_mtim.tv_sec)
-       #+darwinppc-target
+       #-linux-target
        (pref stat :stat.st_mtimespec.tv_sec)
        (pref stat :stat.st_ino)
@@ -231,5 +235,5 @@
      #+linux-target
      (#_ __xstat #$_STAT_VER_LINUX cname stat)
-     #+darwinppc-target
+     #-linux-target
      (syscall syscalls::stat cname stat)
      stat)))
@@ -239,5 +243,5 @@
    #+linux-target
    (#_ __fxstat #$_STAT_VER_LINUX fd stat)
-   #+darwinppc-target
+   #+(or darwinppc-target freebsd-target)
    (syscall syscalls::fstat fd stat)
    stat))
@@ -248,5 +252,5 @@
      #+linux-target
      (#_ __lxstat #$_STAT_VER_LINUX cname stat)
-     #+darwinppc-target
+     #-linux-target
      (syscall syscalls::lstat cname stat)
      stat)))
@@ -288,5 +292,6 @@
   (if (eql 0 result)
     (%get-cstring (%inc-ptr buf (* #+linux-target #$_UTSNAME_LENGTH
-				   #+darwinppc-target #$_SYS_NAMELEN idx)))
+				   #+darwinppc-target #$_SYS_NAMELEN
+                                   #+freebsd-target #$SYS_NMLN idx)))
     "unknown"))
 
@@ -301,4 +306,9 @@
   (%stack-block ((buf (* #$_SYS_NAMELEN 5)))
     (%uts-string (#_uname buf) idx buf)))
+
+#+freebsd-target
+(defun %uname (idx)
+  (%stack-block ((buf (* #$SYS_NMLN 5)))
+    (%uts-string (#___xuname #$SYS_NMLN buf) idx buf)))
 
 (defun fd-dup (fd)
@@ -434,8 +444,14 @@
 by uid. This value comes from the OS user database, not from the $HOME
 environment variable. Returns NIL if there is no user with the ID uid."
-  (with-macptrs ((pw (#_getpwuid userid)))
-    (unless (%null-ptr-p pw)
-      (without-interrupts
-       (%get-cstring (pref pw :passwd.pw_dir))))))
+  (rlet ((pwd :passwd)
+         (result :address))
+    (do* ((buflen 512 (* 2 buflen)))
+         ()
+      (%stack-block ((buf buflen))
+        (let* ((err (#_getpwuid_r userid pwd buf buflen result)))
+          (if (eql 0 err)
+            (return (%get-cstring (pref pwd :passwd.pw_dir)))
+            (unless (eql err #$ERANGE)
+              (return nil))))))))
 
 (defun %delete-file (name)
@@ -1097,3 +1113,15 @@
                               (whitespacep (schar line matchlen)))
                          (incf ncpu)))))))
-             1))))
+             1)
+            #+freebsd-target
+            (%stack-block ((ret (record-length :uint))
+                           (mib (* (record-length :uint))))
+              (setf (%get-unsigned-long mib 0)
+                    #$CTL_HW
+                    (%get-unsigned-long mib (record-length :uint))
+                    #$HW_NCPU)
+              (rlet ((oldsize :uint (record-length :uint)))
+                (if (eql 0 (#_sysctl mib 2 ret oldsize (%null-ptr) 0))
+                  (pref ret :uint)
+                  1)))
+            )))
