[rpm] sypie sie i nie kumam...

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


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);

i teraz pytanie: WTF ?
przeciez adresy wskaznikow sa przekazywane prawidlowo
i ich ustawienie w defaultMachine, tez jest zgodne z zasadami sztuki.



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