OpenSpec-Review dokumentieren und ISAM-Vertragsabweichungen beheben
This commit is contained in:
@@ -1283,6 +1283,9 @@ fn bi_open(
|
||||
let nummer = arg_i32(a, 1)?;
|
||||
let modus = fio::Modus::aus_text(&arg_str(a, 2)?).ok_or(RuntimeError::ILLEGAL_FUNCTION_CALL)?;
|
||||
let reclen = arg_i32(a, 3)?.max(1) as usize;
|
||||
if st.isam.ist_isam(nummer) {
|
||||
return Err(RuntimeError::FILE_ALREADY_OPEN);
|
||||
}
|
||||
st.dateien
|
||||
.oeffnen(nummer, &pfad, modus, reclen)
|
||||
.map(|_| None)
|
||||
@@ -1305,7 +1308,7 @@ fn bi_close_all(
|
||||
_: &mut dyn Host,
|
||||
_: &mut [Value],
|
||||
) -> Result<Option<Value>, RuntimeError> {
|
||||
st.isam.alles_schliessen();
|
||||
st.isam.bindungen_schliessen();
|
||||
st.dateien.alle_schliessen().map(|_| None)
|
||||
}
|
||||
|
||||
@@ -1427,7 +1430,10 @@ fn bi_freefile(
|
||||
_: &mut dyn Host,
|
||||
_: &mut [Value],
|
||||
) -> Result<Option<Value>, RuntimeError> {
|
||||
Ok(Some(Value::Int(st.dateien.freie_nummer() as i16)))
|
||||
let nummer = (st.dateien.freie_nummer()..=i16::MAX as i32)
|
||||
.find(|n| !st.dateien.ist_offen(*n) && !st.isam.ist_isam(*n))
|
||||
.ok_or(RuntimeError::TOO_MANY_FILES)?;
|
||||
Ok(Some(Value::Int(nummer as i16)))
|
||||
}
|
||||
|
||||
fn bi_fileattr(
|
||||
@@ -2410,6 +2416,9 @@ fn bi_isam_open(
|
||||
let tabelle = arg_str(a, 2)?;
|
||||
let spalten = arg_str(a, 3)?;
|
||||
let udt = arg_i32(a, 4)? as u16;
|
||||
if st.dateien.ist_offen(nummer) {
|
||||
return Err(RuntimeError::FILE_ALREADY_OPEN);
|
||||
}
|
||||
st.isam
|
||||
.oeffnen(nummer, &datenbank, &tabelle, &spalten, udt)
|
||||
.map(|_| None)
|
||||
|
||||
Reference in New Issue
Block a user