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