/* 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 source tree. */ #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; }