#include <iostream>
#include <string.h>
#include <stdlib.h>
#define SDF_SYSTEM_PATH_LINK_CHARACTER "/"
#define SDF_SYSTEM_PATH_LINK_CHAR '/'
using namespace std;
bool SDFCompleteDirectoryChecked(char * const vpc_ResultPath, const uint ui_Size, const char * const vpc_Path, const char * const vpc_Directory)
{
char *pc_Buffer = null;
uint ui_BufferLen = 0;
char *pc_Directory = null;
uint ui_DirectoryLen = 0;
int ui_ResultPathLen = 0;
ui_BufferLen = (uint)strlen(vpc_Path)
+ (uint)strlen(SDF_SYSTEM_PATH_LINK_CHARACTER)
+ (uint)strlen(vpc_Directory)
+ (uint)strlen(SDF_SYSTEM_PATH_LINK_CHARACTER) + 1;
ui_DirectoryLen = (uint)strlen(SDF_SYSTEM_PATH_LINK_CHARACTER)
+ (uint)strlen(vpc_Directory) + 1;
/* allocate memory for vpc_Pathvpc_FileName */
pc_Buffer = (char*)malloc(sizeof(char) * ui_BufferLen);
strncpy(pc_Buffer, vpc_Path, ui_BufferLen);
pc_Buffer[ui_BufferLen-1] = ' ';
/* remove '/' from the end of path, if exists */
if (pc_Buffer[strlen(pc_Buffer)-1] == SDF_SYSTEM_PATH_LINK_CHAR)
pc_Buffer[strlen(pc_Buffer)-1] = ' ';
/* prepare string with "/vpc_Directory" */
pc_Directory = (char*)malloc(sizeof(char) * ui_DirectoryLen);
snprintf(pc_Directory, ui_DirectoryLen, "%s%s", SDF_SYSTEM_PATH_LINK_CHARACTER, vpc_Directory);
/* add "/vpc_Directory" at the end of the path if it doesn't end with it */
strncat(pc_Buffer, pc_Directory, ui_BufferLen - strlen(pc_Buffer));
strncat(pc_Buffer, SDF_SYSTEM_PATH_LINK_CHARACTER, ui_BufferLen - strlen(pc_Buffer));
/* copy buffer to ResultPath */
ui_ResultPathLen = snprintf(vpc_ResultPath, ui_Size, "%s", pc_Buffer);
/* check if result fit in user given char array */
if(ui_ResultPathLen < 0 || (uint)ui_ResultPathLen >= ui_Size)
return false;
free(pc_Buffer);
free(pc_Directory);
return true;
}
int main() {
// your code goes here
char Result[4001];
char Path[] = "/home/dps/exchange_bpc/bpc_temp";
char Directory[] = "search";
SDFCompleteDirectoryChecked(Result, 4001, Path, Directory);
std::cout << Result;
return 0;
}