The PS3 bootloader spec allows several kboot.conf file names.
Add a loop in the parser to check for all of them.
Also, print some diagnostic messages to the log file and change
the parser routine name from 'parser' to 'kboot_parser'
to give a better log file output.
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-static int parse(struct discover_context *ctx)
+static int kboot_parse(struct discover_context *ctx)
+ static const char *const conf_names[] = {
+ "/etc/kboot.conf",
+ "/etc/kboot.cnf",
+ };
struct kboot_context *kboot_ctx;
struct kboot_context *kboot_ctx;
struct stat stat;
rc = 0;
struct stat stat;
rc = 0;
kboot_ctx = talloc_zero(ctx, struct kboot_context);
kboot_ctx->discover = ctx;
kboot_ctx = talloc_zero(ctx, struct kboot_context);
kboot_ctx->discover = ctx;
- filepath = resolve_path(kboot_ctx, "/etc/kboot.conf", ctx->device_path);
+ for (i = 0, len = 0; i < sizeof(conf_names) / sizeof(conf_names[0]);
+ i++) {
+ char *filepath = resolve_path(kboot_ctx, conf_names[i],
+ ctx->device_path);
- fd = open(filepath, O_RDONLY);
- if (fd < 0)
- goto out;
+ pb_log("%s: try: %s\n", __func__, filepath);
- if (fstat(fd, &stat))
- goto out;
+ fd = open(filepath, O_RDONLY);
+ if (fd < 0) {
+ pb_log("%s: open failed: %s : %s\n", __func__, filepath,
+ strerror(errno));
+ continue;
+ }
+ if (fstat(fd, &stat)) {
+ pb_log("%s: fstat failed: %s : %s\n", __func__,
+ filepath, strerror(errno));
+ continue;
+ }
- kboot_ctx->buf = talloc_array(kboot_ctx, char, stat.st_size + 1);
+ kboot_ctx->buf = talloc_array(kboot_ctx, char,
+ stat.st_size + 1);
- len = read(fd, kboot_ctx->buf, stat.st_size);
- if (len < 0)
+ len = read(fd, kboot_ctx->buf, stat.st_size);
+ if (len < 0) {
+ pb_log("%s: read failed: %s : %s\n", __func__, filepath,
+ strerror(errno));
+ continue;
+ }
+ kboot_ctx->buf[len] = 0;
+ }
+
+ if (len <= 0)
- kboot_ctx->buf[len] = 0;
if (!ctx->device->icon_file)
ctx->device->icon_file = talloc_strdup(ctx,
if (!ctx->device->icon_file)
ctx->device->icon_file = talloc_strdup(ctx,
+ pb_log("%s: %s\n", __func__, (rc ? "ok" : "failed"));
+
if (fd >= 0)
close(fd);
talloc_free(kboot_ctx);
return rc;
}
if (fd >= 0)
close(fd);
talloc_free(kboot_ctx);
return rc;
}
-define_parser(kboot, 98, parse);
+define_parser(kboot, 98, kboot_parse);