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/