/*
* OpenPBS (Portable Batch System) v2.3 Software License
*
* Copyright (c) 1999-2002 Veridian Information Solutions, Inc.
* All rights reserved.
*
* ---------------------------------------------------------------------------
* For a license to use or redistribute the OpenPBS software under conditions
* other than those described below, or to purchase support for this software,
* please contact Veridian Systems, PBS Products Department ("Licensor") at:
*
* www.OpenPBS.org +1 650 967-4675 sales@OpenPBS.org
* 877 902-4PBS (US toll-free)
* ---------------------------------------------------------------------------
*
* This license covers use of the OpenPBS v2.3 software (the "Software") at
* your site or location, and, for certain users, redistribution of the
* Software to other sites and locations. Use and redistribution of
* OpenPBS v2.3 in source and binary forms, with or without modification,
* are permitted provided that all of the following conditions are met.
* After December 31, 2003, only conditions 3-6 must be met:
*
* 1. Commercial and/or non-commercial use of the Software is permitted
* provided a current software registration is on file at www.OpenPBS.org.
* If use of this software contributes to a publication, product, or
* service, proper attribution must be given; see www.OpenPBS.org/credit.html
*
* 2. Redistribution in any form is only permitted for non-commercial,
* non-profit purposes. There can be no charge for the Software or any
* software incorporating the Software. Further, there can be no
* expectation of revenue generated as a consequence of redistributing
* the Software.
*
* 3. Any Redistribution of source code must retain the above copyright notice
* and the acknowledgment contained in paragraph 6, this list of conditions
* and the disclaimer contained in paragraph 7.
*
* 4. Any Redistribution in binary form must reproduce the above copyright
* notice and the acknowledgment contained in paragraph 6, this list of
* conditions and the disclaimer contained in paragraph 7 in the
* documentation and/or other materials provided with the distribution.
*
* 5. Redistributions in any form must be accompanied by information on how to
* obtain complete source code for the OpenPBS software and any
* modifications and/or additions to the OpenPBS software. The source code
* must either be included in the distribution or be available for no more
* than the cost of distribution plus a nominal fee, and all modifications
* and additions to the Software must be freely redistributable by any party
* (including Licensor) without restriction.
*
* 6. All advertising materials mentioning features or use of the Software must
* display the following acknowledgment:
*
* "This product includes software developed by NASA Ames Research Center,
* Lawrence Livermore National Laboratory, and Veridian Information
* Solutions, Inc.
* Visit www.OpenPBS.org for OpenPBS software support,
* products, and information."
*
* 7. DISCLAIMER OF WARRANTY
*
* THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT
* ARE EXPRESSLY DISCLAIMED.
*
* IN NO EVENT SHALL VERIDIAN CORPORATION, ITS AFFILIATED COMPANIES, OR THE
* U.S. GOVERNMENT OR ANY OF ITS AGENCIES BE LIABLE FOR ANY DIRECT OR INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This license will be governed by the laws of the Commonwealth of Virginia,
* without reference to its choice of law rules.
*/
#include <pbs_config.h> /* the master config generated by configure */
#ifndef _POSIX_SOURCE
#define _POSIX_SOURCE 1
#endif
/* System headers */
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <malloc.h>
/* #include <math.h> */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <time.h>
/* local headers */
#include "portability.h"
#include "af.h"
#include "pbs_error.h"
/* Macros */
#define MAXDARRAY 11 /* maximum # of dynamic arrays. Must be a */
/* prime # since this is used as a hash mod */
/* value */
/* TODO: this is not a fixed number. It */
/* must be calculated. */
/* So far, slots for varstr, AllNodes, */
/* AllResmoms, Servers, Ques, as well as */
/* 5 more for each AllNodes, 1 for each */
/* server, as well as Res too! */
/* File Scope Variables */
static char ident[] = "@(#) $RCSfile: af.c,v $ $Revision: 2.1.10.7 $";
struct dynamic_array {
void *ptr; /* pointer to the dynamic array */
int numElems; /* number of elements in the array */
};
static struct dynamic_array d_array[MAXDARRAY];
static char *dayofweekVal[] = {
/* 0 */ "SUN",
/* 1 */ "MON",
/* 2 */ "TUE",
/* 3 */ "WED",
/* 4 */ "THU",
/* 5 */ "FRI",
/* 6 */ "SAT",
};
#define NUMDAYOFWEEK 7
static char *actVal[] = {
/* 0 */ "SYNCRUN",
/* 1 */ "ASYNCRUN",
/* 2 */ "DELETE",
/* 3 */ "RERUN",
/* 4 */ "HOLD",
/* 5 */ "RELEASE",
/* 6 */ "SIGNAL",
/* 7 */ "MODIFYATTR",
/* 8 */ "MODIFYRES",
};
#define NUMACTS 9
static char *cprVal[] = {
/* 0 */ "OP_EQ",
/* 1 */ "OP_NEQ",
/* 2 */ "OP_GT",
/* 3 */ "OP_GE",
/* 4 */ "OP_LT",
/* 5 */ "OP_LE",
/* 6 */ "OP_MAX",
/* 7 */ "OP_MIN",
/* ************************************************************************* */
/* Structures for the varstr */
/* ************************************************************************* */
};
#define NUMCPRS 8
struct varstr_type {
void *ptr; /* ptr to malloc-ed storage of variable str */
int scope; /* variable's scope */
void *pptr; /* variable's parent ptr - useful for */
/* collectively freeing up malloc-ed storage */
/* linked to some main structure */
struct varstr_type *link;
};
#define A ( (sqrt(5) - 1)/2 )
#define VARSTRLEN 500
static struct varstr_type *varstr[VARSTRLEN];
struct varstrIndex_type {
struct varstr_type *mptr;
struct varstrIndex_type *link;
};
#define VARSTR_INDEX_LEN 480
static struct varstrIndex_type *varstrIndex[VARSTR_INDEX_LEN];
struct varstrSubIndex_type {
struct varstrIndex_type *ptr;
struct varstrSubIndex_type *link;
};
#define VARSTR_SUBINDEX_LEN 19
static struct varstrSubIndex_type *varstrSubIndex[VARSTR_SUBINDEX_LEN];
/* ************************************************************************* */
/* Structures for the mallocTable */
/* ************************************************************************* */
struct malloc_type {
int scope; /* variable's scope */
void *pptr; /* variable's parent ptr - useful for */
/* collectively freeing up malloc-ed storage */
/* linked to some main structure */
void *ptr; /* ptr to malloc-ed storage of variable str */
struct malloc_type *link;
};
#define MALLOCLEN 500
static struct malloc_type *mallocTable[MALLOCLEN];
struct mallocIndex_type {
struct malloc_type *mptr;
struct mallocIndex_type *link;
};
#define MALLOC_INDEX_LEN 480
static struct mallocIndex_type *mallocIndexTable[MALLOC_INDEX_LEN];
struct mallocSubIndex_type {
struct mallocIndex_type *ptr;
struct mallocSubIndex_type *link;
};
#define MALLOC_SUBINDEX_LEN 19
static struct mallocSubIndex_type *mallocSubIndexTable[MALLOC_SUBINDEX_LEN];
/* ****************************************************