Two cross-platform implementations of getline in C The 2019 Stack Overflow Developer Survey Results Are InC getline functionJavaScript parallax cross-platform efficiencyTwo implementations of website internationalizationTwo implementations of file-readingLongest string in a vector — two implementationsCross-platform performance and statistical information scriptANSI colors cross platformCross-platform file hash sum generator in PythonPlatform-agnostic windowing libraryA portable cross platform C++17 method to retrieve the current date and time

Why don't Unix/Linux systems traverse through directories until they find the required version of a linked library?

Inline version of a function returns different value then non-inline version

What is the motivation for a law requiring 2 parties to consent for recording a conversation

Poison Arrows Piercing damage reduced to 0, do you still get poisoned?

Why could you hear an Amstrad CPC working?

Idomatic way to prevent slicing?

Is this food a bread or a loaf?

"Riffle" two strings

On the insanity of kings as an argument against Monarchy

Which Sci-Fi work first showed weapon of galactic-scale mass destruction?

How long do I have to send payment?

What does "rabbited" mean/imply in this sentence?

What is the meaning of Triage in Cybersec world?

Where to refill my bottle in India?

How are circuits which use complex ICs normally simulated?

How to reverse every other sublist of a list?

Manuscript was "unsubmitted" because the manuscript was deposited in Arxiv Preprints

aging parents with no investments

Time travel alters history but people keep saying nothing's changed

How was Skylab's orbit inclination chosen?

I see my dog run

Why is the maximum length of openwrt’s root password 8 characters?

Extreme, unacceptable situation and I can't attend work tomorrow morning

Pristine Bit Checking



Two cross-platform implementations of getline in C



The 2019 Stack Overflow Developer Survey Results Are InC getline functionJavaScript parallax cross-platform efficiencyTwo implementations of website internationalizationTwo implementations of file-readingLongest string in a vector — two implementationsCross-platform performance and statistical information scriptANSI colors cross platformCross-platform file hash sum generator in PythonPlatform-agnostic windowing libraryA portable cross platform C++17 method to retrieve the current date and time



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1












$begingroup$


I created my cross-platform implementations of getline function in C.



It takes different arguments and have different return values than 'original' getline function, but aim is the same. The only argument input_file is file from which the line have to be read. Return value is the line read from file or NULL if nothing read.



Here is one implementation, using fgets():



static inline char*
read_next_line(FILE* input_file)
const unsigned int chunk_size=256;
char* line=malloc(chunk_size*sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

unsigned int i;
for(i=0;;++i)
memset(line+chunk_size*i,0,chunk_size);
if(fgets(line+chunk_size*i,chunk_size+1,input_file)==NULL)
break;
if(line[strlen(line)-1]=='n')
break;
char* tmp=realloc(line,chunk_size*(i+2)*sizeof*line+1);
if(tmp==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*(i+2)*sizeof*line+1);
exit(1);
else
line=tmp;

if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)-1]=0;
return line;




Here is my second implementation, using fgetc():



static inline char*
getline(FILE* input_file)
const unsigned int chunk_size=3;
char* line=calloc(chunk_size,sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

char c;
unsigned int i,j;
for(i=0,j=1;;++i)
if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)]=0;
return line;











share|improve this question











$endgroup$











  • $begingroup$
    Have you tested your code, and if so, how?
    $endgroup$
    – 200_success
    9 mins ago

















1












$begingroup$


I created my cross-platform implementations of getline function in C.



It takes different arguments and have different return values than 'original' getline function, but aim is the same. The only argument input_file is file from which the line have to be read. Return value is the line read from file or NULL if nothing read.



Here is one implementation, using fgets():



static inline char*
read_next_line(FILE* input_file)
const unsigned int chunk_size=256;
char* line=malloc(chunk_size*sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

unsigned int i;
for(i=0;;++i)
memset(line+chunk_size*i,0,chunk_size);
if(fgets(line+chunk_size*i,chunk_size+1,input_file)==NULL)
break;
if(line[strlen(line)-1]=='n')
break;
char* tmp=realloc(line,chunk_size*(i+2)*sizeof*line+1);
if(tmp==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*(i+2)*sizeof*line+1);
exit(1);
else
line=tmp;

if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)-1]=0;
return line;




Here is my second implementation, using fgetc():



static inline char*
getline(FILE* input_file)
const unsigned int chunk_size=3;
char* line=calloc(chunk_size,sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

char c;
unsigned int i,j;
for(i=0,j=1;;++i)
if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)]=0;
return line;











share|improve this question











$endgroup$











  • $begingroup$
    Have you tested your code, and if so, how?
    $endgroup$
    – 200_success
    9 mins ago













1












1








1





$begingroup$


I created my cross-platform implementations of getline function in C.



It takes different arguments and have different return values than 'original' getline function, but aim is the same. The only argument input_file is file from which the line have to be read. Return value is the line read from file or NULL if nothing read.



Here is one implementation, using fgets():



static inline char*
read_next_line(FILE* input_file)
const unsigned int chunk_size=256;
char* line=malloc(chunk_size*sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

unsigned int i;
for(i=0;;++i)
memset(line+chunk_size*i,0,chunk_size);
if(fgets(line+chunk_size*i,chunk_size+1,input_file)==NULL)
break;
if(line[strlen(line)-1]=='n')
break;
char* tmp=realloc(line,chunk_size*(i+2)*sizeof*line+1);
if(tmp==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*(i+2)*sizeof*line+1);
exit(1);
else
line=tmp;

if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)-1]=0;
return line;




Here is my second implementation, using fgetc():



static inline char*
getline(FILE* input_file)
const unsigned int chunk_size=3;
char* line=calloc(chunk_size,sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

char c;
unsigned int i,j;
for(i=0,j=1;;++i)
if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)]=0;
return line;











share|improve this question











$endgroup$




I created my cross-platform implementations of getline function in C.



It takes different arguments and have different return values than 'original' getline function, but aim is the same. The only argument input_file is file from which the line have to be read. Return value is the line read from file or NULL if nothing read.



Here is one implementation, using fgets():



static inline char*
read_next_line(FILE* input_file)
const unsigned int chunk_size=256;
char* line=malloc(chunk_size*sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

unsigned int i;
for(i=0;;++i)
memset(line+chunk_size*i,0,chunk_size);
if(fgets(line+chunk_size*i,chunk_size+1,input_file)==NULL)
break;
if(line[strlen(line)-1]=='n')
break;
char* tmp=realloc(line,chunk_size*(i+2)*sizeof*line+1);
if(tmp==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*(i+2)*sizeof*line+1);
exit(1);
else
line=tmp;

if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)-1]=0;
return line;




Here is my second implementation, using fgetc():



static inline char*
getline(FILE* input_file)
const unsigned int chunk_size=3;
char* line=calloc(chunk_size,sizeof*line+1);
if(line==NULL)
fprintf(stderr,"Fatal: failed to allocate %zu bytes.n",chunk_size*sizeof*line+1);
exit(1);

char c;
unsigned int i,j;
for(i=0,j=1;;++i)
if(strlen(line)==0)
free(line);
return NULL;
else
line[strlen(line)]=0;
return line;








c comparative-review file portability






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 11 mins ago









200_success

131k17157422




131k17157422










asked 2 hours ago









DeBos99DeBos99

867




867











  • $begingroup$
    Have you tested your code, and if so, how?
    $endgroup$
    – 200_success
    9 mins ago
















  • $begingroup$
    Have you tested your code, and if so, how?
    $endgroup$
    – 200_success
    9 mins ago















$begingroup$
Have you tested your code, and if so, how?
$endgroup$
– 200_success
9 mins ago




$begingroup$
Have you tested your code, and if so, how?
$endgroup$
– 200_success
9 mins ago










0






active

oldest

votes












Your Answer





StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");

StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217157%2ftwo-cross-platform-implementations-of-getline-in-c%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Code Review Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217157%2ftwo-cross-platform-implementations-of-getline-in-c%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

格濟夫卡 參考資料 导航菜单51°3′40″N 34°2′21″E / 51.06111°N 34.03917°E / 51.06111; 34.03917ГезівкаПогода в селі 编辑或修订