Blame sysdeps/solaris/safeio.c

Packit d37888
/* Copyright (C) 1999 Drazen Kacar
Packit d37888
   This file is part of LibGTop 1.0.
Packit d37888
Packit d37888
   Contributed by Drazen Kacar <dave@srce.hr>, May 1999.
Packit d37888
Packit d37888
   LibGTop is free software; you can redistribute it and/or modify it
Packit d37888
   under the terms of the GNU General Public License as published by
Packit d37888
   the Free Software Foundation; either version 2 of the License,
Packit d37888
   or (at your option) any later version.
Packit d37888
Packit d37888
   LibGTop is distributed in the hope that it will be useful, but WITHOUT
Packit d37888
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
Packit d37888
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
Packit d37888
   for more details.
Packit d37888
Packit d37888
   You should have received a copy of the GNU General Public License
Packit d37888
   along with LibGTop; see the file COPYING. If not, write to the
Packit d37888
   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit d37888
   Boston, MA 02110-1301, USA.
Packit d37888
*/
Packit d37888
Packit d37888
#include <config.h>
Packit d37888
#include <unistd.h>
Packit d37888
#include <fcntl.h>
Packit d37888
#include <sys/types.h>
Packit d37888
#include <sys/stat.h>
Packit d37888
#include <dirent.h>
Packit d37888
#include <errno.h>
Packit d37888
Packit d37888
#include "safeio.h"
Packit d37888
Packit d37888
int
Packit d37888
s_open(const char *file, int mode)
Packit d37888
{
Packit d37888
   int fd;
Packit d37888
Packit d37888
   do {
Packit d37888
      fd = open(file, mode);
Packit d37888
   } while(fd < 0 && errno == EINTR);
Packit d37888
   return fd;
Packit d37888
}
Packit d37888
Packit d37888
int
Packit d37888
s_stat(const char *path, struct stat *buf)
Packit d37888
{
Packit d37888
   int status;
Packit d37888
Packit d37888
   do {
Packit d37888
      status = stat(path, buf);
Packit d37888
   } while(status < 0 && errno == EINTR);
Packit d37888
   return status;
Packit d37888
}
Packit d37888
Packit d37888
int
Packit d37888
s_close(int fd)
Packit d37888
{
Packit d37888
   int status;
Packit d37888
Packit d37888
   do {
Packit d37888
      status = close(fd);
Packit d37888
   } while(status < 0 && errno == EINTR);
Packit d37888
   return status;
Packit d37888
}
Packit d37888
Packit d37888
ssize_t
Packit d37888
s_pread(int fd, void *buf, size_t nbytes, off_t offset)
Packit d37888
{
Packit d37888
   ssize_t len;
Packit d37888
Packit d37888
   /* Now, why doesn't the pread(2) man page say anything about pread()
Packit d37888
      return values? Can it read less bytes than requested? */
Packit d37888
Packit d37888
   do {
Packit d37888
      len = pread(fd, buf, nbytes, offset);
Packit d37888
   } while(len < 0 && errno == EINTR);
Packit d37888
   return len;
Packit d37888
}
Packit d37888
Packit d37888
int s_closedir(DIR *dirp)
Packit d37888
{
Packit d37888
   int status;
Packit d37888
Packit d37888
   do {
Packit d37888
      status = closedir(dirp);
Packit d37888
   } while(status < 0 && errno == EINTR);
Packit d37888
   return status;
Packit d37888
}