[so] robocheck issues + rugaminte

Bogdan Luca so@cursuri.cs.pub.ro
Mon, 08 Nov 2004 00:19:33 +0200


Salut,

Am sesizat doua mici probleme cu robocheck-ul, si ma intrebam daca 
exista si alte workaround-uri pentru ele:
1. nu recunoaste 'calloc()' (desi face parte din standardul ANSI-C); 
workaround-ul a fost sa folosesc 'malloc()'+'memset()';
2. in momentul in care lansez o comanda cu stdin-ul redirectat (de 
exemplu; acelasi lucru se intampla si pentru std[out|err]) deschid 
fisierul din care se face redirectarea ('fd = open();'), fac un 'fork()' 
si din child (incerc sa) fac 'close(0); dup2(fd, 0);'; problema e ca in 
momentul in care incerc sa fac 'close()'-ul robocheck-ul da un segfault:
----
...
Core was generated by `./shell'.
Program terminated with signal 11, Segmentation fault.
...
(gdb) bt
...
#5  0xb7ff79e2 in robocheck_release_resource () from 
/usr/lib/librobocheck.so
#6  0xb7ff7b78 in robocheck_close () from /usr/lib/librobocheck.so
#7  0x0804ac91 in exec_command_exec_cmd (exec_command=0xb7fd7fd8, 
cmd=0xb7fd4fd8) at exec.c:293
...
#10 0x0804b367 in main () at main.c:121
----
(probabil din cauza ca il 'deranjeaza' faptul ca incerc sa inchid fd-ul 
0 fara sa-l fi deschis in prealabil); workaround-ul a fost sa renunt la 
'close()', fd-ul 0 fiind inchis oricum de 'dup2()' (desi in pagina de 
manual a lui 'dup2()' zice, citez:
----
        If newfd was open, any errors that would have been reported at 
close() time,  are lost. A careful programmer will not use dup2 without 
closing newfd first.
----
).

Ar mai fi o rugaminte (si probabil ca aici sunt in asentimentul 
colegilor mei): avand in vedere ca au fost cateva probleme cu tema 1 
(modificarea parser-ului, integrarea robocheck-ului), s-ar putea amana 
deadline-ul, daca nu cu 24 de ore, macar cu 12?

Multumesc anticipat,
Bogdan Luca
345CA