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 10#include "libbb.h" 11 12/* try to open up the specified device */ 13int FAST_FUNC device_open(const char *device, int mode) 14{ 15 int m, f, fd; 16 17 m = mode | O_NONBLOCK; 18 19 /* Retry up to 5 times */ 20 /* TODO: explain why it can't be considered insane */ 21 for (f = 0; f < 5; f++) { 22 fd = open(device, m, 0600); 23 if (fd >= 0) 24 break; 25 } 26 if (fd < 0) 27 return fd; 28 /* Reset original flags. */ 29 if (m != mode) 30 fcntl(fd, F_SETFL, mode); 31 return fd; 32} 33