# HG changeset patch # User jwe # Date 809320255 0 # Node ID 3d235e3c13c009a83d45ccd5dccf71270e2df2ef # Parent 52a3f38cbfeb41f9714fc304eec7401022622274 [project @ 1995-08-25 03:10:55 by jwe] diff -r 52a3f38cbfeb -r 3d235e3c13c0 src/file-io.cc --- a/src/file-io.cc Fri Aug 25 02:16:01 1995 +0000 +++ b/src/file-io.cc Fri Aug 25 03:10:55 1995 +0000 @@ -376,7 +376,7 @@ } static Octave_object -fgets_internal (const Octave_object& args, int nargout) +fgets_internal (const Octave_object& args, int nargin, int nargout) { Octave_object retval; @@ -385,41 +385,67 @@ if (! p) return retval; - - double dlen = args(1).double_value (); - - if (error_state) - return retval; - - if (xisnan (dlen)) - { - error ("fgets: NaN invalid as length"); - return retval; - } - - int length = NINT (dlen); - - if ((double) length != dlen) + file_info file = file_list (p); + + FILE *fileptr = file.fptr (); + + char *string = 0; + char *success = 0; + + if (nargin == 2) { - error ("fgets: length not an integer value"); - return retval; + double dlen = args(1).double_value (); + + if (error_state) + return retval; + + if (xisnan (dlen)) + { + error ("fgets: NaN invalid as length"); + return retval; + } + + int length = NINT (dlen); + + if ((double) length != dlen) + { + error ("fgets: length not an integer value"); + return retval; + } + + char *string = new char[length+1]; + char *success = fgets (string, length+1, fileptr); } - - file_info file = file_list (p); - - char string [length+1]; - char *success = fgets (string, length+1, file.fptr ()); - - if (! success) + else { - retval(0) = -1.0; - return retval; + ostrstream buf; + int c; + while ((c = fgetc (fileptr))) + { + buf << (char) c; + if (c == '\n') + { + buf << ends; + string = buf.str (); + break; + } + } + + if (string && strlen (string) > 0) + success = string; } - - if (nargout == 2) - retval(1) = (double) strlen (string); - - retval(0) = string; + + if (success) + { + if (nargout == 2) + retval(1) = (double) strlen (string); + + retval(0) = string; + } + else + retval(0) = -1.0; + + delete [] string; return retval; } @@ -433,10 +459,10 @@ int nargin = args.length (); - if (nargin != 2) + if (nargin == 1 || nargin == 2) + retval = fgets_internal (args, nargin, nargout); + else print_usage ("fgets"); - else - retval = fgets_internal (args, nargout); return retval; }