/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <PTWCServer.h>
#include <ProUtil.h>
/*====================================================================*\
FUNCTION: PTUDFExGetLine
PURPOSE: Read one line from the file.
\*====================================================================*/
static ProError PTWCGetLine (FILE* f, char** line)
{
char buf [1000];
char* ret;
int len;
if (fgets (buf, 1000, f) == NULL)
{
return (PRO_TK_E_NOT_FOUND);
}
/*-------------------------------------------------------------------*\
Copy the line to the output string (and strip off the newline char)
\*-------------------------------------------------------------------*/
len = strlen (buf);
ret = (char*) calloc (len, sizeof (char));
strncpy (ret, buf, len - 1);
ret [len - 1] = '\0';
*line = ret;
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION: PTWCAddPathToArray
PURPOSE: Add model path to the array of paths
\*====================================================================*/
static ProError PTWCAddPathToArray (wchar_t* new_path,
wchar_t*** path_array)
{
wchar_t** actual_array = *path_array;
if (actual_array == NULL)
{
status = ProArrayAlloc (1, sizeof (wchar_t*), 1, (ProArray*)&actual_array);
PT_TEST_LOG_SUCC ("ProArrayAlloc()");
actual_array [0] = new_path;
}
else
{
status = ProArrayObjectAdd ((ProArray*)&actual_array, PRO_VALUE_UNUSED, 1,
&new_path);
PT_TEST_LOG_SUCC ("ProArrayObjectAdd()");
}
*path_array = actual_array;
return PRO_TK_NO_ERROR;
}
/*====================================================================*\
FUNCTION: PTWCGetRegistryFileInfo
PURPOSE: Read data from the populate registry file
\*====================================================================*/
ProError PTWCGetInitFileInfo (char* file, PTWCInitFileInfo* info)
{
FILE* fileHandle;
char* line;
if (file == NULL || info == NULL)
return PRO_TK_BAD_INPUTS;
info->username = info->password = info->server_url = info->project = NULL;
info->design_models = NULL;
info->plan_models = NULL;
fileHandle = fopen (file, "r");
if (fileHandle == NULL)
return PRO_TK_E_NOT_FOUND;
while (PTWCGetLine (fileHandle, &line) == PRO_TK_NO_ERROR)
{
char* label = strtok (line, " ");
char* value;
wchar_t* wValue;
if (label == NULL)
continue;
value = strtok (NULL, " ");
if (value == NULL)
continue;
wValue = (wchar_t*)calloc (strlen (value) + 1, sizeof (wchar_t));
ProStringToWstring (wValue, value);
if (strcmp (label, REG_FILE_USERNAME) == 0)
{
info->username = wValue;
}
else if (strcmp (label, REG_FILE_PASSWORD) == 0)
{
info->password = wValue;
}
else if (strcmp (label, REG_FILE_SERVER_URL) == 0)
{
info->server_url = wValue;
}
else if (strcmp (label, REG_FILE_PROJECT) == 0)
{
info->project = wValue;
}
else if (strcmp (label, REG_FILE_DESIGN_MODEL) == 0)
{
PTWCAddPathToArray (wValue, &info->design_models);
}
else if (strcmp (label, REG_FILE_PLAN_MODEL) == 0)
{
PTWCAddPathToArray (wValue, &info->plan_models);
}
}
fclose (fileHandle);
return PRO_TK_NO_ERROR;
}
/*====================================================================*\
FUNCTION: PTWCRegistryFileDataFree
PURPOSE: Clear memory from the registry file data
\*====================================================================*/
void PTWCInitFileDataFree (PTWCInitFileInfo* info)
{
int num_paths, i;
if (info->username != NULL)
free (info->username);
if (info->password != NULL)
free (info->password);
if (info->server_url != NULL)
free (info->server_url);
if (info->project != NULL)
free (info->project);
if (info->design_models != NULL)
{
ProArraySizeGet (info->design_models, &num_paths);
for (i = 0; i < num_paths; i++)
free (info->design_models [i]);
ProArrayFree ((ProArray*)&info->design_models);
}
if (info->plan_models != NULL)
{
ProArraySizeGet (info->plan_models, &num_paths);
for (i = 0; i < num_paths; i++)
free (info->plan_models [i]);
ProArrayFree ((ProArray*)&info->plan_models);
}
}