1 /* vi: set sw=4 ts=4: */ 2 /* 3 * Utility routines. 4 * 5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 */ 9 #include "libbb.h" 10 11 /* try to open up the specified device */ device_open(const char * device,int mode)12int FAST_FUNC device_open(const char *device, int mode) 13 { 14 int m, f, fd; 15 16 m = mode | O_NONBLOCK; 17 18 /* Retry up to 5 times */ 19 /* TODO: explain why it can't be considered insane */ 20 for (f = 0; f < 5; f++) { 21 fd = open(device, m, 0600); 22 if (fd >= 0) 23 break; 24 } 25 if (fd < 0) 26 return fd; 27 /* Reset original flags. */ 28 if (m != mode) 29 fcntl(fd, F_SETFL, mode); 30 return fd; 31 } 32