src/share/vm/runtime/os.cpp

Print this page
rev 2100 : 7017193 Small memory leak in get_stack_bounds // os::create_stack_guard_pages

@@ -1290,5 +1290,36 @@
       result = true;
     }
   }
   return result;
 }
+
+//Read file line by line, if line is longer than bsize,
+//skip rest of line.
+int os::get_line_chars(int fd, char* buf, size_t bsize){
+  unsigned int sz,i = 0;
+
+  while( (sz=read(fd, &buf[i], 1)) == 1 && i < (bsize-1) && buf[i] != '\n' ) {
+     ++i;
+  }
+
+  // whole line was read, kill eol char and return
+  if (buf[i] == '\n'){
+     buf[i] = 0; 
+     return i-1;
+  }
+
+  buf[i+1] = 0; 
+
+  // EOF reached. if we have characters in buf return 
+  // partially read line and delay eof to next call
+  if (sz != 1) {
+    return (i == 0) ? -1 : i;
+  }
+
+  // line is longer than bsize, skip to EOL
+  int ch;
+  while( read(fd, &ch, 1) == 1 && ch != '\n' );
+
+  // ignore eof, will catch it next time
+  return i;
+}
\ No newline at end of file