diff options
Diffstat (limited to 'usr/src/cmd/wbem/provider/tools/rds/rdfile.c')
| -rw-r--r-- | usr/src/cmd/wbem/provider/tools/rds/rdfile.c | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/usr/src/cmd/wbem/provider/tools/rds/rdfile.c b/usr/src/cmd/wbem/provider/tools/rds/rdfile.c deleted file mode 100644 index fb2a4e3083..0000000000 --- a/usr/src/cmd/wbem/provider/tools/rds/rdfile.c +++ /dev/null @@ -1,226 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright (c) 2000-2001 by Sun Microsystems, Inc. - * All rights reserved. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <stdlib.h> -#include <errno.h> -#include <string.h> -#include <strings.h> - -#include "rdimpl.h" -#include "rdtable.h" -#include "rdutil.h" -#include "rdfile.h" - -#define FDS_TABLE_SIZE 1024 - -static fd_t *fd_tbl = NULL; -static int fd_max; -static int fd_cnt; -static int fd_cnt_cur; -static int fd_cnt_old; -static fds_t *fds_tbl[FDS_TABLE_SIZE]; - -void -fd_init(int n) -{ - fd_max = n; - fd_cnt = fd_cnt_cur = fd_cnt_old = 0; - fd_tbl = Zalloc(sizeof (fd_t) * n); - (void) memset(fds_tbl, 0, sizeof (fds_t *) * FDS_TABLE_SIZE); -} - -void -fd_exit() -{ - if (fd_tbl) - free(fd_tbl); -} - -void -fd_close(fd_t *fdp) -{ - if (fdp) { - if (fdp->fd_fd >= 0 && fdp->fd_name[0] != '\0') { - (void) close(fdp->fd_fd); - fd_cnt--; - } - - (void) memset(fdp, 0, sizeof (fd_t)); - fdp->fd_fd = -1; - } -} - -void -fd_closeall() -{ - fd_t *fdp = fd_tbl; - int i; - - for (i = 0; i < fd_max; i++) { - fd_close(fdp); - fdp++; - } -} - - -int -fd_count() -{ - fd_t *fdp = fd_tbl; - int count = 0; - int i; - - for (i = 0; i < fd_max; i++, fdp++) { - if (fdp->fd_name[0] != '\0') { - ++count; - } - } - return (count); -} - - -static void -fd_recycle() -{ - fd_t *fdp = fd_tbl; - int counter; - int i; - - counter = abs(fd_cnt_old - fd_cnt) + NUM_RESERVED_FD; - - for (i = 0; i < fd_max; i++, fdp++) { - - if (fdp->fd_fd == -1) - continue; /* skip recycled ones */ - - if (fdp->fd_name[0] != '\0') { /* file has name */ - (void) close(fdp->fd_fd); - fd_cnt--; - counter--; - fdp->fd_fd = -1; - } - - if (counter == 0) - break; - } -} - -fd_t * -fd_open(char *name, int flags, fd_t *fdp) -{ - fd_t *fdp_new; - int fd; - - if (fd_cnt > fd_max - NUM_RESERVED_FD) - fd_recycle(); - - if (fdp != NULL) { - if ((strcmp(fdp->fd_name, name) == 0) && (fdp->fd_fd >= 0)) { - fd_cnt_cur++; - return (fdp); - } - } - -again: fd = open(name, flags); - - if (fd == -1) { - if ((errno == EMFILE) || (errno == ENFILE)) { - fd_recycle(); - goto again; - } - fdp_new = NULL; - } else { - fdp_new = &fd_tbl[fd]; - fdp_new->fd_fd = fd; - fdp_new->fd_flags = flags; - (void) strcpy(fdp_new->fd_name, name); - fd_cnt++; - fd_cnt_cur++; - } - return (fdp_new); -} - -int -fd_getfd(fd_t *fdp) -{ - return (fdp->fd_fd); -} - -void -fd_update() -{ - fd_cnt_old = fd_cnt_cur; - fd_cnt_cur = 0; -} - -fds_t * -fds_get(pid_t pid) -{ - fds_t *fdsp; - int hash = pid % FDS_TABLE_SIZE; - - for (fdsp = fds_tbl[hash]; fdsp; fdsp = fdsp->fds_next) - if (fdsp->fds_pid == pid) /* searching for pid */ - return (fdsp); - - fdsp = Zalloc(sizeof (fds_t)); /* adding new if pid was not found */ - fdsp->fds_pid = pid; - fdsp->fds_next = fds_tbl[hash]; - fds_tbl[hash] = fdsp; - return (fdsp); -} - -void -fds_rm(pid_t pid) -{ - fds_t *fds; - fds_t *fds_prev = NULL; - int hash = pid % FDS_TABLE_SIZE; - - for (fds = fds_tbl[hash]; fds && fds->fds_pid != pid; - fds = fds->fds_next) /* finding pid */ - fds_prev = fds; - - if (fds) { /* if pid was found */ - - fd_close(fds->fds_psinfo); - fd_close(fds->fds_usage); - fd_close(fds->fds_lpsinfo); - fd_close(fds->fds_lusage); - - if (fds_prev) - fds_prev->fds_next = fds->fds_next; - else - fds_tbl[hash] = fds->fds_next; - - free(fds); - } -} |
