[devel] Re: I: Sisyphus base build system freeze plans

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Ср Апр 28 16:33:31 MSD 2004


On Wed, Apr 28, 2004 at 03:35:07PM +0400, Dmitry V. Levin wrote:
[...]
> > @@ -770,10 +790,27 @@ search_dir (const struct dir_entry *entr
> >           continue;
> >         }
> >  
> > +
> > +      /* A link may just point to itself.  */
> > +      if (is_link)
> > +       {
> > +         /* If the path the link points to isn't its soname and it is not
> > +            .so symlink for ld(1) only, we treat it as a normal file.  */
> > +         const char *real_base_name = basename (real_file_name);
> > +
> > +         if (strcmp (real_base_name, soname) != 0)
> > +           {
> > +             len = strlen (real_base_name);
> > +             if (len < strlen (".so")
> > +                 || strcmp (real_base_name + len - strlen (".so"), ".so") != 0
> > +                 || strncmp (real_base_name, soname, len) != 0)
> > +               is_link = 0;
> > +           }
> > +        }
> > +
> >        if (real_name != real_file_name)
> >         free (real_name);
> >  
> > -      /* Links will just point to itself.  */
> >        if (is_link)
> >         {
> >           free (soname);
> > 
> > libMesaGL.so - это тоже ссылка (на libGL.so.1.4.501).  Судя по
> > комментарию, такая ссылка должна была бы игнорироваться, но на самом
> > деле этого не происходит из-за третьей части написанного здесь условия
> > (strncmp (real_base_name, soname, len) != 0).
> 
> По идее автора этого изменения, ссылка libMesaGL.so должна игнорироваться
> только в случае, если она ссылается на libMesaGL.so.*

Там всё ещё страннее - похоже, readlink() там нигде не вызывается,
поэтому real_file_name - это имя самой ссылки, а не то, на что она
показывает.  Т.е., любая ссылка, имя которой не совпадает с soname,
и при этом не заканчивается на ".so" _или_ не начинается с soname,
будет считаться обычным файлом библиотеки (вне зависимости от того,
куда эта ссылка показывает).

Первые две проверки (на полное совпадение с soname и на *.so) мне
понятны.  А вот третья выглядит как-то странно.  Возможно,
подразумевалось что-то такое:

--- glibc-2.3.3-200404190147/elf/ldconfig.c.alt-ldconfig-links	2004-04-28 15:48:26 +0400
+++ glibc-2.3.3-200404190147/elf/ldconfig.c	2004-04-28 16:25:53 +0400
@@ -801,9 +801,9 @@ search_dir (const struct dir_entry *entr
 	  if (strcmp (real_base_name, soname) != 0)
 	    {
 	      len = strlen (real_base_name);
-	      if (len < strlen (".so")
-		  || strcmp (real_base_name + len - strlen (".so"), ".so") != 0
-		  || strncmp (real_base_name, soname, len) != 0)
+	      if ((len < strlen (".so")
+		   || strcmp (real_base_name + len - strlen (".so"), ".so") != 0)
+		  && strncmp (real_base_name, soname, len) != 0)
 		is_link = 0;
 	    }
         }

Хотя всё равно непонятно, зачем это нужно.  Чтение ChangeLog
ситуацию особо не проясняет:

2003-08-26  Jakub Jelinek  <jakub на redhat.com>

	* elf/ldconfig.c (search_dir): When checking for GNU-style .so
	link file use the real file name, not the resolved name we got by
	following the symlinks.

2003-08-25  Jakub Jelinek  <jakub на redhat.com>

	* elf/ldconfig.c (search_dir): Treat symlink as regular file
	if it won't point to itself unless it is .so symlink for the linker.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20040428/228b5fff/attachment-0001.bin>


Подробная информация о списке рассылки Devel