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