rpmmen -> patch zmieniajacy tablice struktur na tablice wskaznikow
Paweł Kołodziej
pawelk w pld.org.pl
Śro, 19 Maj 1999, 23:53:04 CEST
[poniedziałek, 17 maj 1999], Wojtek Bojdol napisał(a):
> daje w koncu ta late o ktorej mowilem ostatnio
> zmienia tablice struktur na tablice wskaznikow do struktur co zmniejsza
> uzycie realloc()a...
> do tego przy okazji dolaczylem poprawki na uzywanie malloc'a do paru
> zmiennych..:)
fajnie, ale mam kilka uwag.
> --- rpmmenlib/rpmmen.cold Fri May 14 19:56:50 1999
> +++ rpmmenlib/rpmmen.c Fri May 14 20:15:57 1999
> @@ -36,7 +36,7 @@
> static TPkgSet rpmmen_pkgs;
> */
>
> + dest=malloc(strlen(dest_));
> strcpy(dest, dest_);
Niestety jest to niepoprawne. Jeśli już przez malloc to:
dest=malloc(strlen(dest_)+1); ale i tak zmienie to na strdup :)
>
> - free(pkgs->packages);
> +/* free(pkgs->packages); */
A, tego nie rozmiem. Mógłbyś myjaśnić dlaczego to zakomentowałeś ?
> - strcpy(tmp, dest);
> - strcat(tmp, "/var");
> + char *tmp;
> + tmp=malloc(strlen(dest)+4+4+4+2);
??? te trzy czwórki to rozmumiem, ale ta dwójka ? IMHO tam powinno być
+4+4+4+1
> + sprintf(tmp,"%s/var");
o tym to już chyba pisał Jarek...
> +#define TPkgSetDefRoz 200
w wrsji final (o ile to przetrwa) trzeba będzie ustawić to gdzieś w
okoliczach 1200 :)
> +++ rpmmenlib/srcget.c Fri May 14 20:27:36 1999
> @@ -38,30 +38,33 @@
> */
> void addPackage(TPkgSet * pkgs, char *fname, Header * h)
> {
> - TPkgInfo *pk;
> + TPkgInfo **pk,*pktmp;
> int count, type;
> char *tmp2;
> - pk = (TPkgInfo *) realloc(pkgs->packages, \
> - sizeof(TPkgInfo) * (++(pkgs->numPackages)));
> - if (pk == NULL) {
> + if (pkgs->numPackages>TPkgSetDefRoz)
> + pk=realloc(pkgs->packages,pkgs->numPackages*sizeof(*pk));
podśwaidomie czuje, że pragnołeś napisać:
+ pk=realloc(pkgs->packages,(++pkgs->numPackages)*sizeof(*pk));
mam rację ? IMO inaczej to nie ma najmniejszego prawa działać (chyba że coś
przeoczyłem).
> @@ -99,7 +102,7 @@
> }
> pkgs = (TPkgSet *) malloc(sizeof(TPkgSet));
> pkgs->numPackages = 0;
> - pkgs->packages = NULL;
> +/* pkgs->packages = NULL; */
???? jesteś pewny poprawności powyższego ? Wedłóg mnie to w tej wersji tam
pownien być malloc. ? W konsekwencji tego co napisałeś pkgs->packages nie
jest nigdzie allokowane. A potem dla pierwszych 200 pakietów w addPackage()
jest:
pkgs->packages[pkgs->numPackages-1]=pktmp;
czyli pisanie do pamięci która nie zostałą _nigdzie_ przydzielona - IMO
powinien to być natychmiastowy SIGSEV.
PS. Od ponad 4 dni nie włączałęm komputera (ale za to dostałem dziś 5 z
fizyki na maturze ustnej[1]), a nie programowałęm od jeszcze dawniejszych
czasów, więc część z tego zo tu napisałęm może wogóle nietrzymać się kupy.
Jeśli tak[2] jest w istocie to proszę o zwrócenie mi uwagi na ten fakt :)
[1] - a co p pochwalę się :-)
[2] - jeśli nie to też.
--
Paweł Kołodziej
pawelk w pld.org.pl
http://www.ids.pl/~pkollegu <- tu jest PePeSza (automat dla tłumaczy .pot'ow)
Więcej informacji o liście dyskusyjnej pld-installer