working on dynamic memory

This commit is contained in:
Ugo Cirmignani
2018-12-25 20:23:04 +01:00
parent c39dde3658
commit fb29d4336d
26 changed files with 151 additions and 117 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -22,7 +22,6 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/in.h> #include <netinet/in.h>
@ -1175,8 +1174,8 @@ int parseCommandCdup(ftpDataType * data, int socketId)
{ {
int returnCode; int returnCode;
FILE_DirectoryToParent(&data->clients[socketId].login.absolutePath.text); FILE_DirectoryToParent(&data->clients[socketId].login.absolutePath.text, &data->clients[socketId].memoryTable);
FILE_DirectoryToParent(&data->clients[socketId].login.ftpPath.text); FILE_DirectoryToParent(&data->clients[socketId].login.ftpPath.text, &data->clients[socketId].memoryTable);
data->clients[socketId].login.absolutePath.textLen = strlen(data->clients[socketId].login.absolutePath.text); data->clients[socketId].login.absolutePath.textLen = strlen(data->clients[socketId].login.absolutePath.text);
data->clients[socketId].login.ftpPath.textLen = strlen(data->clients[socketId].login.ftpPath.text); data->clients[socketId].login.ftpPath.textLen = strlen(data->clients[socketId].login.ftpPath.text);

105
ftpData.c
View File

@ -74,7 +74,7 @@ void setDynamicStringDataType(dynamicStringDataType *dynamicString, char *theStr
if (dynamicString->textLen == 0) if (dynamicString->textLen == 0)
{ {
//printf("\nMemory data address before memset call : %lld", memoryTable); //printf("\nMemory data address before memset call : %lld", memoryTable);
dynamicString->text = (char *) DYNMEM_malloc (((sizeof(char) * stringLen) + 1), &*memoryTable); dynamicString->text = (char *) DYNMEM_malloc (((sizeof(char) * stringLen) + 1), &*memoryTable, "setDynamicString");
//printf("\nMemory data address after memset call : %lld", memoryTable); //printf("\nMemory data address after memset call : %lld", memoryTable);
memset(dynamicString->text, 0, stringLen + 1); memset(dynamicString->text, 0, stringLen + 1);
memcpy(dynamicString->text, theString, stringLen); memcpy(dynamicString->text, theString, stringLen);
@ -235,7 +235,7 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb
int i, x, returnCode; int i, x, returnCode;
int fileAndFoldersCount = 0; int fileAndFoldersCount = 0;
char **fileList = NULL; char **fileList = NULL;
FILE_GetDirectoryInodeList(ftpData->clients[clientId].listPath.text, &fileList, &fileAndFoldersCount, 0); FILE_GetDirectoryInodeList(ftpData->clients[clientId].listPath.text, &fileList, &fileAndFoldersCount, 0, &*memoryTable);
*filesNumber = fileAndFoldersCount; *filesNumber = fileAndFoldersCount;
returnCode = socketWorkerPrintf(ftpData, clientId, "sds", "total ", fileAndFoldersCount ,"\r\n"); returnCode = socketWorkerPrintf(ftpData, clientId, "sds", "total ", fileAndFoldersCount ,"\r\n");
@ -287,16 +287,16 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb
//printf("\nFILE SIZE : %lld", data.fileSize); //printf("\nFILE SIZE : %lld", data.fileSize);
data.owner = FILE_GetOwner(fileList[i]); data.owner = FILE_GetOwner(fileList[i], &*memoryTable);
data.groupOwner = FILE_GetGroupOwner(fileList[i]); data.groupOwner = FILE_GetGroupOwner(fileList[i], &*memoryTable);
data.fileNameWithPath = fileList[i]; data.fileNameWithPath = fileList[i];
data.fileNameNoPath = FILE_GetFilenameFromPath(fileList[i]); data.fileNameNoPath = FILE_GetFilenameFromPath(fileList[i]);
data.inodePermissionString = FILE_GetListPermissionsString(fileList[i]); data.inodePermissionString = FILE_GetListPermissionsString(fileList[i], &*memoryTable);
data.lastModifiedData = FILE_GetLastModifiedData(fileList[i]); data.lastModifiedData = FILE_GetLastModifiedData(fileList[i]);
if (strlen(data.fileNameNoPath) > 0) if (strlen(data.fileNameNoPath) > 0)
{ {
data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, &*memoryTable); data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, &*memoryTable, "dataFinalPath");
strcpy(data.finalStringPath, data.fileNameNoPath); strcpy(data.finalStringPath, data.fileNameNoPath);
} }
@ -306,7 +306,7 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb
{ {
int len = 0; int len = 0;
data.isLink = 1; data.isLink = 1;
data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), &*memoryTable); data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), &*memoryTable, "dataLinkPath");
if ((len = readlink (fileList[i], data.linkPath, CLIENT_COMMAND_STRING_SIZE)) > 0) if ((len = readlink (fileList[i], data.linkPath, CLIENT_COMMAND_STRING_SIZE)) > 0)
{ {
data.linkPath[len] = 0; data.linkPath[len] = 0;
@ -367,28 +367,28 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb
if (data.fileNameWithPath != NULL) if (data.fileNameWithPath != NULL)
free(data.fileNameWithPath); DYNMEM_free(data.fileNameWithPath, &*memoryTable);
if (data.linkPath != NULL) if (data.linkPath != NULL)
free(data.linkPath); DYNMEM_free(data.linkPath, &*memoryTable);
if (data.finalStringPath != NULL) if (data.finalStringPath != NULL)
free(data.finalStringPath); DYNMEM_free(data.finalStringPath, &*memoryTable);
if (data.owner != NULL) if (data.owner != NULL)
free(data.owner); DYNMEM_free(data.owner, &*memoryTable);
if (data.groupOwner != NULL) if (data.groupOwner != NULL)
free(data.groupOwner); DYNMEM_free(data.groupOwner, &*memoryTable);
if (data.inodePermissionString != NULL) if (data.inodePermissionString != NULL)
free(data.inodePermissionString); DYNMEM_free(data.inodePermissionString, &*memoryTable);
if (returnCode <= 0) if (returnCode <= 0)
{ {
for (x = i+1; x < fileAndFoldersCount; x++) for (x = i+1; x < fileAndFoldersCount; x++)
free (fileList[x]); DYNMEM_free (fileList[x], &*memoryTable);
free (fileList); DYNMEM_free (fileList, &*memoryTable);
return -1; return -1;
} }
@ -396,7 +396,7 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb
if (fileList != NULL) if (fileList != NULL)
{ {
free (fileList); DYNMEM_free (fileList, &*memoryTable);
} }
return 1; return 1;
@ -429,7 +429,7 @@ void getListDataInfo(char * thePath, DYNV_VectorGenericDataType *directoryInfo,
int i; int i;
int fileAndFoldersCount = 0; int fileAndFoldersCount = 0;
ftpListDataType data; ftpListDataType data;
FILE_GetDirectoryInodeList(thePath, &data.fileList, &fileAndFoldersCount, 0); FILE_GetDirectoryInodeList(thePath, &data.fileList, &fileAndFoldersCount, 0, &*memoryTable);
//printf("\nNUMBER OF FILES: %d", fileAndFoldersCount); //printf("\nNUMBER OF FILES: %d", fileAndFoldersCount);
//fflush(0); //fflush(0);
@ -477,16 +477,16 @@ void getListDataInfo(char * thePath, DYNV_VectorGenericDataType *directoryInfo,
printf("\nFILE SIZE : %lld", data.fileSize); printf("\nFILE SIZE : %lld", data.fileSize);
data.owner = FILE_GetOwner(data.fileList[i]); data.owner = FILE_GetOwner(data.fileList[i], &*memoryTable);
data.groupOwner = FILE_GetGroupOwner(data.fileList[i]); data.groupOwner = FILE_GetGroupOwner(data.fileList[i], &*memoryTable);
data.fileNameWithPath = data.fileList[i]; data.fileNameWithPath = data.fileList[i];
data.fileNameNoPath = FILE_GetFilenameFromPath(data.fileList[i]); data.fileNameNoPath = FILE_GetFilenameFromPath(data.fileList[i]);
data.inodePermissionString = FILE_GetListPermissionsString(data.fileList[i]); data.inodePermissionString = FILE_GetListPermissionsString(data.fileList[i], &*memoryTable);
data.lastModifiedData = FILE_GetLastModifiedData(data.fileList[i]); data.lastModifiedData = FILE_GetLastModifiedData(data.fileList[i]);
if (strlen(data.fileNameNoPath) > 0) if (strlen(data.fileNameNoPath) > 0)
{ {
data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, &*memoryTable); data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, &*memoryTable, "FinalStringPath");
strcpy(data.finalStringPath, data.fileNameNoPath); strcpy(data.finalStringPath, data.fileNameNoPath);
} }
@ -496,7 +496,7 @@ void getListDataInfo(char * thePath, DYNV_VectorGenericDataType *directoryInfo,
{ {
int len = 0; int len = 0;
data.isLink = 1; data.isLink = 1;
data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), &*memoryTable); data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), &*memoryTable, "data.linkPath");
if ((len = readlink (data.fileList[i], data.linkPath, CLIENT_COMMAND_STRING_SIZE)) > 0) if ((len = readlink (data.fileList[i], data.linkPath, CLIENT_COMMAND_STRING_SIZE)) > 0)
{ {
data.linkPath[len] = 0; data.linkPath[len] = 0;
@ -529,38 +529,38 @@ void getListDataInfo(char * thePath, DYNV_VectorGenericDataType *directoryInfo,
} }
} }
void deleteListDataInfoVector(void *TheElementToDelete) void deleteListDataInfoVector(DYNV_VectorGenericDataType *theVector)
{ {
ftpListDataType *data = (ftpListDataType *)TheElementToDelete;
if (data->owner != NULL) int i;
for (i = 0; i < theVector->Size; i++)
{ {
free(data->owner); ftpListDataType *data = (ftpListDataType *)theVector->Data[i];
}
if (data->groupOwner != NULL)
{
free(data->groupOwner);
}
if (data->inodePermissionString != NULL) if (data->owner != NULL)
{ {
free(data->inodePermissionString); DYNMEM_free(data->owner, &theVector->memoryTable);
} }
if (data->groupOwner != NULL)
if (data->fileNameWithPath != NULL) {
{ DYNMEM_free(data->groupOwner, &theVector->memoryTable);
free(data->fileNameWithPath); }
} if (data->inodePermissionString != NULL)
{
if (data->finalStringPath != NULL) DYNMEM_free(data->inodePermissionString, &theVector->memoryTable);
{ }
free(data->finalStringPath); if (data->fileNameWithPath != NULL)
} {
DYNMEM_free(data->fileNameWithPath, &theVector->memoryTable);
if (data->linkPath != NULL) }
{ if (data->finalStringPath != NULL)
free(data->linkPath); {
DYNMEM_free(data->finalStringPath, &theVector->memoryTable);
}
if (data->linkPath != NULL)
{
DYNMEM_free(data->linkPath, &theVector->memoryTable);
}
} }
} }
@ -632,7 +632,7 @@ void resetWorkerData(ftpDataType *data, int clientId, int isInitialization)
{ {
lastToDestroy = ((ftpListDataType *)data->clients[clientId].workerData.directoryInfo.Data[0])->fileList; lastToDestroy = ((ftpListDataType *)data->clients[clientId].workerData.directoryInfo.Data[0])->fileList;
data->clients[clientId].workerData.directoryInfo.Destroy(&data->clients[clientId].workerData.directoryInfo, deleteListDataInfoVector); data->clients[clientId].workerData.directoryInfo.Destroy(&data->clients[clientId].workerData.directoryInfo, deleteListDataInfoVector);
free(lastToDestroy); DYNMEM_free(lastToDestroy, &data->clients[clientId].workerData.memoryTable);
} }
#ifdef OPENSSL_ENABLED #ifdef OPENSSL_ENABLED
@ -706,6 +706,9 @@ void resetClientData(ftpDataType *data, int clientId, int isInitialization)
//data->clients[clientId].workerData.ssl = SSL_new(data->ctx); //data->clients[clientId].workerData.ssl = SSL_new(data->ctx);
data->clients[clientId].ssl = SSL_new(data->serverCtx); data->clients[clientId].ssl = SSL_new(data->serverCtx);
#endif #endif
printf("\nclient memory table :%lld", data->clients[clientId].memoryTable);
} }
int compareStringCaseInsensitive(char * stringIn, char * stringRef, int stringLenght) int compareStringCaseInsensitive(char * stringIn, char * stringRef, int stringLenght)

View File

@ -273,7 +273,7 @@ int writeListDataInfoToSocket(ftpDataType *data, int clientId, int *filesNumber,
int searchInLoginFailsVector(void *loginFailsVector, void *element); int searchInLoginFailsVector(void *loginFailsVector, void *element);
void deleteLoginFailsData(void *element); void deleteLoginFailsData(void *element);
void deleteListDataInfoVector(void *TheElementToDelete); void deleteListDataInfoVector(DYNV_VectorGenericDataType *theVector);
void resetWorkerData(ftpDataType *data, int clientId, int isInitialization); void resetWorkerData(ftpDataType *data, int clientId, int isInitialization);
void resetClientData(ftpDataType *data, int clientId, int isInitialization); void resetClientData(ftpDataType *data, int clientId, int isInitialization);
int compareStringCaseInsensitive(char *stringIn, char* stringRef, int stringLenght); int compareStringCaseInsensitive(char *stringIn, char* stringRef, int stringLenght);

View File

@ -115,6 +115,11 @@ void workerCleanup(void *socketId)
returnCode = close(ftpData.clients[theSocketId].workerData.passiveListeningSocket); returnCode = close(ftpData.clients[theSocketId].workerData.passiveListeningSocket);
resetWorkerData(&ftpData, theSocketId, 0); resetWorkerData(&ftpData, theSocketId, 0);
printf("\nWorker cleaned!"); printf("\nWorker cleaned!");
printf("\nWorker memory table :%lld", ftpData.clients[theSocketId].workerData.memoryTable);
if (ftpData.clients[theSocketId].workerData.memoryTable != NULL)
printf("\nMemory table element label: %s", ftpData.clients[theSocketId].workerData.memoryTable->theName);
else
printf("\nNo data to print");
} }
void *connectionWorkerHandle(void * socketId) void *connectionWorkerHandle(void * socketId)
@ -466,7 +471,7 @@ void runFtpServer(void)
signalHandlerInstall(); signalHandlerInstall();
/*Read the configuration file */ /*Read the configuration file */
configurationRead(&ftpData.ftpParameters); configurationRead(&ftpData.ftpParameters, &ftpData.generalDynamicMemoryTable);
/* apply the reden configuration */ /* apply the reden configuration */
applyConfiguration(&ftpData.ftpParameters); applyConfiguration(&ftpData.ftpParameters);
@ -487,9 +492,26 @@ void runFtpServer(void)
//Endless loop ftp process //Endless loop ftp process
while (1) while (1)
{ {
printf("\nUsed memory : %lld", DYNMEM_GetTotalMemory()); printf("\nUsed memory : %lld", DYNMEM_GetTotalMemory());
int memCount = 0;
for (memCount = 0; memCount < ftpData.ftpParameters.maxClients; memCount++)
{
if (ftpData.clients[memCount].memoryTable != NULL)
{
printf("\nftpData.clients[%d].memoryTable = %s", memCount, ftpData.clients[memCount].memoryTable->theName);
}
if (ftpData.clients[memCount].workerData.memoryTable != NULL)
{
printf("\nftpData.clients[%d].workerData.memoryTable = %s", memCount, ftpData.clients[memCount].workerData.memoryTable->theName);
}
if (ftpData.clients[memCount].workerData.directoryInfo.memoryTable != NULL)
{
printf("\nftpData.clients[%d].workerData.directoryInfo.memoryTable = %s", memCount, ftpData.clients[memCount].workerData.directoryInfo.memoryTable->theName);
}
}
/* waits for socket activity, if no activity then checks for client socket timeouts */ /* waits for socket activity, if no activity then checks for client socket timeouts */
if (selectWait(&ftpData) == 0) if (selectWait(&ftpData) == 0)
{ {
@ -886,8 +908,13 @@ void deallocateMemory(void)
DYNMEM_freeAll(&ftpData.clients[i].workerData.memoryTable); DYNMEM_freeAll(&ftpData.clients[i].workerData.memoryTable);
} }
DYNMEM_freeAll(&ftpData.loginFailsVector.memoryTable);
DYNMEM_freeAll(&ftpData.ftpParameters.usersVector.memoryTable); DYNMEM_freeAll(&ftpData.ftpParameters.usersVector.memoryTable);
DYNMEM_freeAll(&ftpData.generalDynamicMemoryTable); DYNMEM_freeAll(&ftpData.generalDynamicMemoryTable);
printf("\n\nUsed memory at end: %lld", DYNMEM_GetTotalMemory());
//printf("\n ftpData.generalDynamicMemoryTable = %ld", ftpData.generalDynamicMemoryTable); //printf("\n ftpData.generalDynamicMemoryTable = %ld", ftpData.generalDynamicMemoryTable);
#ifdef OPENSSL_ENABLED #ifdef OPENSSL_ENABLED
SSL_CTX_free(ftpData.serverCtx); SSL_CTX_free(ftpData.serverCtx);

View File

@ -40,7 +40,7 @@
/* Private Functions */ /* Private Functions */
static int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGenericDataType *parametersVector); static int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGenericDataType *parametersVector);
static int searchParameter(char *name, DYNV_VectorGenericDataType *parametersVector); static int searchParameter(char *name, DYNV_VectorGenericDataType *parametersVector);
static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector); static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector, DYNMEM_MemoryTable_DataType ** memoryTable);
void destroyConfigurationVectorElement(DYNV_VectorGenericDataType *theVector) void destroyConfigurationVectorElement(DYNV_VectorGenericDataType *theVector)
{ {
@ -72,7 +72,7 @@ int searchUser(char *name, DYNV_VectorGenericDataType *usersVector)
return returnCode; return returnCode;
} }
void configurationRead(ftpParameters_DataType *ftpParameters) void configurationRead(ftpParameters_DataType *ftpParameters, DYNMEM_MemoryTable_DataType **memoryTable)
{ {
int returnCode = 0; int returnCode = 0;
DYNV_VectorGenericDataType configParameters; DYNV_VectorGenericDataType configParameters;
@ -81,12 +81,12 @@ void configurationRead(ftpParameters_DataType *ftpParameters)
if (FILE_IsFile(LOCAL_CONFIGURATION_FILENAME) == 1) if (FILE_IsFile(LOCAL_CONFIGURATION_FILENAME) == 1)
{ {
printf("\nReading configuration from \n -> %s \n", LOCAL_CONFIGURATION_FILENAME); printf("\nReading configuration from \n -> %s \n", LOCAL_CONFIGURATION_FILENAME);
returnCode = readConfigurationFile(LOCAL_CONFIGURATION_FILENAME, &configParameters); returnCode = readConfigurationFile(LOCAL_CONFIGURATION_FILENAME, &configParameters, &*memoryTable);
} }
else if (FILE_IsFile(DEFAULT_CONFIGURATION_FILENAME) == 1) else if (FILE_IsFile(DEFAULT_CONFIGURATION_FILENAME) == 1)
{ {
printf("\nReading configuration from \n -> %s\n", DEFAULT_CONFIGURATION_FILENAME); printf("\nReading configuration from \n -> %s\n", DEFAULT_CONFIGURATION_FILENAME);
returnCode = readConfigurationFile(DEFAULT_CONFIGURATION_FILENAME, &configParameters); returnCode = readConfigurationFile(DEFAULT_CONFIGURATION_FILENAME, &configParameters, &*memoryTable);
} }
if (returnCode == 1) if (returnCode == 1)
@ -142,7 +142,7 @@ void initFtpData(ftpDataType *ftpData)
#endif #endif
ftpData->connectedClients = 0; ftpData->connectedClients = 0;
ftpData->clients = (clientDataType *) DYNMEM_malloc((sizeof(clientDataType) * ftpData->ftpParameters.maxClients), &ftpData->generalDynamicMemoryTable); ftpData->clients = (clientDataType *) DYNMEM_malloc((sizeof(clientDataType) * ftpData->ftpParameters.maxClients), &ftpData->generalDynamicMemoryTable, "ClientData");
//printf("\nDYNMEM_malloc called"); //printf("\nDYNMEM_malloc called");
//printf("\nElement location: %ld", (long int) ftpData->generalDynamicMemoryTable); //printf("\nElement location: %ld", (long int) ftpData->generalDynamicMemoryTable);
@ -175,7 +175,7 @@ void initFtpData(ftpDataType *ftpData)
} }
/*Private functions*/ /*Private functions*/
static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector) static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector, DYNMEM_MemoryTable_DataType ** memoryTable)
{ {
#define STATE_START 0 #define STATE_START 0
#define STATE_NAME 1 #define STATE_NAME 1
@ -187,7 +187,7 @@ static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *paramet
int i, state, nameIndex, valueIndex, allowSpacesInValue; int i, state, nameIndex, valueIndex, allowSpacesInValue;
char * theFileContent; char * theFileContent;
theFileSize = FILE_GetStringFromFile(path, &theFileContent); theFileSize = FILE_GetStringFromFile(path, &theFileContent, &*memoryTable);
char name[PARAMETER_SIZE_LIMIT]; char name[PARAMETER_SIZE_LIMIT];
char value[PARAMETER_SIZE_LIMIT]; char value[PARAMETER_SIZE_LIMIT];
@ -325,8 +325,8 @@ static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *paramet
case STATE_STORE: case STATE_STORE:
{ {
parameter_DataType parameter; parameter_DataType parameter;
parameter.name = DYNMEM_malloc(nameIndex+1, &parametersVector->memoryTable); parameter.name = DYNMEM_malloc(nameIndex+1, &parametersVector->memoryTable, "readConfig");
parameter.value = DYNMEM_malloc(valueIndex+1, &parametersVector->memoryTable); parameter.value = DYNMEM_malloc(valueIndex+1, &parametersVector->memoryTable, "readConfig");
strcpy(parameter.name, name); strcpy(parameter.name, name);
strcpy(parameter.value, value); strcpy(parameter.value, value);
parameter.name[nameIndex] = '\0'; parameter.name[nameIndex] = '\0';
@ -348,8 +348,8 @@ static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *paramet
valueIndex > 0) valueIndex > 0)
{ {
parameter_DataType parameter; parameter_DataType parameter;
parameter.name = DYNMEM_malloc(nameIndex+1, &parametersVector->memoryTable); parameter.name = DYNMEM_malloc(nameIndex+1, &parametersVector->memoryTable, "readConfig");
parameter.value = DYNMEM_malloc(valueIndex+1, &parametersVector->memoryTable); parameter.value = DYNMEM_malloc(valueIndex+1, &parametersVector->memoryTable, "readConfig");
strcpy(parameter.name, name); strcpy(parameter.name, name);
strcpy(parameter.value, value); strcpy(parameter.value, value);
parameter.name[nameIndex] = '\0'; parameter.name[nameIndex] = '\0';
@ -364,7 +364,7 @@ static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *paramet
if (theFileSize > 0) if (theFileSize > 0)
{ {
free(theFileContent); DYNMEM_free(theFileContent, &*memoryTable);
} }
return 1; return 1;
@ -578,9 +578,9 @@ static int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_Ve
userData.ownerShip.groupOwnerString = NULL; userData.ownerShip.groupOwnerString = NULL;
userData.ownerShip.userOwnerString = NULL; userData.ownerShip.userOwnerString = NULL;
userData.name = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchUserIndex])->value) + 1), &ftpParameters->usersVector.memoryTable); userData.name = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchUserIndex])->value) + 1), &ftpParameters->usersVector.memoryTable, "userData");
userData.password = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchPasswordIndex])->value) + 1), &ftpParameters->usersVector.memoryTable); userData.password = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchPasswordIndex])->value) + 1), &ftpParameters->usersVector.memoryTable, "userData");
userData.homePath = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchHomeIndex])->value) + 1), &ftpParameters->usersVector.memoryTable); userData.homePath = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchHomeIndex])->value) + 1), &ftpParameters->usersVector.memoryTable, "userData");
strcpy(userData.name, ((parameter_DataType *) parametersVector->Data[searchUserIndex])->value); strcpy(userData.name, ((parameter_DataType *) parametersVector->Data[searchUserIndex])->value);
strcpy(userData.password, ((parameter_DataType *) parametersVector->Data[searchPasswordIndex])->value); strcpy(userData.password, ((parameter_DataType *) parametersVector->Data[searchPasswordIndex])->value);
@ -593,8 +593,8 @@ static int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_Ve
if (searchUserOwnerIndex != -1 && if (searchUserOwnerIndex != -1 &&
searchGroupOwnerIndex != -1) searchGroupOwnerIndex != -1)
{ {
userData.ownerShip.groupOwnerString = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchGroupOwnerIndex])->value) + 1), &ftpParameters->usersVector.memoryTable); userData.ownerShip.groupOwnerString = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchGroupOwnerIndex])->value) + 1), &ftpParameters->usersVector.memoryTable, "userOwnershipData");
userData.ownerShip.userOwnerString = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchUserOwnerIndex])->value) + 1), &ftpParameters->usersVector.memoryTable); userData.ownerShip.userOwnerString = DYNMEM_malloc((strlen(((parameter_DataType *) parametersVector->Data[searchUserOwnerIndex])->value) + 1), &ftpParameters->usersVector.memoryTable, "userOwnershipData");
strcpy(userData.ownerShip.groupOwnerString, ((parameter_DataType *) parametersVector->Data[searchGroupOwnerIndex])->value); strcpy(userData.ownerShip.groupOwnerString, ((parameter_DataType *) parametersVector->Data[searchGroupOwnerIndex])->value);
strcpy(userData.ownerShip.userOwnerString, ((parameter_DataType *) parametersVector->Data[searchUserOwnerIndex])->value); strcpy(userData.ownerShip.userOwnerString, ((parameter_DataType *) parametersVector->Data[searchUserOwnerIndex])->value);

View File

@ -30,6 +30,7 @@ extern "C" {
#endif #endif
#include "dynamicVectors.h" #include "dynamicVectors.h"
#include "dynamicMemory.h"
#include "../ftpData.h" #include "../ftpData.h"
#define DEFAULT_CONFIGURATION_FILENAME "/etc/uftpd.cfg" #define DEFAULT_CONFIGURATION_FILENAME "/etc/uftpd.cfg"
@ -39,7 +40,7 @@ extern "C" {
/*Public functions */ /*Public functions */
void initFtpData(ftpDataType *ftpData); void initFtpData(ftpDataType *ftpData);
int searchUser(char *name, DYNV_VectorGenericDataType *usersVector); int searchUser(char *name, DYNV_VectorGenericDataType *usersVector);
void configurationRead(ftpParameters_DataType *ftpParameters); void configurationRead(ftpParameters_DataType *ftpParameters, DYNMEM_MemoryTable_DataType **memoryTable);
void applyConfiguration(ftpParameters_DataType *ftpParameters); void applyConfiguration(ftpParameters_DataType *ftpParameters);

View File

@ -8,6 +8,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <pthread.h> #include <pthread.h>
#include <string.h>
#include "dynamicMemory.h" #include "dynamicMemory.h"
#include "errorHandling.h" #include "errorHandling.h"
@ -53,7 +54,7 @@ unsigned long long int DYNMEM_DecreaseMemoryCounter(unsigned long long int theSi
return theTotalMemory; return theTotalMemory;
} }
void *DYNMEM_malloc(size_t bytes, DYNMEM_MemoryTable_DataType **memoryListHead) void *DYNMEM_malloc(size_t bytes, DYNMEM_MemoryTable_DataType **memoryListHead, char * theName)
{ {
void *memory = NULL; void *memory = NULL;
DYNMEM_MemoryTable_DataType *newItem = NULL; DYNMEM_MemoryTable_DataType *newItem = NULL;
@ -74,6 +75,7 @@ void *DYNMEM_malloc(size_t bytes, DYNMEM_MemoryTable_DataType **memoryListHead)
newItem->size = bytes; newItem->size = bytes;
newItem->nextElement = NULL; newItem->nextElement = NULL;
newItem->previousElement = NULL; newItem->previousElement = NULL;
strncpy(newItem->theName, theName, 20);
if( (*memoryListHead) != NULL) if( (*memoryListHead) != NULL)
{ {
@ -180,11 +182,11 @@ void DYNMEM_free(void *f_address, DYNMEM_MemoryTable_DataType ** memoryListHead)
if(!found) if(!found)
{ {
printf("\n\nMemory address : %ld not found\n\n", f_address); //printf("\n\nMemory address : %ld not found\n\n", f_address);
//fflush(0); //fflush(0);
//Debug TRAP //Debug TRAP
//char *theData ="c"; char *theData ="c";
//strcpy(theData, "ciaociaociao"); strcpy(theData, "ciaociaociao");
report_error_q("Unable to free memory not previously allocated",__FILE__,__LINE__, 1); report_error_q("Unable to free memory not previously allocated",__FILE__,__LINE__, 1);
// Report this as an error // Report this as an error
} }
@ -209,15 +211,18 @@ void DYNMEM_free(void *f_address, DYNMEM_MemoryTable_DataType ** memoryListHead)
void DYNMEM_freeAll(DYNMEM_MemoryTable_DataType **memoryListHead) void DYNMEM_freeAll(DYNMEM_MemoryTable_DataType **memoryListHead)
{ {
printf("\nDYNMEM_freeAll called");
printf("\nElement size: %ld", (*memoryListHead)->size);
printf("\nElement address: %ld", (long int) (*memoryListHead)->address);
printf("\nElement nextElement: %ld",(long int) (*memoryListHead)->nextElement);
printf("\nElement previousElement: %ld",(long int) (*memoryListHead)->previousElement);
DYNMEM_MemoryTable_DataType *temp = NULL; DYNMEM_MemoryTable_DataType *temp = NULL;
while((*memoryListHead) != NULL) while((*memoryListHead) != NULL)
{ {
printf("\nDYNMEM_freeAll called");
printf("\nElement size: %ld", (*memoryListHead)->size);
printf("\nElement address: %ld", (long int) (*memoryListHead)->address);
printf("\nElement nextElement: %ld",(long int) (*memoryListHead)->nextElement);
printf("\nElement previousElement: %ld",(long int) (*memoryListHead)->previousElement);
DYNMEM_DecreaseMemoryCounter((*memoryListHead)->size + sizeof(DYNMEM_MemoryTable_DataType));
printf("\nFree table element"); printf("\nFree table element");
free((*memoryListHead)->address); free((*memoryListHead)->address);
temp = (*memoryListHead)->nextElement; temp = (*memoryListHead)->nextElement;

View File

@ -10,6 +10,7 @@
typedef struct DYNMEM_MemoryTable_DataType typedef struct DYNMEM_MemoryTable_DataType
{ {
char theName[20];
void *address; void *address;
size_t size; size_t size;
struct DYNMEM_MemoryTable_DataType *nextElement; struct DYNMEM_MemoryTable_DataType *nextElement;
@ -21,7 +22,7 @@ unsigned long long int DYNMEM_IncreaseMemoryCounter(unsigned long long int theSi
unsigned long long int DYNMEM_DecreaseMemoryCounter(unsigned long long int theSize); unsigned long long int DYNMEM_DecreaseMemoryCounter(unsigned long long int theSize);
void DYNMEM_Init(void); void DYNMEM_Init(void);
void *DYNMEM_malloc(size_t bytes, DYNMEM_MemoryTable_DataType ** memoryListHead); void *DYNMEM_malloc(size_t bytes, DYNMEM_MemoryTable_DataType ** memoryListHead, char * theName);
void *DYNMEM_realloc(void *theMemoryAddress, size_t bytes, DYNMEM_MemoryTable_DataType **memoryListHead); void *DYNMEM_realloc(void *theMemoryAddress, size_t bytes, DYNMEM_MemoryTable_DataType **memoryListHead);
void DYNMEM_free(void *f_address, DYNMEM_MemoryTable_DataType ** memoryListHead); void DYNMEM_free(void *f_address, DYNMEM_MemoryTable_DataType ** memoryListHead);
void DYNMEM_freeAll(DYNMEM_MemoryTable_DataType ** memoryListHead); void DYNMEM_freeAll(DYNMEM_MemoryTable_DataType ** memoryListHead);

View File

@ -60,7 +60,7 @@ void DYNV_VectorGeneric_PushBack(DYNV_VectorGenericDataType *TheVectorGeneric, v
} }
else else
{ {
TheVectorGeneric->Data = (void **) DYNMEM_malloc (sizeof(void *) * (TheVectorGeneric->Size+1), &TheVectorGeneric->memoryTable); TheVectorGeneric->Data = (void **) DYNMEM_malloc (sizeof(void *) * (TheVectorGeneric->Size+1), &TheVectorGeneric->memoryTable, "pushback");
} }
if (TheVectorGeneric->ElementSize != NULL) if (TheVectorGeneric->ElementSize != NULL)
@ -69,10 +69,10 @@ void DYNV_VectorGeneric_PushBack(DYNV_VectorGenericDataType *TheVectorGeneric, v
} }
else else
{ {
TheVectorGeneric->ElementSize = (int *) DYNMEM_malloc (sizeof(int), &TheVectorGeneric->memoryTable); TheVectorGeneric->ElementSize = (int *) DYNMEM_malloc (sizeof(int), &TheVectorGeneric->memoryTable, "PushBack");
} }
TheVectorGeneric->Data[TheVectorGeneric->Size] = (void *) DYNMEM_malloc(TheElementSize, &TheVectorGeneric->memoryTable); TheVectorGeneric->Data[TheVectorGeneric->Size] = (void *) DYNMEM_malloc(TheElementSize, &TheVectorGeneric->memoryTable, "pushback");
memcpy(TheVectorGeneric->Data[TheVectorGeneric->Size], TheElementData, TheElementSize); memcpy(TheVectorGeneric->Data[TheVectorGeneric->Size], TheElementData, TheElementSize);
TheVectorGeneric->ElementSize[TheVectorGeneric->Size] = TheElementSize; TheVectorGeneric->ElementSize[TheVectorGeneric->Size] = TheElementSize;
TheVectorGeneric->Size++; TheVectorGeneric->Size++;
@ -198,7 +198,7 @@ void DYNV_VectorString_PushBack(DYNV_VectorString_DataType *TheVector, char * Th
} }
else else
{ {
TheVector->Data = (char **) DYNMEM_malloc (sizeof(char *) * (TheVector->Size+1), &TheVector->memoryTable); TheVector->Data = (char **) DYNMEM_malloc (sizeof(char *) * (TheVector->Size+1), &TheVector->memoryTable, "pushback");
} }
if (TheVector->ElementSize != NULL) if (TheVector->ElementSize != NULL)
@ -207,10 +207,10 @@ void DYNV_VectorString_PushBack(DYNV_VectorString_DataType *TheVector, char * Th
} }
else else
{ {
TheVector->ElementSize = (int *) DYNMEM_malloc (sizeof(int) * 1, &TheVector->memoryTable); TheVector->ElementSize = (int *) DYNMEM_malloc (sizeof(int) * 1, &TheVector->memoryTable, "pushback");
} }
TheVector->Data[TheVector->Size] = (char *) DYNMEM_malloc((StringLenght + 1), &TheVector->memoryTable); TheVector->Data[TheVector->Size] = (char *) DYNMEM_malloc((StringLenght + 1), &TheVector->memoryTable, "pushback");
for (i = 0; i < StringLenght; i++ ) for (i = 0; i < StringLenght; i++ )
{ {

View File

@ -52,7 +52,7 @@ struct DYNV_VectorGenericDataStruct
void (*PushBack)(void *TheVectorGeneric, void * TheElementData, int TheElementSize); void (*PushBack)(void *TheVectorGeneric, void * TheElementData, int TheElementSize);
void (*PopBack)(void *TheVector, void (*DeleteElement)(void *TheElementToDelete)); void (*PopBack)(void *TheVector, void (*DeleteElement)(void *TheElementToDelete));
void (*SoftPopBack)(void *TheVector); void (*SoftPopBack)(void *TheVector);
void (*Destroy)(void *TheVector, void (*DeleteElement)(void *TheElementToDelete)); void (*Destroy)(void *TheVector, void (*DeleteElement)(struct DYNV_VectorGenericDataStruct *TheElementToDelete));
void (*SoftDestroy)(void *TheVector); void (*SoftDestroy)(void *TheVector);
void (*DeleteAt)(void *TheVector, int index, void (*DeleteElement)(void *TheElementToDelete)); void (*DeleteAt)(void *TheVector, int index, void (*DeleteElement)(void *TheElementToDelete));
int (*SearchElement)(void *TheVectorGeneric, void * TheElementData); int (*SearchElement)(void *TheVectorGeneric, void * TheElementData);

View File

@ -40,7 +40,6 @@
#include "dynamicMemory.h" #include "dynamicMemory.h"
static int FILE_CompareString(const void * a, const void * b); static int FILE_CompareString(const void * a, const void * b);
static int FILE_CompareString(const void * a, const void * b) static int FILE_CompareString(const void * a, const void * b)
{ {
return strcmp (*(const char **) a, *(const char **) b); return strcmp (*(const char **) a, *(const char **) b);
@ -186,14 +185,14 @@ int FILE_IsFile(const char *TheFileName)
return 0; return 0;
} }
void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, int * FilesandFolders, int Recursive) void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, int * FilesandFolders, int Recursive, DYNMEM_MemoryTable_DataType ** memoryTable)
{ {
int FileAndFolderIndex = *FilesandFolders; int FileAndFolderIndex = *FilesandFolders;
//Allocate the array for the 1st time //Allocate the array for the 1st time
if (*InodeList == NULL) if (*InodeList == NULL)
{ {
(*InodeList) = (char **) malloc(sizeof(char *) * (1)); (*InodeList) = (char **) DYNMEM_malloc(sizeof(char *) * (1), &*memoryTable, "InodeList");
} }
@ -218,10 +217,10 @@ void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, i
//Set the row to needed size //Set the row to needed size
int ReallocSize = sizeof(char *) * (FileAndFolderIndex+1)+1; int ReallocSize = sizeof(char *) * (FileAndFolderIndex+1)+1;
(*InodeList) = (char ** ) realloc((*InodeList), ReallocSize ); (*InodeList) = (char ** ) DYNMEM_realloc((*InodeList), ReallocSize, &*memoryTable);
int nsize = strlen(dir->d_name) * sizeof(char) + strlen(DirectoryInodeName) * sizeof(char) + 2; int nsize = strlen(dir->d_name) * sizeof(char) + strlen(DirectoryInodeName) * sizeof(char) + 2;
//Allocate the path string size //Allocate the path string size
(*InodeList)[FileAndFolderIndex] = (char *) malloc ( nsize ); (*InodeList)[FileAndFolderIndex] = (char *) DYNMEM_malloc (nsize , &*memoryTable, "InodeList");
strcpy((*InodeList)[FileAndFolderIndex], DirectoryInodeName ); strcpy((*InodeList)[FileAndFolderIndex], DirectoryInodeName );
strcat((*InodeList)[FileAndFolderIndex], "/" ); strcat((*InodeList)[FileAndFolderIndex], "/" );
strcat((*InodeList)[FileAndFolderIndex], dir->d_name ); strcat((*InodeList)[FileAndFolderIndex], dir->d_name );
@ -231,7 +230,7 @@ void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, i
if ( Recursive == 1 && FILE_IsDirectory((*InodeList)[*FilesandFolders-1]) == 1 ) if ( Recursive == 1 && FILE_IsDirectory((*InodeList)[*FilesandFolders-1]) == 1 )
{ {
FILE_GetDirectoryInodeList ( (*InodeList)[FileAndFolderIndex-1], InodeList, FilesandFolders, Recursive ); FILE_GetDirectoryInodeList ( (*InodeList)[FileAndFolderIndex-1], InodeList, FilesandFolders, Recursive, &*memoryTable);
FileAndFolderIndex = (*FilesandFolders); FileAndFolderIndex = (*FilesandFolders);
} }
@ -245,10 +244,10 @@ void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, i
{ {
printf("\nAdding single file to inode list: %s", DirectoryInodeName); printf("\nAdding single file to inode list: %s", DirectoryInodeName);
int ReallocSize = sizeof(char *) * (FileAndFolderIndex+1)+1; int ReallocSize = sizeof(char *) * (FileAndFolderIndex+1)+1;
(*InodeList) = (char ** ) realloc((*InodeList), ReallocSize ); (*InodeList) = (char ** ) DYNMEM_realloc((*InodeList), ReallocSize, &*memoryTable);
int nsize = strlen(DirectoryInodeName) * sizeof(char) + 2; int nsize = strlen(DirectoryInodeName) * sizeof(char) + 2;
(*InodeList)[FileAndFolderIndex] = (char *) malloc ( nsize ); (*InodeList)[FileAndFolderIndex] = (char *) DYNMEM_malloc (nsize, &*memoryTable, "InodeList");
strcpy((*InodeList)[FileAndFolderIndex], DirectoryInodeName ); strcpy((*InodeList)[FileAndFolderIndex], DirectoryInodeName );
(*InodeList)[FileAndFolderIndex][strlen(DirectoryInodeName)] = '\0'; (*InodeList)[FileAndFolderIndex][strlen(DirectoryInodeName)] = '\0';
(*FilesandFolders)++; (*FilesandFolders)++;
@ -260,7 +259,6 @@ void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, i
//No valid path specified, returns zero elements //No valid path specified, returns zero elements
(*FilesandFolders) = 0; (*FilesandFolders) = 0;
} }
} }
int FILE_GetDirectoryInodeCount(char * DirectoryInodeName) int FILE_GetDirectoryInodeCount(char * DirectoryInodeName)
@ -291,7 +289,7 @@ int FILE_GetDirectoryInodeCount(char * DirectoryInodeName)
return FileAndFolderIndex; return FileAndFolderIndex;
} }
int FILE_GetStringFromFile(char * filename, char **file_content) int FILE_GetStringFromFile(char * filename, char **file_content, DYNMEM_MemoryTable_DataType ** memoryTable)
{ {
long long int file_size = 0; long long int file_size = 0;
int c, count; int c, count;
@ -321,7 +319,7 @@ int FILE_GetStringFromFile(char * filename, char **file_content)
file_size = FILE_GetFileSize(file); file_size = FILE_GetFileSize(file);
count = 0; count = 0;
*file_content = (char *) malloc(file_size * sizeof(char) + 100); *file_content = (char *) DYNMEM_malloc((file_size * sizeof(char) + 100), &*memoryTable, "getstringfromfile");
while ((c = fgetc(file)) != EOF) while ((c = fgetc(file)) != EOF)
{ {
@ -531,9 +529,9 @@ char * FILE_GetFilenameFromPath(char * FileName)
return TheStr; return TheStr;
} }
char * FILE_GetListPermissionsString(char *file) { char * FILE_GetListPermissionsString(char *file, DYNMEM_MemoryTable_DataType ** memoryTable) {
struct stat st, stl; struct stat st, stl;
char *modeval = malloc(sizeof(char) * 10 + 1); char *modeval = DYNMEM_malloc(sizeof(char) * 10 + 1, &*memoryTable, "getperm");
if(stat(file, &st) == 0) if(stat(file, &st) == 0)
{ {
mode_t perm = st.st_mode; mode_t perm = st.st_mode;
@ -563,7 +561,7 @@ char * FILE_GetListPermissionsString(char *file) {
return modeval; return modeval;
} }
char * FILE_GetOwner(char *fileName) char * FILE_GetOwner(char *fileName, DYNMEM_MemoryTable_DataType **memoryTable)
{ {
int returnCode = 0; int returnCode = 0;
char *toReturn; char *toReturn;
@ -576,13 +574,13 @@ char * FILE_GetOwner(char *fileName)
if ( (pw = getpwuid(info.st_uid)) == NULL) if ( (pw = getpwuid(info.st_uid)) == NULL)
return NULL; return NULL;
toReturn = (char *) malloc (strlen(pw->pw_name) + 1); toReturn = (char *) DYNMEM_malloc (strlen(pw->pw_name) + 1, &*memoryTable, "getowner");
strcpy(toReturn, pw->pw_name); strcpy(toReturn, pw->pw_name);
return toReturn; return toReturn;
} }
char * FILE_GetGroupOwner(char *fileName) char * FILE_GetGroupOwner(char *fileName, DYNMEM_MemoryTable_DataType **memoryTable)
{ {
char *toReturn; char *toReturn;
struct stat info; struct stat info;
@ -593,7 +591,7 @@ char * FILE_GetGroupOwner(char *fileName)
if ((gr = getgrgid(info.st_gid)) == NULL) if ((gr = getgrgid(info.st_gid)) == NULL)
return NULL; return NULL;
toReturn = (char *) malloc (strlen(gr->gr_name) + 1); toReturn = (char *) DYNMEM_malloc (strlen(gr->gr_name) + 1, &*memoryTable, "getowner");
strcpy(toReturn, gr->gr_name); strcpy(toReturn, gr->gr_name);
return toReturn; return toReturn;
@ -616,7 +614,7 @@ void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTab
(*sourceString)[theNewSize] = '\0'; (*sourceString)[theNewSize] = '\0';
} }
void FILE_DirectoryToParent(char ** sourceString) void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable)
{ {
//printf("\n"); //printf("\n");
int i = 0, theLastSlash = -1, strLen = 0; int i = 0, theLastSlash = -1, strLen = 0;
@ -641,7 +639,7 @@ void FILE_DirectoryToParent(char ** sourceString)
{ {
theNewSize = 1; theNewSize = 1;
} }
*sourceString = realloc(*sourceString, theNewSize+1); *sourceString = DYNMEM_realloc(*sourceString, theNewSize+1, &*memoryTable);
(*sourceString)[theNewSize] = '\0'; (*sourceString)[theNewSize] = '\0';
} }
} }

View File

@ -53,19 +53,19 @@
long long int FILE_GetFileSizeFromPath(char *TheFileName); long long int FILE_GetFileSizeFromPath(char *TheFileName);
int FILE_IsFile(const char *theFileName); int FILE_IsFile(const char *theFileName);
int FILE_IsDirectory (char *directory_path); int FILE_IsDirectory (char *directory_path);
void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, int * filesandfolders, int recursive); void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, int * filesandfolders, int recursive, DYNMEM_MemoryTable_DataType ** memoryTable);
int FILE_GetDirectoryInodeCount(char * DirectoryInodeName); int FILE_GetDirectoryInodeCount(char * DirectoryInodeName);
int FILE_GetStringFromFile(char * filename, char **file_content); int FILE_GetStringFromFile(char * filename, char **file_content, DYNMEM_MemoryTable_DataType ** memoryTable);
void FILE_ReadStringParameters(char * filename, DYNV_VectorGenericDataType *ParametersVector); void FILE_ReadStringParameters(char * filename, DYNV_VectorGenericDataType *ParametersVector);
int FILE_StringParametersLinearySearch(DYNV_VectorGenericDataType *TheVectorGeneric, void * name); int FILE_StringParametersLinearySearch(DYNV_VectorGenericDataType *TheVectorGeneric, void * name);
int FILE_StringParametersBinarySearch(DYNV_VectorGenericDataType *TheVectorGeneric, void * Needle); int FILE_StringParametersBinarySearch(DYNV_VectorGenericDataType *TheVectorGeneric, void * Needle);
char * FILE_GetFilenameFromPath(char * filename); char * FILE_GetFilenameFromPath(char * filename);
char * FILE_GetListPermissionsString(char *file); char * FILE_GetListPermissionsString(char *file, DYNMEM_MemoryTable_DataType ** memoryTable);
char * FILE_GetOwner(char *fileName); char * FILE_GetOwner(char *fileName, DYNMEM_MemoryTable_DataType ** memoryTable);
char * FILE_GetGroupOwner(char *fileName); char * FILE_GetGroupOwner(char *fileName, DYNMEM_MemoryTable_DataType ** memoryTable);
time_t FILE_GetLastModifiedData(char *path); time_t FILE_GetLastModifiedData(char *path);
void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTable_DataType ** memoryTable); void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTable_DataType ** memoryTable);
void FILE_DirectoryToParent(char ** sourceString); void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable);
int FILE_LockFile(int fd); int FILE_LockFile(int fd);
int FILE_doChownFromUidGidString(const char *file_path, const char *user_name, const char *group_name); int FILE_doChownFromUidGidString(const char *file_path, const char *user_name, const char *group_name);
int FILE_doChownFromUidGid(const char *file_path, uid_t uid, gid_t gid); int FILE_doChownFromUidGid(const char *file_path, uid_t uid, gid_t gid);