diff --git a/Lib/dos-8x3/posixfil.py b/Lib/dos-8x3/posixfil.py
index f0df543..fc5f53f 100755
--- a/Lib/dos-8x3/posixfil.py
+++ b/Lib/dos-8x3/posixfil.py
@@ -196,6 +196,9 @@
             elif sys.platform in ['aix3', 'aix4']:
                 l_type, l_whence, l_start, l_len, l_sysid, l_pid, l_vfs = \
                     struct.unpack('hhlllii', flock)
+	    elif sys.platform == "linux2":
+		l_type, l_whence, l_start, l_len, l_pid, l_sysid = \
+		    struct.unpack('hhllhh', flock)
 	    else:
 		l_type, l_whence, l_start, l_len, l_sysid, l_pid = \
 		    struct.unpack('hhllhh', flock)
diff --git a/Lib/dos-8x3/simpleht.py b/Lib/dos-8x3/simpleht.py
index dd3107a..ac3e384 100755
--- a/Lib/dos-8x3/simpleht.py
+++ b/Lib/dos-8x3/simpleht.py
@@ -10,7 +10,6 @@
 
 
 import os
-import pwd
 import sys
 import time
 import socket
@@ -20,17 +19,6 @@
 import BaseHTTPServer
 
 
-def nobody_uid():
-    """Internal routine to get nobody's uid"""
-    try:
-	nobody = pwd.getpwnam('nobody')[2]
-    except pwd.error:
-	nobody = 1 + max(map(lambda x: x[2], pwd.getpwall()))
-    return nobody
-
-nobody = nobody_uid()
-
-
 class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
 
     """Simple HTTP request handler with GET and HEAD commands.
diff --git a/Lib/dos-8x3/test_mat.py b/Lib/dos-8x3/test_mat.py
index af84d2a..6d6bc44 100644
--- a/Lib/dos-8x3/test_mat.py
+++ b/Lib/dos-8x3/test_mat.py
@@ -3,8 +3,9 @@
 
 from test_support import *
 
-eps=1e-5
-print 'math module, testing with eps', eps
+seps='1e-05'
+eps = eval(seps)
+print 'math module, testing with eps', seps
 import math
 
 def testit(name, value, expected):
diff --git a/Lib/dos-8x3/test_str.py b/Lib/dos-8x3/test_str.py
new file mode 100644
index 0000000..5b2ddfb
--- /dev/null
+++ b/Lib/dos-8x3/test_str.py
@@ -0,0 +1,21 @@
+import strop, sys
+
+def test(name, input, output):
+    f = getattr(strop, name)
+    try:
+	value = f(input)
+    except:
+	 value = sys.exc_type
+	 print sys.exc_value
+    if value != output:
+	print f, `input`, `output`, `value`
+
+test('atoi', " 1 ", 1)
+test('atoi', " 1x", ValueError)
+test('atoi', " x1 ", ValueError)
+test('atol', "  1  ", 1L)
+test('atol', "  1x ", ValueError)
+test('atol', "  x1 ", ValueError)
+test('atof', "  1  ", 1.0)
+test('atof', "  1x ", ValueError)
+test('atof', "  x1 ", ValueError)
diff --git a/Lib/dos_8x3/posixfil.py b/Lib/dos_8x3/posixfil.py
index f0df543..fc5f53f 100755
--- a/Lib/dos_8x3/posixfil.py
+++ b/Lib/dos_8x3/posixfil.py
@@ -196,6 +196,9 @@
             elif sys.platform in ['aix3', 'aix4']:
                 l_type, l_whence, l_start, l_len, l_sysid, l_pid, l_vfs = \
                     struct.unpack('hhlllii', flock)
+	    elif sys.platform == "linux2":
+		l_type, l_whence, l_start, l_len, l_pid, l_sysid = \
+		    struct.unpack('hhllhh', flock)
 	    else:
 		l_type, l_whence, l_start, l_len, l_sysid, l_pid = \
 		    struct.unpack('hhllhh', flock)
diff --git a/Lib/dos_8x3/simpleht.py b/Lib/dos_8x3/simpleht.py
index dd3107a..ac3e384 100755
--- a/Lib/dos_8x3/simpleht.py
+++ b/Lib/dos_8x3/simpleht.py
@@ -10,7 +10,6 @@
 
 
 import os
-import pwd
 import sys
 import time
 import socket
@@ -20,17 +19,6 @@
 import BaseHTTPServer
 
 
-def nobody_uid():
-    """Internal routine to get nobody's uid"""
-    try:
-	nobody = pwd.getpwnam('nobody')[2]
-    except pwd.error:
-	nobody = 1 + max(map(lambda x: x[2], pwd.getpwall()))
-    return nobody
-
-nobody = nobody_uid()
-
-
 class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
 
     """Simple HTTP request handler with GET and HEAD commands.
diff --git a/Lib/dos_8x3/test_mat.py b/Lib/dos_8x3/test_mat.py
index af84d2a..6d6bc44 100644
--- a/Lib/dos_8x3/test_mat.py
+++ b/Lib/dos_8x3/test_mat.py
@@ -3,8 +3,9 @@
 
 from test_support import *
 
-eps=1e-5
-print 'math module, testing with eps', eps
+seps='1e-05'
+eps = eval(seps)
+print 'math module, testing with eps', seps
 import math
 
 def testit(name, value, expected):
diff --git a/Lib/dos_8x3/test_str.py b/Lib/dos_8x3/test_str.py
new file mode 100644
index 0000000..5b2ddfb
--- /dev/null
+++ b/Lib/dos_8x3/test_str.py
@@ -0,0 +1,21 @@
+import strop, sys
+
+def test(name, input, output):
+    f = getattr(strop, name)
+    try:
+	value = f(input)
+    except:
+	 value = sys.exc_type
+	 print sys.exc_value
+    if value != output:
+	print f, `input`, `output`, `value`
+
+test('atoi', " 1 ", 1)
+test('atoi', " 1x", ValueError)
+test('atoi', " x1 ", ValueError)
+test('atol', "  1  ", 1L)
+test('atol', "  1x ", ValueError)
+test('atol', "  x1 ", ValueError)
+test('atof', "  1  ", 1.0)
+test('atof', "  1x ", ValueError)
+test('atof', "  x1 ", ValueError)
