branch update for HEAD-2003021201
[reactos.git] / lib / msvcrt / stdio / flsbuf.c
index 4af1ee9..6d5ccb5 100644 (file)
 #include <msvcrt/io.h>
 #include <msvcrt/errno.h>
 
-int cntcr(char *bufp, int bufsiz);
-int convert(char *endp, int bufsiz,int n);
-int _writecnv(int fn, void *buf, size_t bufsiz);
-
-int
-_flsbuf(int c, FILE *f)
-{
-  char *base;
-  int n, rn;
-  char c1;
-  int size;
-
 
+int cntcr(char* bufp, int bufsiz);
+int convert(char* endp, int bufsiz, int n);
+int _writecnv(int fn, void* buf, size_t bufsiz);
 
-  if (!OPEN4WRITING(f)) {
-       __set_errno (EINVAL);
-       return EOF;
-  }
 
-// no file associated with buffer
-// this is a memory stream
-
-  if ( fileno(f) == -1 )
-       return c;
+int _flsbuf(int c, FILE* f)
+{
+    char* base;
+    int n, rn;
+    char c1;
+    int size;
+
+    if (!OPEN4WRITING(f)) {
+        __set_errno(EINVAL);
+        return EOF;
+    }
 
-  /* if the buffer is not yet allocated, allocate it */
-  if ((base = f->_base) == NULL && (f->_flag & _IONBF) == 0)
-  {
-    size = 4096;
-    if ((f->_base = base = malloc (size)) == NULL)
-    {
-      f->_flag |= _IONBF;
-      f->_flag &= ~(_IOFBF|_IOLBF);
+    // no file associated with buffer, this is a memory stream
+    if (fileno(f) == -1) {
+        return c;
     }
-    else
-    {
-      f->_flag |= _IOMYBUF;
-      f->_cnt = f->_bufsiz = size;
-      f->_ptr = base;
-      rn = 0;
-      if (f == stdout && isatty (fileno (stdout)))
-       f->_flag |= _IOLBF;
+
+    /* if the buffer is not yet allocated, allocate it */
+    if ((base = f->_base) == NULL && (f->_flag & _IONBF) == 0) {
+        size = 4096;
+        if ((f->_base = base = malloc(size)) == NULL) {
+            f->_flag |= _IONBF;
+            f->_flag &= ~(_IOFBF|_IOLBF);
+        } else {
+            f->_flag |= _IOMYBUF;
+            f->_cnt = f->_bufsiz = size;
+            f->_ptr = base;
+            rn = 0;
+            if (f == stdout && isatty(fileno(stdout))) {
+                f->_flag |= _IOLBF;
+            }
+        }
     }
-  }
 
-  if (f->_flag & _IOLBF)
-  {
-    /* in line-buffering mode we get here on each character */
-    *f->_ptr++ = c;
-    rn = f->_ptr - base;
-    if (c == '\n' || rn >= f->_bufsiz)
-    {
-      /* time for real flush */
-      f->_ptr = base;
-      f->_cnt = 0;
+    if (f->_flag & _IOLBF) {
+        /* in line-buffering mode we get here on each character */
+        *f->_ptr++ = c;
+        rn = f->_ptr - base;
+        if (c == '\n' || rn >= f->_bufsiz) {
+            /* time for real flush */
+            f->_ptr = base;
+            f->_cnt = 0;
+        } else {
+            /* we got here because _cnt is wrong, so fix it */
+            /* Negative _cnt causes all output functions to call */
+            /*  _flsbuf for each character, thus realizing line-buffering */
+            f->_cnt = -rn;
+            return c;
+        }
+    } else if (f->_flag & _IONBF) {
+        c1 = c;
+        rn = 1;
+        base = &c1;
+        f->_cnt = 0;
+    } else { /* _IOFBF */
+        rn = f->_ptr - base;
+        f->_ptr = base;
+        if ((f->_flag & _IOAHEAD) == _IOAHEAD)
+            _lseek(fileno(f), -(rn+f->_cnt), SEEK_CUR);
+        f->_cnt = f->_bufsiz;
+        f->_flag &= ~_IOAHEAD;
     }
-    else
-    {
-      /* we got here because _cnt is wrong, so fix it */
-      /* Negative _cnt causes all output functions
-       to call _flsbuf for each character, thus realizing line-buffering */
-      f->_cnt = -rn;
-      return c;
+    f->_flag &= ~_IODIRTY;
+    while (rn > 0) {
+        n = _write(fileno(f), base, rn);
+        if (n <= 0) {
+            f->_flag |= _IOERR;
+            return EOF;
+        }
+        rn -= n;
+        base += n;
     }
-  }
-  else if (f->_flag & _IONBF)
-  {                   
-    c1 = c;           
-    rn = 1;           
-    base = &c1;       
-    f->_cnt = 0;
-  }                   
-  else /* _IOFBF */
-  {
-    rn = f->_ptr - base;
-    f->_ptr = base;
-    if ( (f->_flag & _IOAHEAD) == _IOAHEAD )
-       _lseek(fileno(f),-(rn+f->_cnt), SEEK_CUR);
-    f->_cnt = f->_bufsiz;
-    f->_flag &= ~_IOAHEAD;
-  }
-
-
-  f->_flag &= ~_IODIRTY;
-  while (rn > 0)
-  {
-    n = _write(fileno(f), base, rn);
-    if (n <= 0)
-    {
-      f->_flag |= _IOERR;
-      return EOF;
+    if ((f->_flag & (_IOLBF|_IONBF)) == 0) {
+        f->_cnt--;
+        *f->_ptr++ = c;
     }
-    rn -= n;
-    base += n;
-  }
-
-
-  if ((f->_flag&(_IOLBF|_IONBF)) == 0)
-  {
-    f->_cnt--;
-    *f->_ptr++ = c;
-  }
-  return c;
+    return c;
 }
 
-wint_t  _flswbuf(wchar_t c,FILE *fp)
+wint_t _flswbuf(wchar_t c, FILE* fp)
 {
-       return (wint_t )_flsbuf((int)c,fp);
-}
+    int result;
 
+    result = _flsbuf((int)c, fp);
+    if (result == EOF)
+        return WEOF;
+    return (wint_t)result;
+}
 
-int _writecnv(int fn, void *buf, size_t siz)
+int _writecnv(int fn, voidbuf, size_t siz)
 {
-       char *bufp = (char *)buf;
-       int bufsiz = siz;
-
-        char *tmp;
-       int cr1 = 0;
-       int cr2 = 0;
-
-       int n;
-               
-
-       cr1 = cntcr(bufp,bufsiz);
-
-       tmp = malloc(cr1);
-       memcpy(tmp,bufp+bufsiz-cr1,cr1);
-       cr2 = cntcr(tmp,cr1);
-               
-       convert(bufp,bufsiz-cr2,cr1-cr2);
-       n = _write(fn, bufp, bufsiz + cr1);
-
-       convert(tmp,cr1,cr2);
-       n += _write(fn, tmp, cr1 + cr2);
-       free(tmp);
-       return n;       
-       
-
+    char* bufp = (char*)buf;
+    int bufsiz = siz;
+    char* tmp;
+    int cr1 = 0;
+    int cr2 = 0;
+    int n;
+        
+    cr1 = cntcr(bufp, bufsiz);
+    tmp = malloc(cr1);
+    memcpy(tmp, bufp + bufsiz - cr1, cr1);
+    cr2 = cntcr(tmp, cr1);
+    convert(bufp, bufsiz - cr2, cr1 - cr2);
+    n = _write(fn, bufp, bufsiz + cr1);
+    convert(tmp, cr1, cr2);
+    n += _write(fn, tmp, cr1 + cr2);
+    free(tmp);
+    return n;
 }
 
-int convert(char *endp, int bufsiz,int n)
-{      
-       endp = endp + bufsiz + n;
-       while (bufsiz > 0) {
-               *endp = *(endp  - n);
-               if (*endp == '\n') {
-                       *endp--;
-                       n--;
-                       *endp = '\r';
-               }
-               endp--;
-               bufsiz--;
-       }
-       return n;
+int convert(char* endp, int bufsiz, int n)
+{   
+    endp = endp + bufsiz + n;
+    while (bufsiz > 0) {
+        *endp = *(endp - n);
+        if (*endp == '\n') {
+            *endp--;
+            n--;
+            *endp = '\r';
+        }
+        endp--;
+        bufsiz--;
+    }
+    return n;
 }
-int cntcr(char *bufp, int bufsiz)
-{
-       int cr = 0; 
-       while (bufsiz > 0) {
-               if (*bufp == '\n') 
-                       cr++;
-               bufp++;
-               bufsiz--;
-       }
 
-       return cr;
+int cntcr(char* bufp, int bufsiz)
+{
+    int cr = 0;
+
+    while (bufsiz > 0) {
+        if (*bufp == '\n') {
+            cr++;
+        }
+        bufp++;
+        bufsiz--;
+    }
+    return cr;
 }