/* vi: set sw=4 ts=4: */ | |
/* | |
* Utility routines. | |
* | |
* Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> | |
* | |
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | |
*/ | |
#include "libbb.h" | |
/* try to open up the specified device */ | |
int FAST_FUNC device_open(const char *device, int mode) | |
{ | |
int m, f, fd; | |
m = mode | O_NONBLOCK; | |
/* Retry up to 5 times */ | |
/* TODO: explain why it can't be considered insane */ | |
for (f = 0; f < 5; f++) { | |
fd = open(device, m, 0600); | |
if (fd >= 0) | |
break; | |
} | |
if (fd < 0) | |
return fd; | |
/* Reset original flags. */ | |
if (m != mode) | |
fcntl(fd, F_SETFL, mode); | |
return fd; | |
} |