Hi,
Do we really need a fineness c program to make symbol link? In redhat-lsb.spec, we can see:
gcc $RPM_OPT_FLAGS -Os -static -fno-stack-protector -o
redhat_lsb_trigger{.%{_target_cpu},.c} -DLSBSOVER='"%{lsbsover}"' \
  -DLDSO='"%{ldso}"' -DLSBLDSO='"/%{_lib}/%{lsbldso}"' -D_GNU_SOURCE
install -m 700 redhat_lsb_trigger.%{_target_cpu} \
  $RPM_BUILD_ROOT%{_sbindir}/redhat_lsb_trigger.%{_target_cpu}

%triggerpostun -- glibc
if [ -x /usr/sbin/redhat_lsb_trigger.%{_target_cpu} ]; then
  /usr/sbin/redhat_lsb_trigger.%{_target_cpu}
fi

And in redhat_lsb_trigger.c, the main function is as follows:

int main (int argc, char **argv)
{
/* redhat_lsb_trigger.c:428: warning: unused variable 'ret' */
/*  long ret; */
  INTERNAL_SYSCALL_DECL (err);
  char lsbsover[] = LSBSOVER;
  char *LSBVER, *p = lsbsover;
  while ((LSBVER = strtok (p, " \t")) != NULL)
    {
      char buf[sizeof LSBLDSO + 1 + strlen (LSBVER)];
      p = buf;
      p = mempcpy (p, LSBLDSO, sizeof LSBLDSO - 1);
      *p++ = '.';
      strcpy (p, LSBVER);
      if (is_ia64 ())
INTERNAL_SYSCALL (symlink, err, 2, "/emul/ia32-linux/lib/" LDSO, buf);
      else
        INTERNAL_SYSCALL (symlink, err, 2, LDSO, buf);
      p = NULL;
    }
  INTERNAL_SYSCALL (exit, err, 1, 0);
  return 110;
}

Why need we use a manually c program, not sln command? We can copy a copy of sln, so we can use it even when glibc is removed.

Why?

Thanks alot
xning
--
devel mailing list
devel@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/devel

Reply via email to