<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span lang=RO>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.<o:p></o:p></span></p><p class=MsoNormal><span lang=RO><o:p> </o:p></span></p><p class=MsoNormal><span lang=RO>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.</span></p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:olarupaulstelian97@gmail.com">Paul-Stelian Olaru</a><br><b>Sent: </b>Saturday, March 16, 2019 6:12 PM<br><b>To: </b><a href="mailto:molecula2788@gmail.com">Adrian Șendroiu</a>; <a href="mailto:so@cursuri.cs.pub.ro">Sisteme de Operare</a><br><b>Subject: </b>RE: [so] [SO][Tema 2][Linux]Inconsistență la codul de retur so_fclose()</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span lang=RO>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.<o:p></o:p></span></p><p class=MsoNormal><span lang=RO><o:p> </o:p></span></p><p class=MsoNormal><span lang=RO>La so_fclose eu apelez so_fflush(). Deci codul de eroare al lui fclose ar trebui să fie același cu al lui fflush?<o:p></o:p></span></p><p class=MsoNormal><span lang=RO><o:p> </o:p></span></p><p class=MsoNormal>[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.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:molecula2788@gmail.com">Adrian Șendroiu</a><br><b>Sent: </b>Saturday, March 16, 2019 6:06 PM<br><b>To: </b><a href="mailto:olarupaulstelian97@gmail.com">Paul-Stelian Olaru</a>; <a href="mailto:so@cursuri.cs.pub.ro">Sisteme de Operare</a><br><b>Subject: </b>Re: [so] [SO][Tema 2][Linux]Inconsistență la codul de retur so_fclose()<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On Sat, 16 Mar 2019 at 17:38, Paul-Stelian Olaru via so<o:p></o:p></p><p class=MsoNormal><so@cursuri.cs.pub.ro> wrote:<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> În cerință nu este foarte clar când ar trebui so_fclose(stream) să returneze 0 și când SO_EOF.<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Î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).<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> 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).<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>În principiu so_fclose întoarce SO_EOF dacă eșuează vreunul din<o:p></o:p></p><p class=MsoNormal>apelurile de sistem apelate mai departe de so_fclose.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>În cazul testelor ferror_read_small și ferror_read_large, eroarea<o:p></o:p></p><p class=MsoNormal>apare la apelul so_fread, care încearcă să facă read. La momentul<o:p></o:p></p><p class=MsoNormal>so_fclose, singurul apel de sistem care se mai face este close, care<o:p></o:p></p><p class=MsoNormal>nu întoarce nici o eroare.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>În schimb, la testul ferror_write_small, so_fwrite nu va face nici un<o:p></o:p></p><p class=MsoNormal>apel de sistem (totul e scris în buffer). Eroarea este prinsă abia la<o:p></o:p></p><p class=MsoNormal>so_fclose, care înainte de a închide fișierul va face și un so_fflush,<o:p></o:p></p><p class=MsoNormal>care la rândul lui va executa apelul de sistem write.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> 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.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Din ce văd, nu îți ajunge deloc în so_fflush ca să facă vreun write.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>