ueventd.c revision f83d0b9af5cbe4440cc41ceaa8a7806a13c86282
1f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross/*
2f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * Copyright (C) 2010 The Android Open Source Project
3f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross *
4f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * Licensed under the Apache License, Version 2.0 (the "License");
5f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * you may not use this file except in compliance with the License.
6f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * You may obtain a copy of the License at
7f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross *
8f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross *      http://www.apache.org/licenses/LICENSE-2.0
9f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross *
10f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * Unless required by applicable law or agreed to in writing, software
11f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * distributed under the License is distributed on an "AS IS" BASIS,
12f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * See the License for the specific language governing permissions and
14f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross * limitations under the License.
15f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross */
16f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
17f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross#include <poll.h>
18f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
19f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross#include "ueventd.h"
20f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross#include "log.h"
21f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross#include "util.h"
22f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross#include "devices.h"
23f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
24f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Crossint ueventd_main(int argc, char **argv)
25f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross{
26f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    struct pollfd ufd;
27f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    int nr;
28f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
29f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    open_devnull_stdio();
30f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    log_init();
31f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
32f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    INFO("starting ueventd\n");
33f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
34f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    device_init();
35f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
36f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    ufd.events = POLLIN;
37f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    ufd.fd = get_device_fd();
38f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross
39f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    while(1) {
40f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross        ufd.revents = 0;
41f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross        nr = poll(&ufd, 1, -1);
42f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross        if (nr <= 0)
43f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross            continue;
44f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross        if (ufd.revents == POLLIN)
45f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross               handle_device_fd();
46f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross    }
47f83d0b9af5cbe4440cc41ceaa8a7806a13c86282Colin Cross}
48