F
FireHead
Hello All,
My original topic should have been " using/replace fgets".
I think i have finally solved and used fgets in my program.
But I see somewhere bug/memory leak I just am not able pin the memory
leak.
Could anybody assist me in this issue please.
This can be anybody for any reason.
This code will now offically become part of the Public Domain.
The this the code that I have managed to get it working.
//-------------------------------------------------------------------------------------------------------------------------------------------------//
/*
Will BE MULTITHREADED
open a original file (source file)
Look for the existing custom folder in the HOME directory
If the HOME directory does not exist
Then see if the specs exists in the /usr/local/share (Default)
If the /usr/local/share does not exist then create a template
create a temp
*/
#include <cliargs.h>
short readPreLine(FILE* pSource,char **content);
short readPostLine(FILE* pSource,char **content);
short readLPostLine(FILE *pSource,char** content,int default_length);
short readLPreLine(FILE *pSource,char** content,int default_length);
char* get_Copy(char* pStr);
char* get_Copy(char* pStr){
u_int8_t *temp =0;
u_int8_t *final =0;
u_int8_t byte = 0;
u_int8_t dummy = 0;
temp = pStr;
int pos = 0;
final = &dummy;
/*initilize the contents with new address*/
do{
byte = *temp;printf("%c",byte);
final++;
temp++;
}while(byte!='\0');
*final = '\0';
temp = "";
temp = pStr;
/*clean up everything*/
char *results = "";
results = strcpy( final,temp);
return results;
}
/*
short get_Stream(FILE* pSource,char* result){
size_t buflen = 0;
char offset= 0;
int ret=EXIT_SUCCESS;
fpos_t* pCurPos=0 ; //current file position
fpos_t* pOldPos=0 ; //old file position
char *finally = "";
char *buffer = 0;
//get the starting File pointer position
fgetpos(pSource,&pOldPos);
//find the newline = 0x13
do{offset = 0; offset=fgetc(pSource);
} while(offset!=0x0A && offset!=0x0D && offset!=EOF && offset!=NULL &&
offset!=0xFF);
//get the Current File position
fgetpos (pSource,&pCurPos);
printf("%u",pCurPos);
//Total Buffer Length
buflen = (size_t)pCurPos - (size_t)pOldPos;
if(( offset == 0xFF || offset == EOF || offset==NULL) && (buflen ==
EXIT_FAILURE || buflen == EXIT_SUCCESS))
ret= EXIT_FAILURE;
else{
//Reset Everything
fsetpos (pSource,&pOldPos);
//allocate memory for the new address register
buffer = (char *)malloc(buflen);
//read file buffer using fgets
fgets(buffer,buflen,pSource);
//copy the string to a automatic variable register
//finally = get_Copy(buffer);
printf("\nfeof = %d\n",strlen(buffer));
//free the contents
free(buffer);
ret=EXIT_SUCCESS;
}//ELSE
buffer=0;
pCurPos = 0;
pOldPos = 0;
offset = 0;
return ret;
}*/
int malloc_length(char* source_buffer){
int offset=0;
for(offset = 0;source_buffer[offset]!=NULL || source_buffer[offset]!=0
|| source_buffer[offset]!='\0';offset++);
return offset;
}
short readLPostLine(FILE *pSource,char** content,int default_length){
short ret=EXIT_SUCCESS;
int return_length;return_length = 0;
char* currentline;currentline = 0;
char* returnline;returnline = 0;
char* duplicate;duplicate = 0;
char offset;offset = 0;
int temp_length = 0;
return_length = return_length+default_length;
/* allocate default sized buffer */
currentline = (char*)malloc(default_length);
currentline = strcpy(currentline,"");
/*allocate memory temporarily*/
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,"");
do{
/* read the the line first*/
if((currentline=fgets(currentline,default_length+1,pSource))
!=NULL){
offset = (char)(strlen(currentline) > 0 ?
currentline[strlen(currentline)-1]: 0 );
if(offset != 0x0A && offset!=0x0D &&
(offset!=0&&offset!=0xFF&&offset!=EOF) && offset!=NULL){
temp_length = strlen(returnline);
if(temp_length == (return_length+default_length) ||
temp_length == return_length ){
return_length = return_length+default_length;
duplicate =(char*)malloc(return_length+default_length);
duplicate = strcpy(duplicate,returnline);
free(returnline);returnline=0;
return_length = return_length+default_length;
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,duplicate);
free(duplicate);duplicate=0;
}
if(temp_length == 0) returnline = strcpy(returnline,currentline);
else returnline = strcat(returnline,currentline);
}else{
returnline = strncat(returnline,currentline,strlen(currentline)-1);
ret = EXIT_SUCCESS;
}
}/* Main IF */
else
ret = EXIT_FAILURE;
}while(offset != 0x0A && offset!=0x0D &&
(offset!=0&&offset!=0xFF&&offset!=EOF)
&& ret==EXIT_SUCCESS);
/* end of while*/
if(offset == 0x0A||offset == 0x0D ){
*content = malloc(strlen(returnline)+1);
*content = strcpy(*content,returnline);
ret = EXIT_SUCCESS;
}else
ret = EXIT_FAILURE;
free(currentline);
free(returnline);
return ret;
}
short readLPreLine(FILE *pSource,char** content,int default_length){
short ret=EXIT_SUCCESS;
int return_length;return_length = 0;
char* currentline;currentline = 0;
char* returnline;returnline = 0;
char* duplicate;duplicate = 0;
char offset;offset = 0;
int temp_length = 0;
return_length = return_length+default_length;
/* allocate default sized buffer */
currentline = (char*)malloc(default_length);
currentline = strcpy(currentline,"");
/*allocate memory temporarily*/
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,"");
/* read the the line first*/
currentline = fgets(currentline,default_length+1,pSource);
if(currentline!=NULL){
offset = (strlen(currentline) > 0?
currentline[strlen(currentline)-1]: EOF);
if(offset!=0&&offset!=0xFF&&offset!=EOF){
while(offset != 0x0A && offset!=0x0D &&
(offset!=0&&offset!=0xFF&&offset!=EOF)){
temp_length = strlen(returnline);
if(temp_length == (return_length+default_length) ||
temp_length == return_length ){
return_length = return_length+default_length;
duplicate =(char*)malloc(return_length+default_length);
duplicate = strcpy(duplicate,returnline);
free(returnline);returnline=0;
return_length = return_length+default_length;
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,duplicate);
free(duplicate);duplicate=0;
}/* if */
returnline = strcat(returnline,currentline);
/*read the file again */
currentline = fgets(currentline,default_length+1,pSource);
offset = currentline[strlen(currentline)-1];
}/*while*/
if(offset == 0x0A||offset == 0x0D || offset == 0 || offset ==
EOF){
if( strlen(returnline)==0)
returnline = strncpy(returnline,currentline,strlen(currentline)+1);
else
returnline = strncat(returnline,currentline,strlen(currentline)-1);
ret = EXIT_SUCCESS; }
}else
ret = EXIT_FAILURE;
}else ret = EXIT_FAILURE;
if(ret == EXIT_SUCCESS){
*content = malloc(strlen(returnline)+1);
*content = strcpy(*content,returnline);
}
free(currentline);
free(returnline);
return ret;
}
short readPreLine(FILE* pSource,char **content){
return readLPreLine(pSource,content,512); /* default UNIX length */
}
short readPostLine(FILE* pSource,char **content){
return readLPostLine(pSource,content,512); /* default UNIX length
*/
}
int main(int argc,const char* argv[])
{
FILE* pSourceFile;
const char* ATOMIC_NAME;
char* ret = 0;
ATOMIC_NAME = "/etc/samba/smb.conf";
printf("%s\n",ATOMIC_NAME);
pSourceFile = fopen(ATOMIC_NAME,"rb");
if(pSourceFile==NULL){
printf("File not found\n");
exit(EXIT_FAILURE);
}
else
fseek(pSourceFile,SEEK_SET,SEEK_SET);
while(readPostLine(pSourceFile,&ret)==EXIT_SUCCESS){
printf("%s\n",ret);
free(ret);
}
fclose(pSourceFile);
}
//-------------------------------------------------------------------------------------------------------------------------------------------//
In the following code:
while(readPostLine(pSourceFile,&ret)==EXIT_SUCCESS){
printf("%s\n",ret);
free(ret);
}
How can I avoid calling < free(ret) > ?
Thanks guys & girls ( if any).
My original topic should have been " using/replace fgets".
I think i have finally solved and used fgets in my program.
But I see somewhere bug/memory leak I just am not able pin the memory
leak.
Could anybody assist me in this issue please.
This can be anybody for any reason.
This code will now offically become part of the Public Domain.
The this the code that I have managed to get it working.
//-------------------------------------------------------------------------------------------------------------------------------------------------//
/*
Will BE MULTITHREADED
open a original file (source file)
Look for the existing custom folder in the HOME directory
If the HOME directory does not exist
Then see if the specs exists in the /usr/local/share (Default)
If the /usr/local/share does not exist then create a template
create a temp
*/
#include <cliargs.h>
short readPreLine(FILE* pSource,char **content);
short readPostLine(FILE* pSource,char **content);
short readLPostLine(FILE *pSource,char** content,int default_length);
short readLPreLine(FILE *pSource,char** content,int default_length);
char* get_Copy(char* pStr);
char* get_Copy(char* pStr){
u_int8_t *temp =0;
u_int8_t *final =0;
u_int8_t byte = 0;
u_int8_t dummy = 0;
temp = pStr;
int pos = 0;
final = &dummy;
/*initilize the contents with new address*/
do{
byte = *temp;printf("%c",byte);
final++;
temp++;
}while(byte!='\0');
*final = '\0';
temp = "";
temp = pStr;
/*clean up everything*/
char *results = "";
results = strcpy( final,temp);
return results;
}
/*
short get_Stream(FILE* pSource,char* result){
size_t buflen = 0;
char offset= 0;
int ret=EXIT_SUCCESS;
fpos_t* pCurPos=0 ; //current file position
fpos_t* pOldPos=0 ; //old file position
char *finally = "";
char *buffer = 0;
//get the starting File pointer position
fgetpos(pSource,&pOldPos);
//find the newline = 0x13
do{offset = 0; offset=fgetc(pSource);
} while(offset!=0x0A && offset!=0x0D && offset!=EOF && offset!=NULL &&
offset!=0xFF);
//get the Current File position
fgetpos (pSource,&pCurPos);
printf("%u",pCurPos);
//Total Buffer Length
buflen = (size_t)pCurPos - (size_t)pOldPos;
if(( offset == 0xFF || offset == EOF || offset==NULL) && (buflen ==
EXIT_FAILURE || buflen == EXIT_SUCCESS))
ret= EXIT_FAILURE;
else{
//Reset Everything
fsetpos (pSource,&pOldPos);
//allocate memory for the new address register
buffer = (char *)malloc(buflen);
//read file buffer using fgets
fgets(buffer,buflen,pSource);
//copy the string to a automatic variable register
//finally = get_Copy(buffer);
printf("\nfeof = %d\n",strlen(buffer));
//free the contents
free(buffer);
ret=EXIT_SUCCESS;
}//ELSE
buffer=0;
pCurPos = 0;
pOldPos = 0;
offset = 0;
return ret;
}*/
int malloc_length(char* source_buffer){
int offset=0;
for(offset = 0;source_buffer[offset]!=NULL || source_buffer[offset]!=0
|| source_buffer[offset]!='\0';offset++);
return offset;
}
short readLPostLine(FILE *pSource,char** content,int default_length){
short ret=EXIT_SUCCESS;
int return_length;return_length = 0;
char* currentline;currentline = 0;
char* returnline;returnline = 0;
char* duplicate;duplicate = 0;
char offset;offset = 0;
int temp_length = 0;
return_length = return_length+default_length;
/* allocate default sized buffer */
currentline = (char*)malloc(default_length);
currentline = strcpy(currentline,"");
/*allocate memory temporarily*/
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,"");
do{
/* read the the line first*/
if((currentline=fgets(currentline,default_length+1,pSource))
!=NULL){
offset = (char)(strlen(currentline) > 0 ?
currentline[strlen(currentline)-1]: 0 );
if(offset != 0x0A && offset!=0x0D &&
(offset!=0&&offset!=0xFF&&offset!=EOF) && offset!=NULL){
temp_length = strlen(returnline);
if(temp_length == (return_length+default_length) ||
temp_length == return_length ){
return_length = return_length+default_length;
duplicate =(char*)malloc(return_length+default_length);
duplicate = strcpy(duplicate,returnline);
free(returnline);returnline=0;
return_length = return_length+default_length;
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,duplicate);
free(duplicate);duplicate=0;
}
if(temp_length == 0) returnline = strcpy(returnline,currentline);
else returnline = strcat(returnline,currentline);
}else{
returnline = strncat(returnline,currentline,strlen(currentline)-1);
ret = EXIT_SUCCESS;
}
}/* Main IF */
else
ret = EXIT_FAILURE;
}while(offset != 0x0A && offset!=0x0D &&
(offset!=0&&offset!=0xFF&&offset!=EOF)
&& ret==EXIT_SUCCESS);
/* end of while*/
if(offset == 0x0A||offset == 0x0D ){
*content = malloc(strlen(returnline)+1);
*content = strcpy(*content,returnline);
ret = EXIT_SUCCESS;
}else
ret = EXIT_FAILURE;
free(currentline);
free(returnline);
return ret;
}
short readLPreLine(FILE *pSource,char** content,int default_length){
short ret=EXIT_SUCCESS;
int return_length;return_length = 0;
char* currentline;currentline = 0;
char* returnline;returnline = 0;
char* duplicate;duplicate = 0;
char offset;offset = 0;
int temp_length = 0;
return_length = return_length+default_length;
/* allocate default sized buffer */
currentline = (char*)malloc(default_length);
currentline = strcpy(currentline,"");
/*allocate memory temporarily*/
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,"");
/* read the the line first*/
currentline = fgets(currentline,default_length+1,pSource);
if(currentline!=NULL){
offset = (strlen(currentline) > 0?
currentline[strlen(currentline)-1]: EOF);
if(offset!=0&&offset!=0xFF&&offset!=EOF){
while(offset != 0x0A && offset!=0x0D &&
(offset!=0&&offset!=0xFF&&offset!=EOF)){
temp_length = strlen(returnline);
if(temp_length == (return_length+default_length) ||
temp_length == return_length ){
return_length = return_length+default_length;
duplicate =(char*)malloc(return_length+default_length);
duplicate = strcpy(duplicate,returnline);
free(returnline);returnline=0;
return_length = return_length+default_length;
returnline = (char*)malloc(return_length+default_length);
returnline = strcpy(returnline,duplicate);
free(duplicate);duplicate=0;
}/* if */
returnline = strcat(returnline,currentline);
/*read the file again */
currentline = fgets(currentline,default_length+1,pSource);
offset = currentline[strlen(currentline)-1];
}/*while*/
if(offset == 0x0A||offset == 0x0D || offset == 0 || offset ==
EOF){
if( strlen(returnline)==0)
returnline = strncpy(returnline,currentline,strlen(currentline)+1);
else
returnline = strncat(returnline,currentline,strlen(currentline)-1);
ret = EXIT_SUCCESS; }
}else
ret = EXIT_FAILURE;
}else ret = EXIT_FAILURE;
if(ret == EXIT_SUCCESS){
*content = malloc(strlen(returnline)+1);
*content = strcpy(*content,returnline);
}
free(currentline);
free(returnline);
return ret;
}
short readPreLine(FILE* pSource,char **content){
return readLPreLine(pSource,content,512); /* default UNIX length */
}
short readPostLine(FILE* pSource,char **content){
return readLPostLine(pSource,content,512); /* default UNIX length
*/
}
int main(int argc,const char* argv[])
{
FILE* pSourceFile;
const char* ATOMIC_NAME;
char* ret = 0;
ATOMIC_NAME = "/etc/samba/smb.conf";
printf("%s\n",ATOMIC_NAME);
pSourceFile = fopen(ATOMIC_NAME,"rb");
if(pSourceFile==NULL){
printf("File not found\n");
exit(EXIT_FAILURE);
}
else
fseek(pSourceFile,SEEK_SET,SEEK_SET);
while(readPostLine(pSourceFile,&ret)==EXIT_SUCCESS){
printf("%s\n",ret);
free(ret);
}
fclose(pSourceFile);
}
//-------------------------------------------------------------------------------------------------------------------------------------------//
In the following code:
while(readPostLine(pSourceFile,&ret)==EXIT_SUCCESS){
printf("%s\n",ret);
free(ret);
}
How can I avoid calling < free(ret) > ?
Thanks guys & girls ( if any).