Пример #1
0
/* Read the file crypto.lst for auto-loading.  */
void
read_crypto_list (const char *prefix)
{
  char *filename;
  grub_file_t file;
  char *buf = NULL;

  if (!prefix)
    {
      grub_errno = GRUB_ERR_NONE;
      return;
    }
  
  filename = grub_xasprintf ("%s/" GRUB_TARGET_CPU "-" GRUB_PLATFORM
			     "/crypto.lst", prefix);
  if (!filename)
    {
      grub_errno = GRUB_ERR_NONE;
      return;
    }

  file = grub_file_open (filename);
  grub_free (filename);
  if (!file)
    {
      grub_errno = GRUB_ERR_NONE;
      return;
    }

  /* Override previous crypto.lst.  */
  grub_crypto_spec_free ();

  for (;; grub_free (buf))
    {
      char *p, *name;
      struct load_spec *cur;
      
      buf = grub_file_getline (file);
	
      if (! buf)
	break;
      
      name = buf;
      while (grub_isspace (name[0]))
	name++;

      p = grub_strchr (name, ':');
      if (! p)
	continue;
      
      *p = '\0';
      p++;
      while (*p == ' ' || *p == '\t')
	p++;

      cur = grub_malloc (sizeof (*cur));
      if (!cur)
	{
	  grub_errno = GRUB_ERR_NONE;
	  continue;
	}
      
      cur->name = grub_strdup (name);
      if (! name)
	{
	  grub_errno = GRUB_ERR_NONE;
	  grub_free (cur);
	  continue;
	}
	
      cur->modname = grub_strdup (p);
      if (! cur->modname)
	{
	  grub_errno = GRUB_ERR_NONE;
	  grub_free (cur);
	  grub_free (cur->name);
	  continue;
	}
      cur->next = crypto_specs;
      crypto_specs = cur;
    }
  
  grub_file_close (file);

  grub_errno = GRUB_ERR_NONE;

  grub_crypto_autoload_hook = grub_crypto_autoload;
}
Пример #2
0
/* Read the file crypto.lst for auto-loading.  */
void
read_crypto_list (void)
{
    const char *prefix;
    char *filename;
    grub_file_t file;
    char *buf = NULL;

    prefix = grub_env_get ("prefix");
    if (!prefix)
    {
        grub_errno = GRUB_ERR_NONE;
        return;
    }

    filename = grub_xasprintf ("%s/crypto.lst", prefix);
    if (!filename)
    {
        grub_errno = GRUB_ERR_NONE;
        return;
    }

    file = grub_file_open (filename);
    grub_free (filename);
    if (!file)
    {
        grub_errno = GRUB_ERR_NONE;
        return;
    }

    /* Override previous crypto.lst.  */
    grub_crypto_spec_free ();

    for (;; grub_free (buf))
    {
        char *p, *name;
        struct load_spec *cur;

        buf = grub_file_getline (file);

        if (! buf)
            break;

        name = buf;

        p = grub_strchr (name, ':');
        if (! p)
            continue;

        *p = '\0';
        while (*++p == ' ')
            ;

        cur = grub_malloc (sizeof (*cur));
        if (!cur)
        {
            grub_errno = GRUB_ERR_NONE;
            continue;
        }

        cur->name = grub_strdup (name);
        if (! name)
        {
            grub_errno = GRUB_ERR_NONE;
            grub_free (cur);
            continue;
        }

        cur->modname = grub_strdup (p);
        if (! cur->modname)
        {
            grub_errno = GRUB_ERR_NONE;
            grub_free (cur);
            grub_free (cur->name);
            continue;
        }
        cur->next = crypto_specs;
        crypto_specs = cur;
    }

    grub_file_close (file);

    grub_errno = GRUB_ERR_NONE;

    grub_crypto_autoload_hook = grub_crypto_autoload;
}