X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fuser-event.c;h=69defa34e341b22a9441b4b233f39d7b532eaa94;hp=dc671d948fb04aa28c80c56caabebda01da3d0f4;hb=6bb1301835dbd6ff54e1becb5b684fedb0e4caaf;hpb=6d05fe798a06ba93418a1f8517e8f30cadcfd5e4 diff --git a/discover/user-event.c b/discover/user-event.c index dc671d9..69defa3 100644 --- a/discover/user-event.c +++ b/discover/user-event.c @@ -54,6 +54,8 @@ static const char *event_action_name(enum event_action action) return "add"; case EVENT_ACTION_REMOVE: return "remove"; + case EVENT_ACTION_URL: + return "url"; case EVENT_ACTION_DHCP: return "dhcp"; default: @@ -208,7 +210,7 @@ static char *parse_mac_addr(struct discover_context *ctx, const char *mac) mac_addr_arr + 2, mac_addr_arr + 3, mac_addr_arr + 4, mac_addr_arr + 5); - mac_addr = talloc_asprintf(ctx, "01-%02X-%02X-%02X-%02X-%02X-%02X", + mac_addr = talloc_asprintf(ctx, "01-%02x-%02x-%02x-%02x-%02x-%02x", mac_addr_arr[0], mac_addr_arr[1], mac_addr_arr[2], mac_addr_arr[3], mac_addr_arr[4], mac_addr_arr[5]); @@ -290,8 +292,9 @@ struct pb_url *user_event_parse_conf_url(struct discover_context *ctx, /* strip filename from the bootfile path, leaving only a * directory */ p = strrchr(basedir, '/'); - if (p) - *p = '\0'; + if (!p) + p = basedir; + *p = '\0'; if (strlen(basedir)) url_str = talloc_asprintf_append(url_str, "%s/", @@ -429,6 +432,18 @@ static int user_event_remove(struct user_event *uev, struct event *event) return 0; } +static int user_event_url(struct user_event *uev, struct event *event) +{ + struct device_handler *handler = uev->handler; + const char *url; + + url = event_get_param(event, "url"); + if (url) + device_handler_process_url(handler, url); + + return 0; +} + static void user_event_handle_message(struct user_event *uev, char *buf, int len) { @@ -452,6 +467,9 @@ static void user_event_handle_message(struct user_event *uev, char *buf, case EVENT_ACTION_REMOVE: result = user_event_remove(uev, event); break; + case EVENT_ACTION_URL: + result = user_event_url(uev, event); + break; case EVENT_ACTION_CONF: result = user_event_conf(uev, event); break; @@ -504,15 +522,15 @@ static int user_event_destructor(void *arg) return 0; } -struct user_event *user_event_init(struct waitset *waitset, - struct device_handler *handler) +struct user_event *user_event_init(struct device_handler *handler, + struct waitset *waitset) { struct sockaddr_un addr; struct user_event *uev; unlink(PBOOT_USER_EVENT_SOCKET); - uev = talloc(NULL, struct user_event); + uev = talloc(handler, struct user_event); uev->handler = handler; @@ -545,8 +563,3 @@ out_err: talloc_free(uev); return NULL; } - -void user_event_destroy(struct user_event *uev) -{ - talloc_free(uev); -}