3914 mkmenu wastes time scanning an entire partition when the first block will do
authorWilliam Schumann <william.schumann@sun.com>
Wed, 21 Jan 2009 07:53:14 -0700
changeset 416 caa677cf235d
parent 415 968ac60fbd68
child 417 5cb90ebad19d
3914 mkmenu wastes time scanning an entire partition when the first block will do
usr/src/cmd/slim-install/finish/install-finish
usr/src/cmd/slim-install/finish/mkmenu
usr/src/lib/libict_pymod/ict.py
usr/src/lib/libtransfer_pymod/libtransfer.c
--- a/usr/src/cmd/slim-install/finish/install-finish	Tue Jan 20 15:53:16 2009 -0700
+++ b/usr/src/cmd/slim-install/finish/install-finish	Wed Jan 21 07:53:14 2009 -0700
@@ -38,7 +38,7 @@
 import getopt
 import os
 from stat import *
-from osol_install.ict import *
+from ict import *
 import platform
 
 # Test to see if running in an automated install environment
--- a/usr/src/cmd/slim-install/finish/mkmenu	Tue Jan 20 15:53:16 2009 -0700
+++ b/usr/src/cmd/slim-install/finish/mkmenu	Wed Jan 21 07:53:14 2009 -0700
@@ -71,7 +71,7 @@
 	rdev=$2
 	root=$3
 
-	sig=`strings $rdev 2> /dev/null | head -1 | awk '{ print $1 }'`
+	sig=`dd if=${rdev} bs=512 count=1 2>/dev/null |strings 2>/dev/null | head -1 | awk '{ print $1 }'`
 	if [ "$sig" = "NTFS" ] ; then
 		entry $root "Windows"
 	else
--- a/usr/src/lib/libict_pymod/ict.py	Tue Jan 20 15:53:16 2009 -0700
+++ b/usr/src/lib/libict_pymod/ict.py	Wed Jan 21 07:53:14 2009 -0700
@@ -100,6 +100,7 @@
 import re
 import platform
 from pkg.cfgfiles import PasswordFile
+import signal
 
 ICTID = 'ICT'
 (
@@ -206,6 +207,13 @@
 	_dbg_msg('_cmd_out: executing cmd=' + cmd)
 	status = 0
 	dfout = []
+	'''Since Python ignores SIGPIPE, according to Python issue 1652,
+	UNIX scripts in subprocesses will also ignore SIGPIPE.
+	Workaround is to save original signal handler, restore default handler,
+	launch script, restore original signal handler
+	'''
+	orig_sigpipe = signal.getsignal(signal.SIGPIPE) #save SIGPIPE signal handler
+	signal.signal(signal.SIGPIPE, signal.SIG_DFL) #restore default signal handler for SIGPIPE
 	try:
 		fp = os.popen(cmd)
 		if fp == None or fp == -1: return ICT_POPEN_FAILED, []
@@ -218,6 +226,7 @@
 	except:
 		prerror('system error in launching shell cmd (' + cmd + ')')
 		status = 1
+	signal.signal(signal.SIGPIPE, orig_sigpipe) #restore original signal handler for SIGPIPE
 	if status == None: status = 0	
 	if status != 0:
 		write_log(ICTID, 'shell cmd (' + cmd +
@@ -231,6 +240,14 @@
 	'''
 	_dbg_msg('_cmd_status: executing cmd=' + cmd)
 	exitstatus = None
+
+	'''Since Python ignores SIGPIPE, according to Python issue 1652,
+	UNIX scripts in subprocesses will also ignore SIGPIPE.
+	Workaround is to save original signal handler, restore default handler,
+	launch script, restore original signal handler
+	'''
+	orig_sigpipe = signal.getsignal(signal.SIGPIPE) #save SIGPIPE signal handler
+	signal.signal(signal.SIGPIPE, signal.SIG_DFL) #restore default signal handler for SIGPIPE
 	try:
 		fp = os.popen(cmd)
 		if fp == None or fp == -1: return ICT_POPEN_FAILED
@@ -241,6 +258,7 @@
 		prerror(traceback.format_exc())
 		exitstatus = 1
 	if exitstatus == None: exitstatus = 0
+	signal.signal(signal.SIGPIPE, orig_sigpipe) #restore original signal handler for SIGPIPE
 	_dbg_msg('_cmd_status: return exitstatus=' + str(exitstatus))
 	return exitstatus
 
--- a/usr/src/lib/libtransfer_pymod/libtransfer.c	Tue Jan 20 15:53:16 2009 -0700
+++ b/usr/src/lib/libtransfer_pymod/libtransfer.c	Wed Jan 21 07:53:14 2009 -0700
@@ -42,7 +42,7 @@
  * the PYTHONPATH env variable will be set in this library before
  * python is initialized.
  */
-#define	PY_PATH "PYTHONPATH=/usr/lib/python2.4/vendor-packages/osol_install"
+#define	PY_PATH "PYTHONPATH=/tmp:/usr/lib/python2.4/vendor-packages/osol_install"
 
 static PyObject *tmod_logprogress(PyObject *self, PyObject *args);
 static PyObject *tmod_set_callback(PyObject *self, PyObject *args);