| import os | 
 | import resource | 
 |  | 
 | from test.test_support import TESTFN | 
 |  | 
 | # This test is checking a few specific problem spots.  RLIMIT_FSIZE | 
 | # should be RLIM_INFINITY, which will be a really big number on a | 
 | # platform with large file support.  On these platforms, we need to | 
 | # test that the get/setrlimit functions properly convert the number to | 
 | # a C long long and that the conversion doesn't raise an error. | 
 |  | 
 | try: | 
 |     cur, max = resource.getrlimit(resource.RLIMIT_FSIZE) | 
 | except AttributeError: | 
 |     pass | 
 | else: | 
 |     print resource.RLIM_INFINITY == max | 
 |     resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max)) | 
 |  | 
 | # Now check to see what happens when the RLIMIT_FSIZE is small.  Some | 
 | # versions of Python were terminated by an uncaught SIGXFSZ, but | 
 | # pythonrun.c has been fixed to ignore that exception.  If so, the | 
 | # write() should return EFBIG when the limit is exceeded. | 
 |  | 
 | # At least one platform has an unlimited RLIMIT_FSIZE and attempts to | 
 | # change it raise ValueError instead. | 
 |  | 
 | try: | 
 |     try: | 
 |         resource.setrlimit(resource.RLIMIT_FSIZE, (1024, max)) | 
 |         limit_set = 1 | 
 |     except ValueError: | 
 |         limit_set = 0 | 
 |     f = open(TESTFN, "wb") | 
 |     f.write("X" * 1024) | 
 |     try: | 
 |         f.write("Y") | 
 |         f.flush() | 
 |     except IOError: | 
 |         if not limit_set: | 
 |             raise | 
 |     f.close() | 
 |     os.unlink(TESTFN) | 
 | finally: | 
 |     resource.setrlimit(resource.RLIMIT_FSIZE, (cur, max)) | 
 |  | 
 | # And be sure that setrlimit is checking for really large values | 
 | too_big = 10L**50 | 
 | try: | 
 |     resource.setrlimit(resource.RLIMIT_FSIZE, (too_big, max)) | 
 | except (OverflowError, ValueError): | 
 |     pass | 
 | try: | 
 |     resource.setrlimit(resource.RLIMIT_FSIZE, (max, too_big)) | 
 | except (OverflowError, ValueError): | 
 |     pass |