Uhhhhhh, deci avem și caracterul 0xFF. Care ca (char) devine -1. Care e egal cu 
SO_EOF. Care cauzează o terminare prematură a lui so_fwrite.

Mda. Am schimbat castul să nu mai fie la (char) ci la (unsigned char). Now it 
works. Acuma testele vor reveni, după ce scot printurile de debug. Voi face 
upload pe VMchecker în curând.

From: Paul-Stelian Olaru
Sent: Saturday, March 16, 2019 6:12 PM
To: Adrian Șendroiu; Sisteme de Operare
Subject: RE: [so] [SO][Tema 2][Linux]Inconsistență la codul de retur so_fclose()

Am observat că la testul 13 îmi rulează doar de 56 de ori so_fputc. Aparent, 
este consistent cu eroarea raportată de testul următor. Voi investiga mai 
departe.

La so_fclose eu apelez so_fflush(). Deci codul de eroare al lui fclose ar 
trebui să fie același cu al lui fflush?

[Oh well, se pare că am reușit cu asta. Deci da, dacă eșuează ori fflush ori 
close/CloseHandle returnez eroare; nu-mi pasă de ferror]. Voi investiga mai 
departe ce se întâmplă pe testele 13 și 14, de ce pun doar 56 de caractere în 
loc de numărul corect. Dacă nu dau de cap, revin cu alt topic.

From: Adrian Șendroiu
Sent: Saturday, March 16, 2019 6:06 PM
To: Paul-Stelian Olaru; Sisteme de Operare
Subject: Re: [so] [SO][Tema 2][Linux]Inconsistență la codul de retur so_fclose()

On Sat, 16 Mar 2019 at 17:38, Paul-Stelian Olaru via so
<so@cursuri.cs.pub.ro> wrote:
>
> În cerință nu este foarte clar când ar trebui so_fclose(stream) să returneze 
> 0 și când SO_EOF.
>
>
>
> În teste, văd că după o eroare la fgetc/fread ar trebui să returneze 0 și 
> după o eroare la fputc/fwrite ar trebui SO_EOF. Deci codul de retur bănuiesc 
> că nu depinde de so_feof(stream).
>
>
>
> Când mă folosesc de codul de eroare, pică testele pe fread. Când nu mă 
> folosesc de codul de eroare, pică testul pe write_small (got 0, expected -1).

În principiu so_fclose întoarce SO_EOF dacă eșuează vreunul din
apelurile de sistem apelate mai departe de so_fclose.

În cazul testelor ferror_read_small și ferror_read_large, eroarea
apare la apelul so_fread, care încearcă să facă read. La momentul
so_fclose, singurul apel de sistem care se mai face este close, care
nu întoarce nici o eroare.

În schimb, la testul ferror_write_small, so_fwrite nu va face nici un
apel de sistem (totul e scris în buffer). Eroarea este prinsă abia la
so_fclose, care înainte de a închide fișierul va face și un so_fflush,
care la rândul lui va executa apelul de sistem write.

> Also, testul 13 [test_fwrite_huge] spune că am 0 apeluri de sistem write (mă 
> rog, spune read dar hook-ul cred că e pentru write). O să mai fac verificări 
> dar dacă nu rezolv cu asta revin cu un topic separat. Problema este vizibilă 
> și în ce am momentan pe repo și cred că și în cel mai recent upload de pe 
> VMchecker.

Din ce văd, nu îți ajunge deloc în so_fflush ca să facă vreun write.


_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui