dosemu2/test/func_ds3_lock_concurrent.py
geos_one 91736529d5
Some checks failed
Master / Scheduled (FULL) (push) Has been cancelled
Master / Triggered (push) Has been cancelled
Master / Triggered (ASAN) (push) Has been cancelled
Master / Triggered (FULL) (push) Has been cancelled
New upstream version 2.0pre9.2
2025-08-10 12:35:43 +02:00

97 lines
2.2 KiB
Python

def ds3_lock_concurrent(self, fstype):
testdir = self.mkworkdir('d')
self.mkfile("testit.bat", """\
d:
%s
c:\\lckconcn
rem end
""" % ("rem Internal share" if self.version == "FDPP kernel" else "c:\\share /L:1024"), newline="\r\n")
# compile sources
self.mkexe_with_djgpp("lckconcn", r"""
#include <dos.h>
#include <dir.h>
#include <fcntl.h>
#include <io.h>
#include <process.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define FNAME "FOO.DAT"
#define FDATA "0123456789abcdef"
int main(int argc, char *argv[]) {
int hnd1, i;
int ret, rc;
if (_dos_creatnew(FNAME, 0, &hnd1) != 0) {
printf("FAIL: File '%s' not created\n", FNAME);
return -1;
}
if (_dos_write(hnd1, FDATA, strlen(FDATA), &rc) != 0) {
printf("FAIL: File '%s' not written to\n", FNAME);
_dos_close(hnd1);
return -1;
}
// lock each byte, even past length
for (i=0; i < 1024; i++) {
ret = _dos_lock(hnd1, i, 1);
if (ret != 0) {
printf("FAIL: Could not get lock on file at '%d', error=%d\n", i, ret);
_dos_close(hnd1);
return -1;
}
}
printf("OKAY: Acquired %i locks on file\n", i);
// lock one more than share is configured for, should get error 36
ret = _dos_lock(hnd1, 1024, 1);
if (ret != 36) {
printf("FAIL: Was expecting error 36, got error=%d\n", ret);
_dos_unlock(hnd1, 0, 1025);
_dos_close(hnd1);
return -1;
}
printf("OKAY: Got expected lock error 36 on file\n");
// release each byte
for (i=0; i < 1024; i++) {
ret = _dos_unlock(hnd1, i, 1);
if (ret != 0) {
printf("FAIL: Could not release lock on file at '%d', error=%d\n", i, ret);
_dos_close(hnd1);
return -1;
}
}
printf("OKAY: Released %i locks on file\n", i);
_dos_close(hnd1);
printf("PASS:\n", i);
return 0;
}
""")
if fstype == "MFS":
config="""\
$_hdimage = "dXXXXs/c:hdtype1 dXXXXs/d:hdtype1 +1"
$_floppy_a = ""
$_file_lock_limit = (1024)
"""
else: # FAT
name = self.mkimage("12", cwd=testdir)
config="""\
$_hdimage = "dXXXXs/c:hdtype1 %s +1"
$_floppy_a = ""
""" % name
results = self.runDosemu("testit.bat", config=config)
self.assertNotIn("FAIL:", results)
self.assertIn("PASS:", results)