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