9698 keyboard_layout() ICT fails on some Sparc machines due to the failure of KIOCLAYOUT ioctl(2)
authorKeith Mitchell <keith.mitchell@sun.com>
Tue, 09 Feb 2010 14:50:50 -0800
changeset 728 4b1344a9349c
parent 727 3d76804f6900
child 730 cde2d590ce7f
9698 keyboard_layout() ICT fails on some Sparc machines due to the failure of KIOCLAYOUT ioctl(2)
usr/src/lib/libict_pymod/ict.py
--- a/usr/src/lib/libict_pymod/ict.py	Tue Feb 09 10:49:14 2010 -0800
+++ b/usr/src/lib/libict_pymod/ict.py	Tue Feb 09 14:50:50 2010 -0800
@@ -94,6 +94,7 @@
         Cleanup unnecessary symbolic links and files from the alternate root.
         (clobber files) TM
 '''
+import errno
 import os
 import os.path
 import sys
@@ -910,7 +911,18 @@
             return ICT_OPEN_KEYBOARD_DEVICE_FAILED
 
         k = array.array('i', [0])
-        status = fcntl.ioctl(kbd, kioclayout, k, 1)
+        
+        try:
+            status = fcntl.ioctl(kbd, kioclayout, k, 1)
+        except IOError as err:
+            status = err.errno
+            if status == errno.EINVAL:
+                kbd.close()
+                info_msg("Failed to read keyboard device ioctl; Ignoring")
+                return 0
+        except StandardError:
+            status = 1
+        
         if status != 0:
             kbd.close()
             prerror('fcntl ioctl KIOCLAYOUT_FAILED: status=' + str(status))
@@ -921,9 +933,9 @@
 
         layout = self._get_kbd_layout_name(kbd_layout)
         if layout == '':
-            prerror('keyboard layout name not found')
-            prerror('Failure. Returning: ICT_KBD_LAYOUT_NAME_NOT_FOUND')
-            return ICT_KBD_LAYOUT_NAME_NOT_FOUND
+            info_msg('keyboard layout name not found')
+            info_msg('Not setting keyboard layout file')
+            return 0
 
         kbd_file_name = self.basedir + self.kbd_defaults_file
         try: