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 tarball for details. 8 */ 9 10#include "libbb.h" 11 12/* try to open up the specified device */ 13int device_open(const char *device, int mode) 14{ 15 int m, f, fd = -1; 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 if ((fd = open(device, m, 0600)) >= 0) 23 break; 24 if (fd < 0) 25 return fd; 26 /* Reset original flags. */ 27 if (m != mode) 28 fcntl(fd, F_SETFL, mode); 29 return fd; 30} 31