mirror of
https://github.com/kingk85/uFTP.git
synced 2025-07-25 13:16:12 +03:00
working on dynamic memory
This commit is contained in:
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.
BIN
build/uFTP
BIN
build/uFTP
Binary file not shown.
@ -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
105
ftpData.c
@ -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)
|
||||||
|
@ -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);
|
||||||
|
31
ftpServer.c
31
ftpServer.c
@ -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);
|
||||||
|
@ -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, ¶metersVector->memoryTable);
|
parameter.name = DYNMEM_malloc(nameIndex+1, ¶metersVector->memoryTable, "readConfig");
|
||||||
parameter.value = DYNMEM_malloc(valueIndex+1, ¶metersVector->memoryTable);
|
parameter.value = DYNMEM_malloc(valueIndex+1, ¶metersVector->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, ¶metersVector->memoryTable);
|
parameter.name = DYNMEM_malloc(nameIndex+1, ¶metersVector->memoryTable, "readConfig");
|
||||||
parameter.value = DYNMEM_malloc(valueIndex+1, ¶metersVector->memoryTable);
|
parameter.value = DYNMEM_malloc(valueIndex+1, ¶metersVector->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);
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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++ )
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
|
@ -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';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user