r2912: rename .cl to .lisp
[uffi.git] / tests / gethostname.lisp
diff --git a/tests/gethostname.lisp b/tests/gethostname.lisp
new file mode 100644 (file)
index 0000000..9098114
--- /dev/null
@@ -0,0 +1,65 @@
+;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:          gethostname.cl
+;;;; Purpose:       UFFI Example file to get hostname of system
+;;;; Programmer:    Kevin M. Rosenberg
+;;;; Date Started:  Feb 2002
+;;;;
+;;;; $Id: gethostname.lisp,v 1.1 2002/09/30 10:02:36 kevin Exp $
+;;;;
+;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
+;;;;
+;;;; UFFI users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
+;;;; *************************************************************************
+
+(in-package :cl-user)
+
+
+;;; This example is inspired by the example on the CL-Cookbook web site
+
+(uffi:def-function ("gethostname" c-gethostname) 
+    ((name (* :unsigned-char))
+     (len :int))
+  :returning :int)
+
+(defun gethostname ()
+  "Returns the hostname"
+  (let* ((name (uffi:allocate-foreign-string 256))
+        (result (c-gethostname name 256)))
+    (unwind-protect
+       (if (zerop result)
+           (uffi:convert-from-foreign-string name)
+         (error "gethostname() failed."))
+      (uffi:free-foreign-object name))))
+
+(defun gethostname2 ()
+  "Returns the hostname"
+  (uffi:with-foreign-object (name '(:array :unsigned-char 256))
+    (if (zerop (c-gethostname (uffi:char-array-to-pointer name) 256))
+       (uffi:convert-from-foreign-string name)
+       (error "gethostname() failed."))))
+
+#+examples-uffi
+(progn
+  (format t "~&Hostname (technique 1): ~A" (gethostname))
+  (format t "~&Hostname (technique 2): ~A" (gethostname2)))
+
+#+test-uffi
+(progn
+  (let ((hostname1 (gethostname))
+       (hostname2 (gethostname2)))
+    
+    (util.test:test (and (stringp hostname1) (stringp hostname2)) t
+                   :fail-info "gethostname not string")
+    (util.test:test (and (not (zerop (length hostname1)))
+                        (not (zerop (length hostname2)))) t
+                        :fail-info "gethostname length 0")
+    (util.test:test (string= hostname1 hostname1) t
+                   :fail-info "gethostname techniques don't match"))
+  )
+
+