[rpm] sypie sie i nie kumam...

Paweł Sikora pluto w ds14.agh.edu.pl
Pon, 29 Mar 2004, 12:25:00 CEST


On Mon, 29 Mar 2004, Andrzej Krzysztofowicz wrote:

> =?ISO-8859-2?Q?Pawe=B3_Sikora?= wrote:
> > mamy taki oto fragment kodu...
> >
> > [rpm/lib/rpmrc.c]
> >
> > static void defaultMachine(const char ** arch, const char ** os)
> > {
> >     static struct utsname un;
> >
> > (...)
> >
> >     }
> >
> > // tu moje debugi (puts&printf)
> > puts("#x");
> > printf("un.machine = %s, un.sysname = %s\n", un.machine, un.sysname);
> > printf("arch_ptr = %08x, os_ptr = %08x\n", arch, os);
> > printf("*arch = %08x\n", *arch);
> > printf("*os = %08x\n", *os);
> >
> >     if (arch) *arch = un.machine;
> >     if (os) *os = un.sysname;
> >
> > puts("#y");
> > }
> >
> > i fragment, ktory wysypuje program.
> >
> > (
> > [~/rpm/BUILD/rpm-4.3] # ./rpm
> > call#2
> > #x
> > un.machine = i686, un.sysname = Linux
> > arch_ptr = 756e6547, os_ptr = bfffe1f8
> > Naruszenie ochrony pamięci
> > )
> >
> > void rpmSetMachine(const char * arch, const char * os)
> >         /*@globals current @*/
> >         /*@modifies current @*/
> > {
> > //    const char * host_cpu, * host_os;
> >     char * host_cpu, * host_os;
> > puts("call#2");
> >     defaultMachine(&host_cpu, &host_os);
>
> A gdzie jest robiony malloc() pamieci dla zapisywanych danych ?

nie jest i nie musi byc, bo defaultMachine zwraca wskaznik
przez wskaznik do pola statycznej struktury :)



Więcej informacji o liście dyskusyjnej pld-devel-pl