From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 28 Apr 2004 16:33:31 +0400 From: Sergey Vlasov To: ALT Devel discussion list Subject: Re: [devel] Re: I: Sisyphus base build system freeze plans Message-ID: <20040428123331.GA9063@master.mivlgu.local> Mail-Followup-To: ALT Devel discussion list References: <20040426133654.GA30080@basalt.office.altlinux.org> <408E1EA7.7060302@altlinux.ru> <20040427092601.GB26609@osdn.org.ua> <20040427103429.GA15569@master.mivlgu.local> <20040427105421.GC21443@basalt.office.altlinux.org> <20040428055537.GA2462@sirius.home> <20040428113507.GH25131@basalt.office.altlinux.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="bp/iNruPH9dso1Pn" Content-Disposition: inline In-Reply-To: <20040428113507.GH25131@basalt.office.altlinux.org> X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.1.4 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Apr 2004 12:33:32 -0000 Archived-At: List-Archive: List-Post: --bp/iNruPH9dso1Pn Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit 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 * 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 * 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. --bp/iNruPH9dso1Pn Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQFAj6SbW82GfkQfsqIRApVpAJ9xOCST+uX6qK7y4L49rMdia13CVwCfYX82 xFidHEXJYHosua+lEAJtRY4= =CdUg -----END PGP SIGNATURE----- --bp/iNruPH9dso1Pn--