12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <sys/types.h> 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <sys/stat.h> 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <stdio.h> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <stdlib.h> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <time.h> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <unistd.h> 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int main(int argc, char ** argv) { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int i = fork(); 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct stat ft; 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) time_t ct; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (i < 0) { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) printf("fork error"); 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 1; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (i > 0) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* child (daemon) continues */ 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int j; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (j = 0; j < sysconf(_SC_OPEN_MAX); j++) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) close(j); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setsid(); /* obtain a new process group */ 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (1) { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sleep(120); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) stat("/sdcard/host_heartbeat", &ft); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) time(&ct); 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ct - ft.st_mtime > 120) { 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* File was not touched for some time. */ 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch system("su -c reboot"); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 44