aboutsummaryrefslogtreecommitdiffstats
path: root/util/ieee1275/devicemap.c
blob: 19ab746effd04385d64c7ccba77eea3a714cc70b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <string.h>
#include <grub/types.h>
#include <grub/util/deviceiter.h>
#include <grub/util/ofpath.h>
#include <grub/util/misc.h>

/* Since OF path names can have "," characters in them, and GRUB
   internally uses "," to indicate partitions (unlike OF which uses
   ":" for this purpose) we escape such commas.  */

static char *
escape_of_path (const char *orig_path)
{
  char *new_path, *d, c;
  const char *p;

  if (!strchr (orig_path, ','))
    return (char *) orig_path;

  new_path = xmalloc (strlen (orig_path) * 2);

  p = orig_path;
  d = new_path;
  while ((c = *p++) != '\0')
    {
      if (c == ',')
	*d++ = '\\';
      *d++ = c;
    }

  free ((char *) orig_path);

  return new_path;
}

void
grub_util_emit_devicemap_entry (FILE *fp, char *name,
				int is_floppy __attribute__((unused)),
				int *num_fd __attribute__((unused)),
				int *num_hd __attribute__((unused)))
{
  const char *orig_path = grub_util_devname_to_ofpath (name);
  char *ofpath = escape_of_path (orig_path);

  fprintf(fp, "(%s)\t%s\n", ofpath, name);

  free (ofpath);
}