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;
$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;
c comparative-review file portability
$endgroup$
add a comment |
$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;
c comparative-review file portability
$endgroup$
$begingroup$
Have you tested your code, and if so, how?
$endgroup$
– 200_success
9 mins ago
add a comment |
$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;
c comparative-review file portability
$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
c comparative-review file portability
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
add a comment |
$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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
$begingroup$
Have you tested your code, and if so, how?
$endgroup$
– 200_success
9 mins ago