summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-10-24 20:42:55 (GMT)
committerGuido van Rossum <guido@python.org>2001-10-24 20:42:55 (GMT)
commite2ae77b8b8a62e648bb1864a9b36ef3280984404 (patch)
treee03ad6f126a16529b2fb43671903e357bcb05835
parentc6ac8a78f668123ec5c2c3d5a824e7886e9a1c60 (diff)
downloadcpython-e2ae77b8b8a62e648bb1864a9b36ef3280984404.zip
cpython-e2ae77b8b8a62e648bb1864a9b36ef3280984404.tar.gz
cpython-e2ae77b8b8a62e648bb1864a9b36ef3280984404.tar.bz2
SF patch #474590 -- RISC OS support
-rw-r--r--Include/pyport.h4
-rw-r--r--Lib/dumbdbm.py10
-rw-r--r--Lib/fileinput.py2
-rw-r--r--Lib/os.py7
-rw-r--r--Lib/plat-riscos/riscosenviron.py5
-rw-r--r--Lib/plat-riscos/riscospath.py4
-rw-r--r--Lib/plat-riscos/rourl2path.py77
-rw-r--r--Lib/site.py7
-rw-r--r--Lib/socket.py2
-rw-r--r--Lib/tempfile.py6
-rwxr-xr-xLib/test/regrtest.py46
-rwxr-xr-xLib/test/test_imageop.py10
-rw-r--r--Lib/test/test_import.py6
-rw-r--r--Lib/test/test_mailbox.py2
-rw-r--r--Lib/test/test_mhlib.py4
-rw-r--r--Lib/test/test_minidom.py4
-rw-r--r--Lib/test/test_pkg.py54
-rw-r--r--Lib/test/test_pkgimport.py4
-rw-r--r--Lib/test/test_repr.py14
-rw-r--r--Lib/test/test_rgbimg.py10
-rw-r--r--Lib/test/test_sax.py15
-rw-r--r--Lib/test/test_signal.py4
-rw-r--r--Lib/test/test_tokenize.py2
-rw-r--r--Lib/test/test_urllib2.py5
-rw-r--r--Lib/test/test_zipfile.py8
-rw-r--r--Lib/whichdb.py13
-rw-r--r--Modules/selectmodule.c8
-rw-r--r--Modules/socketmodule.c25
-rw-r--r--Modules/structmodule.c26
-rw-r--r--Modules/timemodule.c2
-rw-r--r--Objects/floatobject.c7
-rw-r--r--Python/bltinmodule.c15
-rw-r--r--Python/import.c38
33 files changed, 257 insertions, 189 deletions
diff --git a/Include/pyport.h b/Include/pyport.h
index 9c19e7a..847a332 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -153,6 +153,10 @@ typedef LONG_LONG Py_intptr_t;
#define HAVE_FSTAT
#endif
+#ifdef RISCOS
+#include <sys/types.h>
+#endif
+
#ifndef DONT_HAVE_SYS_STAT_H
#include <sys/stat.h>
#elif defined(HAVE_STAT_H)
diff --git a/Lib/dumbdbm.py b/Lib/dumbdbm.py
index 287a8a0..d5df1d5 100644
--- a/Lib/dumbdbm.py
+++ b/Lib/dumbdbm.py
@@ -33,13 +33,9 @@ error = IOError # For anydbm
class _Database:
def __init__(self, file):
- if _os.sep == '.':
- endsep = '/'
- else:
- endsep = '.'
- self._dirfile = file + endsep + 'dir'
- self._datfile = file + endsep + 'dat'
- self._bakfile = file + endsep + 'bak'
+ self._dirfile = file + _os.extsep + 'dir'
+ self._datfile = file + _os.extsep + 'dat'
+ self._bakfile = file + _os.extsep + 'bak'
# Mod by Jack: create data file if needed
try:
f = _open(self._datfile, 'r')
diff --git a/Lib/fileinput.py b/Lib/fileinput.py
index 794d575..c18995b 100644
--- a/Lib/fileinput.py
+++ b/Lib/fileinput.py
@@ -235,7 +235,7 @@ class FileInput:
else:
if self._inplace:
self._backupfilename = (
- self._filename + (self._backup or ".bak"))
+ self._filename + (self._backup or os.extsep+"bak"))
try: os.unlink(self._backupfilename)
except os.error: pass
# The next few lines may raise IOError
diff --git a/Lib/os.py b/Lib/os.py
index 9a7417b..e13c2f9 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -7,6 +7,7 @@ This exports:
- os.curdir is a string representing the current directory ('.' or ':')
- os.pardir is a string representing the parent directory ('..' or '::')
- os.sep is the (or a most common) pathname separator ('/' or ':' or '\\')
+ - os.extsep is the extension separator ('.' or '/')
- os.altsep is the alternate pathname separator (None or '/')
- os.pathsep is the component separator used in $PATH etc
- os.linesep is the line separator in text files ('\r' or '\n' or '\r\n')
@@ -168,6 +169,12 @@ elif 'riscos' in _names:
else:
raise ImportError, 'no os specific module found'
+
+if sep=='.':
+ extsep = '/'
+else:
+ extsep = '.'
+
__all__.append("path")
del _names
diff --git a/Lib/plat-riscos/riscosenviron.py b/Lib/plat-riscos/riscosenviron.py
index bfb8447..d92aa31 100644
--- a/Lib/plat-riscos/riscosenviron.py
+++ b/Lib/plat-riscos/riscosenviron.py
@@ -1,4 +1,4 @@
-"""A more or less complete user-defined wrapper around dictionary objects."""
+"""A more or less complete dictionary like interface for the RISC OS environment."""
import riscos
@@ -8,8 +8,7 @@ class _Environ:
def __repr__(self):
return repr(riscos.getenvdict())
def __cmp__(self, dict):
- if isinstance(dict, UserDict):
- return cmp(riscos.getenvdict(), dict)
+ return cmp(riscos.getenvdict(), dict)
def __len__(self):
return len(riscos.getenvdict())
def __getitem__(self, key):
diff --git a/Lib/plat-riscos/riscospath.py b/Lib/plat-riscos/riscospath.py
index c25572b..fb0e477 100644
--- a/Lib/plat-riscos/riscospath.py
+++ b/Lib/plat-riscos/riscospath.py
@@ -103,8 +103,10 @@ def join(a, *p):
j= a
for b in p:
(fs, drive, path)= _split(b)
- if fs!='' or drive!='' or path[:1] in _roots:
+ if j=='' or fs!='' or drive!='' or path[:1] in _roots:
j= b
+ elif j[-1]==':':
+ j= j+b
else:
j= j+'.'+b
return j
diff --git a/Lib/plat-riscos/rourl2path.py b/Lib/plat-riscos/rourl2path.py
index 522d7ea..9c21386 100644
--- a/Lib/plat-riscos/rourl2path.py
+++ b/Lib/plat-riscos/rourl2path.py
@@ -6,15 +6,26 @@ import string
import urllib
import os
-def url2pathname(pathname):
- "Convert /-delimited pathname to mac pathname"
- #
- # XXXX The .. handling should be fixed...
- #
- tp = urllib.splittype(pathname)[0]
+__all__ = ["url2pathname","pathname2url"]
+
+__slash_dot = string.maketrans("/.", "./")
+
+def url2pathname(url):
+ "Convert URL to a RISC OS path."
+ tp = urllib.splittype(url)[0]
if tp and tp <> 'file':
raise RuntimeError, 'Cannot convert non-local URL to pathname'
- components = string.split(pathname, '/')
+ # Turn starting /// into /, an empty hostname means current host
+ if url[:3] == '///':
+ url = url[2:]
+ elif url[:2] == '//':
+ raise RuntimeError, 'Cannot convert non-local URL to pathname'
+ components = string.split(url, '/')
+ if not components[0]:
+ if '$' in components:
+ del components[0]
+ else:
+ components[0] = '$'
# Remove . and embedded ..
i = 0
while i < len(components):
@@ -23,59 +34,35 @@ def url2pathname(pathname):
elif components[i] == '..' and i > 0 and \
components[i-1] not in ('', '..'):
del components[i-1:i+1]
- i = i-1
+ i -= 1
+ elif components[i] == '..':
+ components[i] = '^'
+ i += 1
elif components[i] == '' and i > 0 and components[i-1] <> '':
del components[i]
else:
- if components[i]<>'..' and string.find(components[i], '.')<>-1 :
- components[i] = string.join(string.split(components[i],'.'),'/')
- i = i+1
- if not components[0]:
- # Absolute unix path, don't start with colon
- return string.join(components[1:], '.')
- else:
- # relative unix path, start with colon. First replace
- # leading .. by empty strings (giving ::file)
- i = 0
- while i < len(components) and components[i] == '..':
- components[i] = '^'
- i = i + 1
- return string.join(components, '.')
+ i += 1
+ components = map(lambda x: urllib.unquote(x).translate(__slash_dot), components)
+ return '.'.join(components)
def pathname2url(pathname):
- "convert mac pathname to /-delimited pathname"
- if '/' in pathname:
- raise RuntimeError, "Cannot convert pathname containing slashes"
- components = string.split(pathname, ':')
- # Replace empty string ('::') by .. (will result in '/../' later)
- for i in range(1, len(components)):
- if components[i] == '':
- components[i] = '..'
- # Truncate names longer than 31 bytes
- components = map(lambda x: x[:31], components)
-
- if os.path.isabs(pathname):
- return '/' + string.join(components, '/')
- else:
- return string.join(components, '/')
+ "Convert a RISC OS path name to a file url."
+ return urllib.quote('///' + pathname.translate(__slash_dot), "/$:")
def test():
for url in ["index.html",
"/SCSI::SCSI4/$/Anwendung/Comm/Apps/!Fresco/Welcome",
+ "/SCSI::SCSI4/$/Anwendung/Comm/Apps/../!Fresco/Welcome",
"../index.html",
"bar/index.html",
"/foo/bar/index.html",
"/foo/bar/",
"/"]:
print `url`, '->', `url2pathname(url)`
- for path in ["drive:",
- "drive:dir:",
- "drive:dir:file",
- "drive:file",
- "file",
- ":file",
- ":dir:",
- ":dir:file"]:
+ print "*******************************************************"
+ for path in ["SCSI::SCSI4.$.Anwendung",
+ "PythonApp:Lib",
+ "PythonApp:Lib.rourl2path/py"]:
print `path`, '->', `pathname2url(path)`
if __name__ == '__main__':
diff --git a/Lib/site.py b/Lib/site.py
index 86698df..e27174e 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -59,11 +59,6 @@ ImportError exception, it is silently ignored.
import sys, os
-if os.sep==".":
- endsep = "/"
-else:
- endsep = "."
-
def makepath(*paths):
dir = os.path.abspath(os.path.join(*paths))
@@ -129,7 +124,7 @@ def addsitedir(sitedir):
return
names.sort()
for name in names:
- if name[-4:] == endsep + "pth":
+ if name[-4:] == os.extsep + "pth":
addpackage(sitedir, name)
if reset:
_dirs_in_sys_path = None
diff --git a/Lib/socket.py b/Lib/socket.py
index ec8d610..b951809 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -48,7 +48,7 @@ __all__.extend(os._get_exports_list(_socket))
if (sys.platform.lower().startswith("win")
or (hasattr(os, 'uname') and os.uname()[0] == "BeOS")
- or (sys.platform=="RISCOS")):
+ or (sys.platform=="riscos")):
_realsocketcall = _socket.socket
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 7a1fc26..f1d53db 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -34,6 +34,10 @@ def gettempdir():
attempdirs.insert(0, dirname)
except macfs.error:
pass
+ elif os.name == 'riscos':
+ scrapdir = os.getenv('Wimp$ScrapDir')
+ if scrapdir:
+ attempdirs.insert(0, scrapdir)
for envname in 'TMPDIR', 'TEMP', 'TMP':
if os.environ.has_key(envname):
attempdirs.insert(0, os.environ[envname])
@@ -87,7 +91,7 @@ if os.name == "posix":
# string.
elif os.name == "nt":
template = '~' + `os.getpid()` + '-'
-elif os.name == 'mac':
+elif os.name in ('mac', 'riscos'):
template = 'Python-Tmp-'
else:
template = 'tmp' # XXX might choose a better one
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 0c5d85a..b2bb7ac 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -156,7 +156,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0,
pass
for i in range(len(args)):
# Strip trailing ".py" from arguments
- if args[i][-3:] == '.py':
+ if args[i][-3:] == os.extsep+'py':
args[i] = args[i][:-3]
stdtests = STDTESTS[:]
nottests = NOTTESTS[:]
@@ -272,7 +272,7 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
names = os.listdir(testdir)
tests = []
for name in names:
- if name[:5] == "test_" and name[-3:] == ".py":
+ if name[:5] == "test_" and name[-3:] == os.extsep+"py":
modname = name[:-3]
if modname not in stdtests and modname not in nottests:
tests.append(modname)
@@ -576,6 +576,48 @@ _expectations = {
test_winreg
test_winsound
""",
+ 'riscos':
+ """
+ test_al
+ test_asynchat
+ test_bsddb
+ test_cd
+ test_cl
+ test_commands
+ test_crypt
+ test_dbm
+ test_dl
+ test_fcntl
+ test_fork1
+ test_gdbm
+ test_gl
+ test_grp
+ test_imgfile
+ test_largefile
+ test_linuxaudiodev
+ test_locale
+ test_mmap
+ test_nis
+ test_ntpath
+ test_openpty
+ test_poll
+ test_popen2
+ test_pty
+ test_pwd
+ test_socket_ssl
+ test_socketserver
+ test_strop
+ test_sunaudiodev
+ test_sundry
+ test_thread
+ test_threaded_import
+ test_threadedtempfile
+ test_threading
+ test_timing
+ test_unicode_file
+ test_winreg
+ test_winsound
+ """,
}
class _ExpectedSkips:
diff --git a/Lib/test/test_imageop.py b/Lib/test/test_imageop.py
index 7a6981e..ff83c45 100755
--- a/Lib/test/test_imageop.py
+++ b/Lib/test/test_imageop.py
@@ -7,17 +7,17 @@
from test_support import verbose, unlink
-import imageop, uu
+import imageop, uu, os
def main(use_rgbimg=1):
# Create binary test files
- uu.decode(get_qualified_path('testrgb.uue'), 'test.rgb')
+ uu.decode(get_qualified_path('testrgb'+os.extsep+'uue'), 'test'+os.extsep+'rgb')
if use_rgbimg:
- image, width, height = getrgbimage('test.rgb')
+ image, width, height = getrgbimage('test'+os.extsep+'rgb')
else:
- image, width, height = getimage('test.rgb')
+ image, width, height = getimage('test'+os.extsep+'rgb')
# Return the selected part of image, which should by width by height
# in size and consist of pixels of psize bytes.
@@ -114,7 +114,7 @@ def main(use_rgbimg=1):
image = imageop.grey22grey (grey2image, width, height)
# Cleanup
- unlink('test.rgb')
+ unlink('test'+os.extsep+'rgb')
def getrgbimage(name):
"""return a tuple consisting of image (in 'imgfile' format but
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index b2e3fb6..305c297 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -18,11 +18,11 @@ import double_const # don't blink -- that *was* the test
def test_with_extension(ext): # ext normally ".py"; perhaps ".pyw"
source = TESTFN + ext
- pyo = TESTFN + ".pyo"
+ pyo = TESTFN + os.extsep + "pyo"
if sys.platform.startswith('java'):
pyc = TESTFN + "$py.class"
else:
- pyc = TESTFN + ".pyc"
+ pyc = TESTFN + os.extsep + "pyc"
f = open(source, "w")
print >> f, "# This tests Python's ability to import a", ext, "file."
@@ -63,7 +63,7 @@ def test_with_extension(ext): # ext normally ".py"; perhaps ".pyw"
sys.path.insert(0, os.curdir)
try:
- test_with_extension(".py")
+ test_with_extension(os.extsep + "py")
if sys.platform.startswith("win"):
for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw":
test_with_extension(ext)
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 4e23398..bb75e64 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -42,7 +42,7 @@ class MaildirTestCase(unittest.TestCase):
t = int(time.time() % 1000000)
pid = self._counter
self._counter += 1
- filename = "%s.%s.myhostname.mydomain" % (t, pid)
+ filename = os.extsep.join((str(t), str(pid), "myhostname", "mydomain"))
tmpname = os.path.join(self._dir, "tmp", filename)
newname = os.path.join(self._dir, dir, filename)
fp = open(tmpname, "w")
diff --git a/Lib/test/test_mhlib.py b/Lib/test/test_mhlib.py
index 9d5f101..91c1a1a 100644
--- a/Lib/test/test_mhlib.py
+++ b/Lib/test/test_mhlib.py
@@ -12,8 +12,8 @@ import os, StringIO
import sys
import mhlib
-if sys.platform.startswith("win"):
- raise TestSkipped("test_mhlib skipped on Windows -- "
+if sys.platform.startswith("win") or sys.platform=="riscos":
+ raise TestSkipped("test_mhlib skipped on %s -- "%sys.platform +
"too many Unix assumptions")
_mhroot = TESTFN+"_MH"
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
index 2a290aa..ab985b8 100644
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -4,7 +4,7 @@ from xml.dom.minidom import parse, Node, Document, parseString
from xml.dom import HierarchyRequestErr
import xml.parsers.expat
-import os.path
+import os
import sys
import traceback
from test_support import verbose
@@ -13,7 +13,7 @@ if __name__ == "__main__":
base = sys.argv[0]
else:
base = __file__
-tstfile = os.path.join(os.path.dirname(base), "test.xml")
+tstfile = os.path.join(os.path.dirname(base), "test"+os.extsep+"xml")
del base
def confirm(test, testname = "Test"):
diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py
index f699af40..c9e771d 100644
--- a/Lib/test/test_pkg.py
+++ b/Lib/test/test_pkg.py
@@ -1,7 +1,7 @@
# Test packages (dotted-name import)
import sys, os, tempfile, traceback
-from os import mkdir, rmdir # Can't test if these fail
+from os import mkdir, rmdir, extsep # Can't test if these fail
del mkdir, rmdir
from test_support import verify, verbose, TestFailed
@@ -77,15 +77,15 @@ def runtest(hier, code):
# Test descriptions
tests = [
- ("t1", [("t1", None), ("t1 __init__.py", "")], "import t1"),
+ ("t1", [("t1", None), ("t1 __init__"+os.extsep+"py", "")], "import t1"),
("t2", [
("t2", None),
- ("t2 __init__.py", "'doc for t2'; print __name__, 'loading'"),
+ ("t2 __init__"+os.extsep+"py", "'doc for t2'; print __name__, 'loading'"),
("t2 sub", None),
- ("t2 sub __init__.py", ""),
+ ("t2 sub __init__"+os.extsep+"py", ""),
("t2 sub subsub", None),
- ("t2 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"),
+ ("t2 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
],
"""
import t2
@@ -111,11 +111,11 @@ print dir()
("t3", [
("t3", None),
- ("t3 __init__.py", "print __name__, 'loading'"),
+ ("t3 __init__"+os.extsep+"py", "print __name__, 'loading'"),
("t3 sub", None),
- ("t3 sub __init__.py", ""),
+ ("t3 sub __init__"+os.extsep+"py", ""),
("t3 sub subsub", None),
- ("t3 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"),
+ ("t3 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
],
"""
import t3.sub.subsub
@@ -126,15 +126,15 @@ reload(t3.sub.subsub)
"""),
("t4", [
- ("t4.py", "print 'THIS SHOULD NOT BE PRINTED (t4.py)'"),
+ ("t4"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)'"),
("t4", None),
- ("t4 __init__.py", "print __name__, 'loading'"),
- ("t4 sub.py", "print 'THIS SHOULD NOT BE PRINTED (sub.py)'"),
+ ("t4 __init__"+os.extsep+"py", "print __name__, 'loading'"),
+ ("t4 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
("t4 sub", None),
- ("t4 sub __init__.py", ""),
- ("t4 sub subsub.py", "print 'THIS SHOULD NOT BE PRINTED (subsub.py)'"),
+ ("t4 sub __init__"+os.extsep+"py", ""),
+ ("t4 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
("t4 sub subsub", None),
- ("t4 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"),
+ ("t4 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
],
"""
from t4.sub.subsub import *
@@ -143,9 +143,9 @@ print "t4.sub.subsub.spam =", spam
("t5", [
("t5", None),
- ("t5 __init__.py", "import t5.foo"),
- ("t5 string.py", "print __name__, 'loading'; spam = 1"),
- ("t5 foo.py",
+ ("t5 __init__"+os.extsep+"py", "import t5.foo"),
+ ("t5 string"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
+ ("t5 foo"+os.extsep+"py",
"print __name__, 'loading'; import string; print string.spam"),
],
"""
@@ -160,10 +160,10 @@ print fixdir(dir(t5.string))
("t6", [
("t6", None),
- ("t6 __init__.py", "__all__ = ['spam', 'ham', 'eggs']"),
- ("t6 spam.py", "print __name__, 'loading'"),
- ("t6 ham.py", "print __name__, 'loading'"),
- ("t6 eggs.py", "print __name__, 'loading'"),
+ ("t6 __init__"+os.extsep+"py", "__all__ = ['spam', 'ham', 'eggs']"),
+ ("t6 spam"+os.extsep+"py", "print __name__, 'loading'"),
+ ("t6 ham"+os.extsep+"py", "print __name__, 'loading'"),
+ ("t6 eggs"+os.extsep+"py", "print __name__, 'loading'"),
],
"""
import t6
@@ -174,15 +174,15 @@ print dir()
"""),
("t7", [
- ("t7.py", "print 'Importing t7.py'"),
+ ("t7"+os.extsep+"py", "print 'Importing t7"+os.extsep+"py'"),
("t7", None),
- ("t7 __init__.py", "print __name__, 'loading'"),
- ("t7 sub.py", "print 'THIS SHOULD NOT BE PRINTED (sub.py)'"),
+ ("t7 __init__"+os.extsep+"py", "print __name__, 'loading'"),
+ ("t7 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
("t7 sub", None),
- ("t7 sub __init__.py", ""),
- ("t7 sub subsub.py", "print 'THIS SHOULD NOT BE PRINTED (subsub.py)'"),
+ ("t7 sub __init__"+os.extsep+"py", ""),
+ ("t7 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
("t7 sub subsub", None),
- ("t7 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"),
+ ("t7 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
],
"""
t7, sub, subsub = None, None, None
diff --git a/Lib/test/test_pkgimport.py b/Lib/test/test_pkgimport.py
index 72889f9..8c7a99b 100644
--- a/Lib/test/test_pkgimport.py
+++ b/Lib/test/test_pkgimport.py
@@ -23,8 +23,8 @@ class TestImport(unittest.TestCase):
self.package_dir = os.path.join(self.test_dir,
self.package_name)
os.mkdir(self.package_dir)
- open(os.path.join(self.package_dir, '__init__.py'), 'w')
- self.module_path = os.path.join(self.package_dir, 'foo.py')
+ open(os.path.join(self.package_dir, '__init__'+os.extsep+'py'), 'w')
+ self.module_path = os.path.join(self.package_dir, 'foo'+os.extsep+'py')
def tearDown(self):
for file in os.listdir(self.package_dir):
diff --git a/Lib/test/test_repr.py b/Lib/test/test_repr.py
index 1c63e4d..e7b564e 100644
--- a/Lib/test/test_repr.py
+++ b/Lib/test/test_repr.py
@@ -173,9 +173,9 @@ class LongReprTest(unittest.TestCase):
self.subpkgname = os.path.join(longname, longname)
# Make the package and subpackage
os.mkdir(self.pkgname)
- touch(os.path.join(self.pkgname, '__init__.py'))
+ touch(os.path.join(self.pkgname, '__init__'+os.extsep+'py'))
os.mkdir(self.subpkgname)
- touch(os.path.join(self.subpkgname, '__init__.py'))
+ touch(os.path.join(self.subpkgname, '__init__'+os.extsep+'py'))
# Remember where we are
self.here = os.getcwd()
sys.path.insert(0, self.here)
@@ -195,14 +195,14 @@ class LongReprTest(unittest.TestCase):
def test_module(self):
eq = self.assertEquals
- touch(os.path.join(self.subpkgname, self.pkgname + '.py'))
+ touch(os.path.join(self.subpkgname, self.pkgname + os.extsep + 'py'))
from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import areallylongpackageandmodulenametotestreprtruncation
eq(repr(areallylongpackageandmodulenametotestreprtruncation),
"<module 'areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation' from '%s'>" % areallylongpackageandmodulenametotestreprtruncation.__file__)
def test_type(self):
eq = self.assertEquals
- touch(os.path.join(self.subpkgname, 'foo.py'), '''\
+ touch(os.path.join(self.subpkgname, 'foo'+os.extsep+'py'), '''\
class foo(object):
pass
''')
@@ -216,7 +216,7 @@ class foo(object):
pass
def test_class(self):
- touch(os.path.join(self.subpkgname, 'bar.py'), '''\
+ touch(os.path.join(self.subpkgname, 'bar'+os.extsep+'py'), '''\
class bar:
pass
''')
@@ -225,7 +225,7 @@ class bar:
"<class areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation.bar.bar at 0x"))
def test_instance(self):
- touch(os.path.join(self.subpkgname, 'baz.py'), '''\
+ touch(os.path.join(self.subpkgname, 'baz'+os.extsep+'py'), '''\
class baz:
pass
''')
@@ -236,7 +236,7 @@ class baz:
def test_method(self):
eq = self.assertEquals
- touch(os.path.join(self.subpkgname, 'qux.py'), '''\
+ touch(os.path.join(self.subpkgname, 'qux'+os.extsep+'py'), '''\
class aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:
def amethod(self): pass
''')
diff --git a/Lib/test/test_rgbimg.py b/Lib/test/test_rgbimg.py
index f2622e4..b632cd0 100644
--- a/Lib/test/test_rgbimg.py
+++ b/Lib/test/test_rgbimg.py
@@ -25,9 +25,9 @@ def testimg(rgb_file, raw_file):
os.unlink('@.rgb')
table = [
- ('testrgb.uue', 'test.rgb'),
- ('testimg.uue', 'test.rawimg'),
- ('testimgr.uue', 'test.rawimg.rev'),
+ ('testrgb'+os.extsep+'uue', 'test'+os.extsep+'rgb'),
+ ('testimg'+os.extsep+'uue', 'test'+os.extsep+'rawimg'),
+ ('testimgr'+os.extsep+'uue', 'test'+os.extsep+'rawimg'+os.extsep+'rev'),
]
for source, target in table:
source = findfile(source)
@@ -43,13 +43,13 @@ ttob = rgbimg.ttob(0)
if ttob != 0:
raise error, 'ttob should start out as zero'
-testimg('test.rgb', 'test.rawimg')
+testimg('test'+os.extsep+'rgb', 'test'+os.extsep+'rawimg')
ttob = rgbimg.ttob(1)
if ttob != 0:
raise error, 'ttob should be zero'
-testimg('test.rgb', 'test.rawimg.rev')
+testimg('test'+os.extsep+'rgb', 'test'+os.extsep+'rawimg'+os.extsep+'rev')
ttob = rgbimg.ttob(0)
if ttob != 1:
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index dcf57d4..32b7609 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -13,6 +13,7 @@ from xml.sax.expatreader import create_parser
from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
from cStringIO import StringIO
from test_support import verify, verbose, TestFailed, findfile
+import os
# ===== Utilities
@@ -228,7 +229,7 @@ def test_expat_file():
xmlgen = XMLGenerator(result)
parser.setContentHandler(xmlgen)
- parser.parse(open(findfile("test.xml")))
+ parser.parse(open(findfile("test"+os.extsep+"xml")))
return result.getvalue() == xml_test_out
@@ -349,7 +350,7 @@ def test_expat_nsattrs_wattr():
# ===== InputSource support
-xml_test_out = open(findfile("test.xml.out")).read()
+xml_test_out = open(findfile("test"+os.extsep+"xml"+os.extsep+"out")).read()
def test_expat_inpsource_filename():
parser = create_parser()
@@ -357,7 +358,7 @@ def test_expat_inpsource_filename():
xmlgen = XMLGenerator(result)
parser.setContentHandler(xmlgen)
- parser.parse(findfile("test.xml"))
+ parser.parse(findfile("test"+os.extsep+"xml"))
return result.getvalue() == xml_test_out
@@ -367,7 +368,7 @@ def test_expat_inpsource_sysid():
xmlgen = XMLGenerator(result)
parser.setContentHandler(xmlgen)
- parser.parse(InputSource(findfile("test.xml")))
+ parser.parse(InputSource(findfile("test"+os.extsep+"xml")))
return result.getvalue() == xml_test_out
@@ -378,7 +379,7 @@ def test_expat_inpsource_stream():
parser.setContentHandler(xmlgen)
inpsrc = InputSource()
- inpsrc.setByteStream(open(findfile("test.xml")))
+ inpsrc.setByteStream(open(findfile("test"+os.extsep+"xml")))
parser.parse(inpsrc)
return result.getvalue() == xml_test_out
@@ -625,9 +626,9 @@ def make_test_output():
xmlgen = XMLGenerator(result)
parser.setContentHandler(xmlgen)
- parser.parse(findfile("test.xml"))
+ parser.parse(findfile("test"+os.extsep+"xml"))
- outf = open(findfile("test.xml.out"), "w")
+ outf = open(findfile("test"+os.extsep+"xml"+os.extsep+"out"), "w")
outf.write(result.getvalue())
outf.close()
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index a6c32b4..05bdcab 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -4,8 +4,8 @@ import signal
import os
import sys
-if sys.platform[:3] in ('win', 'os2'):
- raise TestSkipped, "Can't test signal on %s" % sys.platform[:3]
+if sys.platform[:3] in ('win', 'os2') or sys.platform=='riscos':
+ raise TestSkipped, "Can't test signal on %s" % sys.platform
if verbose:
x = '-x'
diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py
index a0713d1..7ac5624 100644
--- a/Lib/test/test_tokenize.py
+++ b/Lib/test/test_tokenize.py
@@ -3,7 +3,7 @@ import tokenize, os, sys
if verbose:
print 'starting...'
-file = open(findfile('tokenize_tests.py'))
+file = open(findfile('tokenize_tests'+os.extsep+'py'))
tokenize.tokenize(file.readline)
if verbose:
print 'finished'
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index 129bf2c..bb4fedb 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -19,6 +19,11 @@ if fname[1:2] == ":":
# urllib.pathname2url works, unfortunately...
if os.name == 'mac':
fname = '/' + fname.replace(':', '/')
+elif os.name == 'riscos':
+ import string
+ fname = os.expand(fname)
+ fname = fname.translate(string.maketrans("/.", "./"))
+
file_url = "file://%s" % fname
f = urllib2.urlopen(file_url)
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index 87e99ec..480aeed 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -2,19 +2,19 @@ import zlib # implied prerequisite
import zipfile, os, StringIO, tempfile
from test_support import TestFailed
-srcname = "junk9630.tmp"
-zipname = "junk9708.tmp"
+srcname = "junk9630"+os.extsep+"tmp"
+zipname = "junk9708"+os.extsep+"tmp"
def zipTest(f, compression, srccontents):
zip = zipfile.ZipFile(f, "w", compression) # Create the ZIP archive
- zip.write(srcname, "another.name")
+ zip.write(srcname, "another"+os.extsep+"name")
zip.write(srcname, srcname)
zip.close()
zip = zipfile.ZipFile(f, "r", compression) # Read the ZIP archive
readData2 = zip.read(srcname)
- readData1 = zip.read("another.name")
+ readData1 = zip.read("another"+os.extsep+"name")
zip.close()
if readData1 != srccontents or readData2 != srccontents:
diff --git a/Lib/whichdb.py b/Lib/whichdb.py
index 8687b71..8b31003 100644
--- a/Lib/whichdb.py
+++ b/Lib/whichdb.py
@@ -2,11 +2,6 @@
import os
-if os.sep==".":
- endsep = "/"
-else:
- endsep = "."
-
def whichdb(filename):
"""Guess which db package to use to open a db file.
@@ -24,9 +19,9 @@ def whichdb(filename):
# Check for dbm first -- this has a .pag and a .dir file
try:
- f = open(filename + endsep + "pag", "rb")
+ f = open(filename + os.extsep + "pag", "rb")
f.close()
- f = open(filename + endsep + "dir", "rb")
+ f = open(filename + os.extsep + "dir", "rb")
f.close()
return "dbm"
except IOError:
@@ -34,9 +29,9 @@ def whichdb(filename):
# Check for dumbdbm next -- this has a .dir and and a .dat file
try:
- f = open(filename + endsep + "dat", "rb")
+ f = open(filename + os.extsep + "dat", "rb")
f.close()
- f = open(filename + endsep + "dir", "rb")
+ f = open(filename + os.extsep + "dir", "rb")
try:
if f.read(1) in ["'", '"']:
return "dumbdbm"
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index f02b15a..e480fb4 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -52,14 +52,6 @@ extern void bzero(void *, int);
#endif
#endif
-#ifdef RISCOS
-#define NO_DUP
-#undef off_t
-#undef uid_t
-#undef gid_t
-#undef errno
-#include "socklib.h"
-#endif /* RISCOS */
static PyObject *SelectError;
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 377c792..1d9a13d 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -130,20 +130,6 @@ Socket methods:
#include <os2.h>
#endif
-#ifdef RISCOS
-#define NO_DUP
-#undef off_t
-#undef uid_t
-#undef gid_t
-#undef errno
-#include <signal.h>
-#include "socklib.h"
-#include "inetlib.h"
-#include "netdb.h"
-#include "unixlib.h"
-#include "netinet/in.h"
-#include "sys/ioctl.h"
-#else /*RISCOS*/
#include <sys/types.h>
@@ -165,13 +151,18 @@ Socket methods:
#endif
#endif
+#ifndef RISCOS
#include <fcntl.h>
#else
+#include <sys/fcntl.h>
+#define NO_DUP
+int h_errno; /* not used */
+#endif
+#else
#include <winsock.h>
#include <fcntl.h>
#endif
-#endif /*RISCOS*/
#ifdef HAVE_SYS_UN_H
#include <sys/un.h>
@@ -1804,7 +1795,11 @@ gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af)
if (h == NULL) {
/* Let's get real error message to return */
+#ifndef RISCOS
PyH_Err(h_errno);
+#else
+ PyErr_SetString(PySocket_Error, "host not found");
+#endif
return NULL;
}
if (h->h_addrtype != af) {
diff --git a/Modules/structmodule.c b/Modules/structmodule.c
index 61436f9..8cc4945 100644
--- a/Modules/structmodule.c
+++ b/Modules/structmodule.c
@@ -53,19 +53,19 @@ static PyObject *StructError;
#endif
#endif /* __MWERKS__ */
-typedef struct { char c; short x; } s_short;
-typedef struct { char c; int x; } s_int;
-typedef struct { char c; long x; } s_long;
-typedef struct { char c; float x; } s_float;
-typedef struct { char c; double x; } s_double;
-typedef struct { char c; void *x; } s_void_p;
-
-#define SHORT_ALIGN (sizeof(s_short) - sizeof(short))
-#define INT_ALIGN (sizeof(s_int) - sizeof(int))
-#define LONG_ALIGN (sizeof(s_long) - sizeof(long))
-#define FLOAT_ALIGN (sizeof(s_float) - sizeof(float))
-#define DOUBLE_ALIGN (sizeof(s_double) - sizeof(double))
-#define VOID_P_ALIGN (sizeof(s_void_p) - sizeof(void *))
+typedef struct { char c; short x; } st_short;
+typedef struct { char c; int x; } st_int;
+typedef struct { char c; long x; } st_long;
+typedef struct { char c; float x; } st_float;
+typedef struct { char c; double x; } st_double;
+typedef struct { char c; void *x; } st_void_p;
+
+#define SHORT_ALIGN (sizeof(st_short) - sizeof(short))
+#define INT_ALIGN (sizeof(st_int) - sizeof(int))
+#define LONG_ALIGN (sizeof(st_long) - sizeof(long))
+#define FLOAT_ALIGN (sizeof(st_float) - sizeof(float))
+#define DOUBLE_ALIGN (sizeof(st_double) - sizeof(double))
+#define VOID_P_ALIGN (sizeof(st_void_p) - sizeof(void *))
/* We can't support q and Q in native mode unless the compiler does;
in std mode, they're 8 bytes on all platforms. */
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index bb7f358..ef5ab92 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -17,9 +17,7 @@
#define GUSI_TO_MSL_EPOCH (4*365*24*60*60)
#endif /* USE_GUSI2 */
#else
-#ifndef RISCOS
#include <sys/types.h>
-#endif /* RISCOS */
#endif
#ifdef QUICKWIN
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 12d4905..b8c3772 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -610,6 +610,13 @@ float_int(PyObject *v)
long aslong; /* (long)wholepart */
(void)modf(x, &wholepart);
+#ifdef RISCOS
+ /* conversion from floating to integral type would raise exception */
+ if (wholepart>LONG_MAX || wholepart<LONG_MIN) {
+ PyErr_SetString(PyExc_OverflowError, "float too large to convert");
+ return NULL;
+ }
+#endif
/* doubles may have more bits than longs, or vice versa; and casting
to long may yield gibberish in either case. What really matters
is whether converting back to double again reproduces what we
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 144a62f..ac2aa5a 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -13,6 +13,10 @@
#include <unistd.h>
#endif
+#ifdef RISCOS
+#include "unixstuff.h"
+#endif
+
/* The default encoding used by the platform file system APIs
Can remain NULL for all platforms that don't have such a concept
*/
@@ -536,7 +540,9 @@ builtin_execfile(PyObject *self, PyObject *args)
FILE* fp = NULL;
PyCompilerFlags cf;
int exists;
+#ifndef RISCOS
struct stat s;
+#endif
if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
&filename,
@@ -558,12 +564,21 @@ builtin_execfile(PyObject *self, PyObject *args)
exists = 0;
/* Test for existence or directory. */
+#ifndef RISCOS
if (!stat(filename, &s)) {
if (S_ISDIR(s.st_mode))
errno = EISDIR;
else
exists = 1;
}
+#else
+ if (object_exists(filename)) {
+ if (isdir(filename))
+ errno = EISDIR;
+ else
+ exists = 1;
+ }
+#endif /* RISCOS */
if (exists) {
Py_BEGIN_ALLOW_THREADS
diff --git a/Python/import.c b/Python/import.c
index 626695c..f00a563 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -983,13 +983,10 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen,
#else
/* XXX How are you going to test for directories? */
#ifdef RISCOS
- {
- static struct filedescr fd = {"", "", PKG_DIRECTORY};
- if (isdir(buf)) {
- if (find_init_module(buf))
- return &fd;
- }
- }
+ if (isdir(buf) &&
+ find_init_module(buf) &&
+ case_ok(buf, len, namelen, name))
+ return &fd_package;
#endif
#endif
#ifdef macintosh
@@ -1069,6 +1066,8 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen,
#include <sys/types.h>
#include <dirent.h>
+#elif defined(RISCOS)
+#include "oslib/osfscontrol.h"
#endif
static int
@@ -1198,6 +1197,31 @@ case_ok(char *buf, int len, int namelen, char *name)
}
return 0 ; /* Not found */
+/* RISC OS */
+#elif defined(RISCOS)
+ char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
+ char buf2[MAXPATHLEN+2];
+ char *nameWithExt = buf+len-namelen;
+ int canonlen;
+ os_error *e;
+
+ if (Py_GETENV("PYTHONCASEOK") != NULL)
+ return 1;
+
+ /* workaround:
+ append wildcard, otherwise case of filename wouldn't be touched */
+ strcpy(buf2, buf);
+ strcat(buf2, "*");
+
+ e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
+ canonlen = MAXPATHLEN+1-canonlen;
+ if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
+ return 0;
+ if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
+ return 1; /* match */
+
+ return 0;
+
/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
#else
return 1;