On Wed, 2004-12-01 at 05:18 -0500, DK wrote:
> 
> --- "Malita, Florin" <[EMAIL PROTECTED]> 
> wrote:
> 
> > Din pacate env["_"] nu contine calea 
> > absoluta/completa asa cum vrea omul 
> > ci acelasi lucru ca si argv[0]: 
> >  
> > [EMAIL PROTECTED] ~]# cd /bin && ./awk 'BEGIN {print 
> > ENVIRON["_"]}' 
> > ./awk 
> > 
> 
> niciodata sa nu te bazezi pe variabilele de env. Pot 
> fi controlate de user.
exact, mai mult variabila respectiva e setata de bash deci daca executi
programul pe alta cale o sa fie aiurea.

> > Mai gasesti informatia respectiva in /proc/self/maps 
> > dar e mai incalcit 
> > de extras si nu prea are sens. 
> >  
> > Cel mai simplu e un readlink("/proc/self/exe"...) 
> > dar daca iti pasa de 
> > portabilitate probabil merita sa "muncesti" un pic 
> > cu getcwd() & argv 
> > [0]. 
> >  
> getcwd se bazeaza pe un syscall, iar cand acesta nu 
> este available citeste /proc/self/cwd.
> 
> Pe argv[0] sa nu te bazezi niciodata, ca si asta poate 
> fi controlat de user (si poate fi facut NULL !!!).
ehehe, daca o dam pe paranoia atunci nu te mai poti baza pe nimic: ce te
faci daca-ti montez "ce vrea muschii mei" pe /proc/self inainte sa execv
programul cu arg[0] = /bin/muahaha? varza totala :)

dar cred ca intrebarea nu avea tenta defensiva ci de portabilitate
(portabilitate UNIX :P ).

> Mini-challenge:
> 
> int main(int argc, char** argv) { 
>    if (argc == 0) printf ("You won!\n"); 
>     else printf ("You loose!\n"); 
>   return EXIT_SUCCESS; 
> }
> 
> Cu alte cuvinte getcwd nu este portabil.
??

man getcwd
...
CONFORMING TO
       POSIX.1


>  Singura 
> solutie admisibila: 
> #if defined _WIN32 
>   .... ::GetWorkingDirectory() ... 
> #elsif defined _LINUX 
>   .... getcwd() .... 
> #end
:) admisibila unde, in taberele de info microsoft? eu ma refeream la
portabilitate UNIX. daca vrei portabilitate WIN32 esti in plop anyway,
mai bine folosesti cygwin sau ceva cross-platform toolkit (QT?).

> 
> 
> Best regards, 
> DK
cheers


--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui