X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/9f8886c72ce02c9c4487a562a24a518c96043664..aab9ab9fdd05119855383b33b67b27dcec5f3902:/fdflags.c diff --git a/fdflags.c b/fdflags.c new file mode 100644 index 0000000..85ef67c --- /dev/null +++ b/fdflags.c @@ -0,0 +1,75 @@ +/* -*-c-*- + * + * $Id: fdflags.c,v 1.1 1999/07/26 23:16:59 mdw Exp $ + * + * Manipulates flags on file descriptors + * + * (c) 1999 Straylight/Edgeware + */ + +/*----- Licensing notice --------------------------------------------------* + * + * This file is part of the mLib utilities library. + * + * mLib is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * mLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with mLib; if not, write to the Free + * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +/*----- Revision history --------------------------------------------------* + * + * $Log: fdflags.c,v $ + * Revision 1.1 1999/07/26 23:16:59 mdw + * Manipulate file descriptor flags. + * + */ + +/*----- Header files ------------------------------------------------------*/ + +#include +#include +#include + +#include + +#include "fdflags.h" + +/*----- Main code ---------------------------------------------------------*/ + +/* --- @fdflags@ --- * + * + * Arguments: @int fd@ = file descriptor to fiddle with + * @unsigned fbic, fxor@ = file flags to set and clear + * @unsigned fdbic, fdxor@ = descriptor flags to set and clear + * + * Returns: Zero if successful, @-1@ if not. + * + * Use: Sets file descriptor flags in what is, I hope, an obvious + * way. + */ + +int fdflags(int fd, unsigned fbic, unsigned fxor, + unsigned fdbic, unsigned fdxor) +{ + int f; + + if ((f = fcntl(fd, F_GETFL)) == -1 || + fcntl(fd, F_SETFL, (f & ~fbic) ^ fxor) == -1 || + (f = fcntl(fd, F_GETFD)) == -1 || + fcntl(fd, F_SETFD, (f & ~fdbic) ^ fdxor) == -1) + return (-1); + return (0); +} + +/*----- That's all, folks -------------------------------------------------*/