blob: 3e4f11e4d39bca90d12022b224a79b0b58b530e9 [file] [log] [blame]
/****************************************************************************
| (C) Copyright 2008 Novell, Inc. All Rights Reserved.
|
| GPLv2: This program is free software; you can redistribute it
| and/or modify it under the terms of version 2 of the GNU General
| Public License as published by the Free Software Foundation.
|
| This program 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 General Public License for more details.
+-------------------------------------------------------------------------*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <myio.h>
void chdirq (const char *path)
{
if (chdir(path)) {
io_error("chdir", path);
}
}
void closeq (int fd)
{
if (close(fd)) {
io_error("close", NULL);
}
}
void fstatq (int fd, struct stat *sb)
{
if (fstat(fd, sb)) {
io_error("fstat", NULL);
}
}
void lseekq (int fd, off_t offset)
{
if (lseek(fd, offset, 0) == -1) {
io_error("lseek", NULL);
}
}
void mkdirq (const char *path)
{
if (mkdir(path, 0777)) {
io_error("mkdir", path);
}
}
int openq (const char *path, int flags)
{
int fd;
fd = open(path, flags, 0666);
if (fd == -1) {
io_error("open", path);
}
return fd;
}
ssize_t readq (int fd, void *buf, size_t nbytes)
{
ssize_t rc;
rc = read(fd, buf, nbytes);
if (rc == -1) {
io_error("read", NULL);
}
return rc;
}
void rmdirq (const char *path)
{
if (rmdir(path)) {
io_error("rmdir", path);
}
}
void statq (const char *path, struct stat *sb)
{
if (stat(path, sb)) {
io_error("stat", path);
}
}
void unlinkq (const char *path)
{
if (unlink(path)) {
io_error("unlnk", path);
}
}
ssize_t writeq (int fd, const void *buf, size_t nbytes)
{
ssize_t rc;
rc = write(fd, buf, nbytes);
if (rc == -1) {
io_error("write", NULL);
}
if (rc != nbytes) {
fprintf(stderr, "ERROR: write: wrote only %zi bytes of %zu\n",
rc, nbytes);
exit(1);
}
return rc;
}
#if 0
void rmlevel ()
{
DIR *dir;
struct dirent *entry;
char name[255];
dir = opendir(".");
if (!dir) {
io_error("opendir", ".");
}
for (;;) {
entry = readdir(dir);
if (entry == NULL) {
break;
}
printf("%s\n", entry->d_name);
if (strcmp(entry->d_name, ".") == 0) {
continue;
}
if (strcmp(entry->d_name, "..") == 0) {
continue;
}
unlink(name);
strcpy(name, entry->d_name);
#if 0
if (chdir(entry->d_name)) {
unlinkq(entry->d_name);
} else {
rmlevel();
chdirq("..");
rmdirq(entry->d_name);
}
#endif
}
closedir(dir);
}
void rmtreeq (const char *path)
{
int current;
current = openq(".", O_RDONLY);
chdir(path);
rmlevel();
fchdir(current);
rmdirq(path);
}
#endif
// Do we want to do theses:
// ssize_t pread(int d, void *buf, size_t nbytes, off_t offset);