diff options
Diffstat (limited to 'util/ieee1275/devicemap.c')
-rw-r--r-- | util/ieee1275/devicemap.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/util/ieee1275/devicemap.c b/util/ieee1275/devicemap.c new file mode 100644 index 0000000..19ab746 --- /dev/null +++ b/util/ieee1275/devicemap.c @@ -0,0 +1,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); +} |