Example #1
0
int WBSR_init (char *request_lb_name, char *response_lb_name, 
				char *data_lb_name, int no_ctm_header) {
    char *req_name, *resp_name, *data_name;

    if (no_ctm_header)
	Ctm_hd_s = 0;

    if (request_lb_name == NULL) {
	LE_send_msg (GL_ERROR, "comms request data store not specified");
	return (-1);
    }
    if (response_lb_name == NULL) {
	LE_send_msg (GL_ERROR, "comms response data store not specified");
	return (-1);
    }
    if (data_lb_name == NULL) {
	LE_send_msg (GL_ERROR, "playback data store not specified");
	return (-1);
    }

    req_name = Get_full_path (request_lb_name);
    resp_name = Get_full_path (response_lb_name);
    data_name = Get_full_path (data_lb_name);
    if (req_name == NULL || resp_name == NULL || data_name == NULL)
	return (-1);

    Link_ind = 0;

    Req_lb = LB_open (req_name, LB_WRITE, NULL);
    if (Req_lb < 0) {
	LE_send_msg (GL_ERROR, "LB_open (%s) failed (%d)", req_name, Req_lb);
	return (-1);
    }
    Resp_lb = LB_open (resp_name, LB_READ, NULL);
    if (Resp_lb < 0) {
	LE_send_msg (GL_ERROR, "LB_open (%s) failed (%d)", resp_name, Resp_lb);
	return (-1);
    }
    Data_lb = LB_open (data_name, LB_READ, NULL);
    if (Data_lb < 0) {
	LE_send_msg (GL_ERROR, "LB_open (%s) failed (%d)", data_name, Data_lb);
	return (-1);
    }
    LE_send_msg (LE_VL1, "LBs opened: comms req %s, comms resp %s, playback data %s", req_name, resp_name, data_name);
    STR_free (req_name);
    STR_free (resp_name);
    STR_free (data_name);

    return (0);
}
Example #2
0
static void Read_h_file (char *fname, int required) {
    char buf[MAX_STR_SIZE], *cont;
    int ret, off, n;

    ret = FG_read_c_content (fname, &cont);
    if (ret < 0) {
	if (required) {
	    fprintf (stderr, "open (%s) failed\n", fname);
	    exit (1);
	}
	return;
    }

    off = 0;
    while ((n = FG_get_c_line (cont, off, buf, MAX_STR_SIZE)) >= 0) {
	char *tks[MAX_TKS];
	int nt;

	off += n;
	FM_tk_free ();
	nt = FP_get_tokens (buf, MAX_TKS, tks, NULL);
	tks[nt] = NULL;
	if (nt < 2 || tks[nt - 1][0] != ';' || tks[nt - 2][0] != ')')
	    continue;
	if (nt > 3)
	    Process_c_ft (tks, nt);
    }
    STR_free (cont);

    if (Task_name[0] != '\0')
	Read_c_task_tag (fname, Task_name);
}
Example #3
0
static void Read_c_file (char *fname) {
    char buf[MAX_STR_SIZE], *cont;
    int ret, off, n, level;

    ret = FG_read_c_content (fname, &cont);
    if (ret < 0) {
	fprintf (stderr, "open (%s) failed\n", fname);
	exit (1);
    }

    off = level = 0;
    while ((n = FG_get_c_line (cont, off, buf, MAX_STR_SIZE)) >= 0) {
	char *tks[MAX_TKS];
	int nt;

	off += n;
	FM_tk_free ();
	nt = FP_get_tokens (buf, MAX_TKS, tks, NULL);
	tks[nt] = NULL;
	if (level == 0) {
	    if (nt < 2 || tks[nt - 1][0] != '{' || tks[nt - 2][0] != ')')
		continue;
	    tks[nt - 1][0] = ';';
	    if (nt > 3)
		Process_c_ft (tks, nt);
	}
	if (tks[nt - 1][0] == '{')
	    level++;
	else if (tks[nt - 1][0] == '}')
	    level--;
    }
    STR_free (cont);
}
Example #4
0
static void fill_files(const char *root, bool recursive)
{
	DIR *dir;
	char *path;
	struct dirent *dirent;
	char *file_name;
	const char *name;
	const char *file;
	struct stat info;
	const char *ext;
	
	path = STR_copy(root);
	
	dir = opendir(path);
	if (!dir)
	{
		fprintf(stderr, "gbc: cannot browse directory: %s\n", path);
		exit(1);
	}
	
	while ((dirent = readdir(dir)) != NULL)
	{
		file_name = dirent->d_name;
		if (*file_name == '.')
			continue;

		file = FILE_cat(path, file_name, NULL);

		if (stat(file, &info))
		{
			fprintf(stderr, "gbc: warning: cannot stat file: %s\n", file);
			continue;
		}

		if (S_ISDIR(info.st_mode))
		{
			if (recursive)
				fill_files(file, TRUE);
		}
		else
		{
			ext = FILE_get_ext(file);

			if ((strcmp(ext, "module") == 0)
					|| (strcmp(ext, "class") == 0))
			{
				*((char **)ARRAY_add(&_files)) = STR_copy(file);
				// Add the class to the list of classes
				name = FILE_get_basename(file_name);
				COMPILE_add_class(name, strlen(name));
			}
		}
	}

	closedir(dir);
	STR_free(path);
}
Example #5
0
static void exit_files(void)
{
	int i;
	
	for (i = 0; i < ARRAY_count(_files); i++)
		STR_free(_files[i]);
	
	ARRAY_delete(&_files);
}
Example #6
0
static int Read_dea_files (char *suffix, char *dir_name) {
    DIR *dir;
    char *vb;
    struct dirent *dp;
    int de_cnt;

    dir = opendir (dir_name);
    if (dir == NULL) {
	if (errno == ENOENT) {
	    LE_send_msg (GL_INFO, "dir %s not found\n", dir_name);
	    return (0);
	}
	LE_send_msg (GL_ERROR, 
		"opendir (%s) failed, errno %d\n", dir_name, errno);
	return (0);
    }
    vb = NULL;
    vb = STR_reset (vb, 128);
    de_cnt = 0;
    while ((dp = readdir (dir)) != NULL) {
	int ret;
	struct stat st;

	if (strcmp (dp->d_name, ".") == 0 || strcmp (dp->d_name, "..") == 0 ||
	    dp->d_name[strlen (dp->d_name) - 1] == '%')
	    continue;

	vb = STR_copy (vb, dir_name);
	vb = STR_cat (vb, "/");
	vb = STR_cat (vb, dp->d_name);
	ret = stat (vb, &st);
	if (ret < 0) 
	    continue;

	if (S_ISREG (st.st_mode)) {
	    int ln, ls;

	    if (suffix != NULL && 
		((ln = strlen (dp->d_name)) < (ls = strlen (suffix)) ||
		 strcmp (dp->d_name + (ln - ls), suffix) != 0))
		continue;
	    LE_send_msg (GL_INFO, "read DEA file %s\n", vb);
	    ret = DEAU_use_attribute_file (vb, 0);
	    if (ret < 0) {
		LE_send_msg (GL_ERROR, 
		    "DEAU_use_attribute_file (%s) failed (%d)\n", vb, ret);
		exit (1);
	    }
	    else
		de_cnt += ret;
	}
    }
    STR_free (vb);
    closedir (dir);
    return (de_cnt);
}
Example #7
0
int MPI_get_unexpected_processes (Unexp_process_t **up_p) {
    if (up_p == NULL) {
	STR_free ((char *)Unexp_procs);
	Unexp_procs = NULL;
	N_unexp_procs = 0;
	return (0);
    }
    *up_p = Unexp_procs;
    return (N_unexp_procs);
}
Example #8
0
/*#  Generate an xml string   */
static int generate_xml_string(Prod_header* product, const char* file_name)
{
	static char* xml_string = NULL;
        int rda_elev_indx;
	char text[100];
	struct tm* time;
	char* desc = NULL;
	int i;
	int status;
	int lb_fd;
	float elevation;
	xml_string = STR_copy(xml_string, "<item>\n  <time fractional=\"0.000000\"> ");
	sprintf(text, "%d", (int) product->elev_t);
	xml_string = STR_cat(xml_string, text);
	xml_string = STR_cat(xml_string, " </time>\n  <params>NIDS FlatFile ");
	xml_string = STR_cat(xml_string, output_dir);
	xml_string = STR_cat(xml_string, " ");
	xml_string = STR_cat(xml_string, get_type_string(product));
	xml_string = STR_cat(xml_string, " ");
	xml_string = STR_cat(xml_string, file_name);
	xml_string = STR_cat(xml_string, " </params>\n  <selections> ");
	time = gmtime((const time_t*)&product->elev_t);
	sprintf(text, "%4.4d%2.2d%2.2d-%2.2d%2.2d%2.2d ",
		   time->tm_year + 1900, time->tm_mon + 1, time->tm_mday,
		   time->tm_hour, time->tm_min, time->tm_sec);
	xml_string = STR_cat(xml_string, text);

	desc = STR_copy(desc, ORPGPAT_get_description(product->g.prod_id, STRIP_MNEMONIC));
	for (i=0; (i < strlen(desc)); i++)
	{
	    if (desc[i] == ' ')
		desc[i] = '_';
	}
	xml_string = STR_cat(xml_string, desc);
	STR_free(desc);
        rda_elev_indx = ORPGVST_get_rda_index(product->g.elev_ind);
	elevation = ((float)ORPGVST_get_elevation(rda_elev_indx)) / 10;
	if (ORPGPAT_get_type(product->g.prod_id) == 0)
	   elevation = 0.0;
	sprintf(text, " %2.2f </selections>\n</item>\n", elevation);
	xml_string = STR_cat(xml_string, text);

	lb_fd = get_index_lb();
	if (lb_fd >= 0)
	{
		LE_send_msg(GL_INFO, "Writing xml string");
		LE_send_wrapped_string(GL_INFO, xml_string, 150);
		status = LB_write(lb_fd, xml_string, strlen(xml_string) + 1, LB_ANY);
		if (status < 0)
		   LE_send_msg(GL_INFO, "Error (%d) writing to index lb", status);
	}
	return(lb_fd);
}
Example #9
0
static void Iad_init () {
    int ret, ver;
    char *db_name, *cmd, cfg_dir[IAD_NAME_SIZE], obuf[BUF_SIZE], *p;

    if (strcmp (Type, "clear") == 0)
	Clear_adapt ();

    LE_send_msg (GL_INFO, "Initialize adaptation data...");

    if (strcmp (Type, "init") != 0)
	Init_legacy_adapt ();

    if (!Operational)
	Init_dea_database ();

    db_name = ORPGDA_lbname (ORPGDAT_ADAPT_DATA);
    if (db_name == NULL) {
	LE_send_msg (GL_ERROR, 
			"ORPGDA_lbname (%d) failed", ORPGDAT_ADAPT_DATA);
	exit (1);
    }
    DEAU_LB_name (db_name);
    ret = DEAU_get_string_values ("RPG_DEA_DB_init_state", &p);
    if (ret < 0 || strcmp (p, "init completed") != 0) {
	LE_send_msg (GL_INFO, "RPG adaptation data not installed\n");
	exit (1);
    }

    if (MISC_get_cfg_dir (cfg_dir, IAD_NAME_SIZE) <= 0) {
	LE_send_msg (GL_INFO, "MISC_get_cfg_dir failed\n");
	exit (1);
    }
    obuf[0] = '\0';
    cmd = STR_gen (NULL, 
	"bash -l -c \"ls ", cfg_dir, "/adapt/installed/adapt0*.Z\"", NULL);
    if (MISC_system_to_buffer (cmd, obuf, BUF_SIZE, NULL) < 0) {
	LE_send_msg (GL_INFO, "MISC_system_to_buffer (%s) failed\n", cmd);
	exit (1);
    }
    STR_free (cmd);
    if ((p = strstr (obuf, "adapt0")) != NULL &&
	sscanf (p + 6, "%d", &ver) == 1 &&
	(ver / 10) != (ORPGMISC_RPG_adapt_version_number () / 10)) {
	LE_send_msg (GL_INFO, 
		"Bad RPG adapt version number (%d) installed (shoudl be %d)", 
		ver, ORPGMISC_RPG_adapt_version_number ());
	exit (1);
    }

    LE_send_msg (GL_INFO, "init_adapt_data completed - operational");
    exit (0);
}
Example #10
0
static int Copy_resource_table (char *fname) {
    struct stat buf;
    int ret, i;
    char *p, dir[256], *src;

    if (stat (fname, &buf) == 0)	/* local resource table exists */
	return (0);

    /* try to copy over a resource file */
    if ((ret = ORPGMGR_each_node (Each_node_cb)) < 0) {
	LE_send_msg (GL_ERROR, 
		"Copy_resource_table failed (ORPGMGR_each_node ret %d)", ret);
        return (ret);
    }

    if ((ret = MISC_mkdir (MISC_dirname (fname, dir, 256))) < 0) {
	LE_send_msg (GL_ERROR, "MISC_dirname %s failed (%d)", fname, ret);
	return (ret);
    }
    p = Copy_ips;
    src = NULL;
    for (i = 0; i < N_copy_ips; i++) {
	src = STR_gen (src, p, ":", fname, NULL);
	if (RSS_copy (src, fname) < 0)
	    LE_send_msg (LE_VL2, "Copying %s to %s failed", src, fname);
	else {
	    LE_send_msg (GL_INFO, "Resource table copied from %s", p);
	    STR_free (src);
	    return (0);
	}
	p += strlen (p) + 1;
    }
    STR_free (src);
    LE_send_msg (GL_ERROR, "Resource table not found on any of the RPG nodes");

    return (0);
}
Example #11
0
static int Shared_file_exist (char *path) {
    char *name;
    struct stat st;
    int ret;

    if (Link_path[0] == '\0')
	return (0);

    name = STR_gen (NULL, Shared_dir, "/", MISC_basename (path), NULL);
    ret = stat (name, &st);
    STR_free (name);
    if (ret < 0 ||
	!S_ISREG (st.st_mode) ||
	st.st_size <= 0)
	return (0);
    if (time (NULL) > st.st_ctime + 300)
	return (0);
    return (1);
}
Example #12
0
/*************************************************************************
   Description:
      Writes the Task Attribute Table directory record

   Input:

   Output:

   Returns: 0 upon success; otherwise -1

   Notes:

**************************************************************************/
int ITI_ATTR_write_directory_record( char *tat_dir ) {

    int retval;
    int length;

    /* Write out the TAT directory if there are entries in the directory
       to write out. */
    length = STR_size( tat_dir );

    if( length > 0 ) {

        retval = ORPGTAT_write_directory( tat_dir, length );
        STR_free( tat_dir );

    }
    else
        return(-1);

    return(retval) ;

    /*END of ITI_ATTR_write_directory()*/
}
Example #13
0
static void Set_to_defaults (int force) {
    char site[128], *p;
    char *id, *lid;
    int ret;

    if ((p = ORPGMISC_get_site_name ("site")) == NULL) {
	LE_send_msg (GL_INFO, 
		"Site name not available - default values not used");
	return;
    }
    strncpy (site, p, 128);
    site [127] = '\0';

    DEAU_get_next_dea (NULL, NULL);
    ret = DEAU_get_next_dea (&id, NULL);
    lid = NULL;
    while (1) {
	if (ret == DEAU_DE_NOT_FOUND)
	    break;
	if (ret < 0) {
	    LE_send_msg (GL_ERROR, "DEAU_get_next_dea failed (%d)", ret);
	    exit (1);
	}
	lid = STR_copy (lid, id);
	ret = DEAU_use_default_values (lid, site, force);
	if (ret < 0 && ret != DEAU_DEFAULT_NOT_FOUND && 
					    ret != DEAU_DE_NOT_FOUND) {
	    LE_send_msg (GL_ERROR, 
			    "DEAU_use_default_values failed (%d)", ret);
	    exit (1);
	}
	ret = DEAU_get_next_dea (&id, NULL);
    }
    STR_free (lid);
    return;
}
Example #14
0
int GDCF_install_file () {
    char *p, path[MAX_STR_SIZE], dest[MAX_STR_SIZE];
    char new_name[MAX_STR_SIZE];
    char buf[MAX_STR_SIZE * 2 + 128], tok[MAX_STR_SIZE];
    int nt, is_gz, is_tar, len, path_levels;

    p = Install_path;
    if (p == NULL) {
	unlink (Out_fname);
	if (VERBOSE)
	    printf ("Install not needed for this node and site\n");
	return (0);
    }

    if (strlen (p) + 32 > MAX_STR_SIZE)
	GDCP_exception_exit ("Install file name (%s) too long\n", p);
    GDCM_strlcpy (path, p, MAX_STR_SIZE);
    is_gz = is_tar = 0;
    if (Link_path[0] == '\0' || !Is_link) {
	nt = MISC_get_token (path, "S.", 0, NULL, 0);
	if (nt > 1 && GDCM_stoken 
				(path, "S.", nt - 1, tok, MAX_STR_SIZE) > 0) {
	    if (strcmp (tok, "gz") == 0) {
		if (nt > 2 && 
		    GDCM_stoken 
				(path, "S.", nt - 2, tok, MAX_STR_SIZE) > 0 &&
		    strcmp (tok, "tar") == 0)
		    is_tar = 1;
		is_gz = 1;
	    }
	    else if (strcmp (tok, "tar") == 0)
		is_tar = 1;
	}
    }

    len = 0;
    if (is_gz)
	len += 3;
    if (is_tar)
	len += 4;
    path[strlen (path) - len] = '\0';

    if (is_tar) {
	char tmp[MAX_STR_SIZE];
	int i;
	if (rename (Out_fname, MISC_basename (path)) < 0)
	    GDCP_exception_exit ("rename (%s %s) failed\n", 
				Out_fname, MISC_basename (path));
	strcpy (tmp, path);
	i = 0;
	while (path[i] != '\0') {
	    if (path[i] == ':')
		path[i] = '_';
	    i++;
	}
	GDCM_strlcat (path, ".tar", MAX_STR_SIZE);
	GDCM_strlcpy (new_name, MISC_basename (path), MAX_STR_SIZE);
	sprintf (buf, "tar cf %s %s", new_name, MISC_basename (tmp));
	if (Run_cmd (buf) != 0)
	    exit (1);
	unlink (MISC_basename (tmp));
    }
    else
	strcpy (new_name, Out_fname);

    if (path[0] == '/') {
	GDCM_strlcpy (dest, "root/", MAX_STR_SIZE);
	GDCM_strlcat (dest, path + 1, MAX_STR_SIZE);
    }
    else if (path[0] == '.' && path[1] == '/') {
	GDCM_strlcpy (dest, path + 2, MAX_STR_SIZE);
    }
    else {
	GDCM_strlcpy (dest, "user/", MAX_STR_SIZE);
	GDCM_strlcat (dest, path, MAX_STR_SIZE);
    }
    path_levels = MISC_get_token (path, "S/", 0, NULL, 0) - 1;
    GDCM_add_dir (Dest_dir, dest, MAX_STR_SIZE);

    if (MISC_mkdir (MISC_dirname (dest, buf, MAX_STR_SIZE)))
	GDCP_exception_exit ("MISC_mkdir (%s) failed\n", buf);
    if (Link_path[0] == '\0' || !Is_link) {
	if (rename (new_name, dest) < 0)
	    GDCP_exception_exit ("Failed in installing (rename) (%s)\n", dest);
    }
    else {
	int i;
	char *name = NULL;
	name = STR_copy (name, "");
	for (i = 0; i < path_levels; i++) 
	    name = STR_cat (name, "../");
	name = STR_cat (name, Link_path);
	name = STR_cat (name, "/");
	name = STR_cat (name, MISC_basename (dest));
	unlink (dest);
	if (symlink (name, dest) < 0)
	    GDCP_exception_exit (
			"Failed in installing (symlink) link (%s)\n", dest);
	STR_free (name);
	name = NULL;
	if (!File_exist) {
	    name = STR_gen (name, Shared_dir, "/", MISC_basename (dest), NULL);
	    if (MISC_mkdir (MISC_dirname (name, buf, MAX_STR_SIZE)))
		GDCP_exception_exit ("MISC_mkdir (%s) failed\n", buf);
	    if (rename (new_name, name) < 0)
		GDCP_exception_exit (
			"Failed in installing shared (%s)\n", name);
	    STR_free (name);
	}
    }

    if (is_gz) {
	sprintf (buf, "gzip -f %s", dest);
	if (Run_cmd (buf) != 0)
	    exit (1);
	GDCM_strlcat (dest, ".gz", MAX_STR_SIZE);
    }

    printf ("Created %s\n", dest);

    return (1);
}
Example #15
0
static void Init_dea_database () {
    char *db_name;
    int ret, de_cnt;
    struct stat st;
    char *path, *p;

    db_name = ORPGDA_lbname (ORPGDAT_ADAPT_DATA);
    if (db_name == NULL) {
	LE_send_msg (GL_ERROR, 
			"ORPGDA_lbname (%d) failed", ORPGDAT_ADAPT_DATA);
	exit (1);
    }
    DEAU_LB_name (db_name);
    ret = DEAU_get_string_values ("RPG_DEA_DB_init_state", &p);
    if (ret > 0 && strcmp (p, "init completed") == 0) {
	LE_send_msg (GL_INFO, "DEA database exits - not initialized\n");
	exit (0);
    }

    path = NULL;
    path = STR_copy (path, Cfg_dir);
    path = STR_cat (path, "/site_info.dea");
    if (stat (path, &st) < 0) {
	LE_send_msg (GL_INFO, 
	    "site_info.dea not found in %s - Use existing data\n", Cfg_dir);
	exit (0);
    }
    STR_free (path);

    DEAU_special_suffix ("alg");

    de_cnt = Read_dea_files (".dea", Cfg_dir);
    de_cnt += Read_dea_files (NULL, Cfg_dea);

    if (de_cnt == 0) {
	LE_send_msg (GL_INFO, "No data element found in %s and %s\n", 
						Cfg_dir, Cfg_dea);
	exit (0);
    }
    else
	LE_send_msg (GL_INFO, "%d data elements found in %s and %s\n", 
						de_cnt, Cfg_dir, Cfg_dea);

    LE_send_msg (GL_INFO, "Create a/c DB");
    ret = DEAU_create_dea_db ();
    if (ret < 0) {
	LE_send_msg (GL_ERROR, "DEAU_create_dea_db failed (%d)\n", ret);
	exit (1);
    }
    LE_send_msg (GL_INFO, "Set uninitialized value to default");
    Set_to_defaults (0);
    Correct_layer_levels ();
    LE_send_msg (GL_INFO, "Verify current and baseline values");
    Verify_values ();
    LE_send_msg (GL_INFO, "Set uninitialized baseline values");
    Set_baseline_values ();
    ret = DEAU_set_values ("RPG_DEA_DB_init_state", 1, "init completed", 1, 0);
    if (ret < 0) {
	LE_send_msg (GL_ERROR, 
		"DEAU_set_values RPG_DEA_DB_init_state failed (%d)\n", ret);
	exit (1);
    }
    LE_send_msg (GL_INFO, "init_adapt_data completed - non-operational");
    exit (0);
}