rpmmen -> patch zmieniajacy tablice struktur na tablice wskaznikow

Wojtek Bojdol wojboj w lp.net.pl
Czw, 20 Maj 1999, 15:31:47 CEST



On Wed, 19 May 1999, [iso-8859-2] Pawe=B3 Ko=B3odziej wrote:

> fajnie, ale mam kilka uwag.
>=20
> > --- rpmmenlib/rpmmen.cold=09Fri May 14 19:56:50 1999
> > +++ rpmmenlib/rpmmen.c=09Fri May 14 20:15:57 1999
> > @@ -36,7 +36,7 @@
> >     static TPkgSet rpmmen_pkgs;
> >   */
> > =20
> > +=09dest=3Dmalloc(strlen(dest_));
> >  =09strcpy(dest, dest_);
>=20
> Niestety jest to niepoprawne. Je=B6li ju=BF przez malloc to:
> dest=3Dmalloc(strlen(dest_)+1);  ale i tak zmienie to na strdup :)

oki..:) praca pozno w nocy nie poplaca...:)

>=20
> > =20
> > -=09free(pkgs->packages);
> > +/*=09free(pkgs->packages); */
>=20
> A, tego nie rozmiem. M=F3g=B3by=B6 myja=B6ni=E6 dlaczego to zakomentowa=
=B3e=B6 ?

pkgs->packages bylo deklarowane jako tablica (costam *packages[cyfra])
wskaznikow, a wiec przy allokacji calej struktury allokowana jest takze ta
tablica
jej deallokacja bedzie przy deallokacji tej struktury

> =20
> > -=09strcpy(tmp, dest);
> > -=09strcat(tmp, "/var");
> > +=09char *tmp;
> > +=09tmp=3Dmalloc(strlen(dest)+4+4+4+2);
>=20
> ??? te trzy czw=F3rki to rozmumiem, ale ta dw=F3jka ? IMHO tam powinno by=
=E6
> +4+4+4+1

marooodzisz...:) o jeden za duzo i juz sie rzucasz..:)

> > +#define TPkgSetDefRoz 200
>=20
> w wrsji final (o ile to przetrwa) trzeba b=EAdzie ustawi=E6 to gdzie=B6 w
> okoliczach 1200 :)

hmm....jak na razie pld az tyle pakietow nie ma chyba...:)

>=20
> > +++ rpmmenlib/srcget.c=09Fri May 14 20:27:36 1999
> > @@ -38,30 +38,33 @@
> >   */
> >  void addPackage(TPkgSet * pkgs, char *fname, Header * h)
> >  {
> > -=09TPkgInfo *pk;
> > +=09TPkgInfo **pk,*pktmp;
> >  =09int count, type;
> >  =09char *tmp2;
> > -=09pk =3D (TPkgInfo *) realloc(pkgs->packages, \
> > -=09=09=09     sizeof(TPkgInfo) * (++(pkgs->numPackages)));
> > -=09if (pk =3D=3D NULL) {
> > +=09if (pkgs->numPackages>TPkgSetDefRoz)
> > +=09=09pk=3Drealloc(pkgs->packages,pkgs->numPackages*sizeof(*pk));
>=20
> pod=B6waidomie czuje, =BFe pragno=B3e=B6 napisa=E6:
>  +=09=09pk=3Drealloc(pkgs->packages,(++pkgs->numPackages)*sizeof(*pk));
> mam racj=EA ? IMO inaczej to nie ma najmniejszego prawa dzia=B3a=E6 (chyb=
a =BFe co=B6
> przeoczy=B3em).

ee...pragnalem napisac:
+  if ((++(pkgs->numPackages))>TPkgSetDefRoz)
:))

>=20
> > @@ -99,7 +102,7 @@
> >  =09}
> >  =09pkgs =3D (TPkgSet *) malloc(sizeof(TPkgSet));
> >  =09pkgs->numPackages =3D 0;
> > -=09pkgs->packages =3D NULL;
> > +/*=09pkgs->packages =3D NULL; */
>=20
> ???? jeste=B6 pewny poprawno=B6ci powy=BFszego ? Wed=B3=F3g mnie to w tej=
 wersji tam
> pownien by=E6 malloc. ? W konsekwencji tego co napisa=B3e=B6  pkgs->packa=
ges nie
> jest nigdzie allokowane. A potem dla pierwszych 200 pakiet=F3w w addPacka=
ge()=20
> jest:
> pkgs->packages[pkgs->numPackages-1]=3Dpktmp;
> czyli pisanie do pami=EAci kt=F3ra nie zosta=B3=B1 _nigdzie_ przydzielona=
 - IMO
> powinien to by=E6 natychmiastowy SIGSEV.

opis tego dalem troche wyzej
to co mowisz byloby w przypadku deklaracji:
costam **packages;

> PS. Od ponad 4 dni nie w=B3=B1cza=B3=EAm komputera (ale za to dosta=B3em =
dzi=B6 5 z
> fizyki na maturze ustnej[1]), a nie programowa=B3=EAm od jeszcze dawniejs=
zych
> czas=F3w, wi=EAc cz=EA=B6=E6 z tego zo tu napisa=B3=EAm mo=BFe wog=F3le n=
ietrzyma=E6 si=EA kupy.
> Je=B6li tak[2] jest w istocie to prosz=EA o zwr=F3cenie mi uwagi na ten f=
akt :)

:))
kazdy sie moze mylic...(ja to niestety czesto robie)




Więcej informacji o liście dyskusyjnej pld-installer