Ignore:
Timestamp:
Apr 10, 2003, 12:28:07 PM (22 years ago)
Author:
sandervl
Message:

PF: MSVCRT update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/msvcrt/file.c

    r9633 r10005  
    2323#ifdef __WIN32OS2__
    2424#include <emxheader.h>
     25/* thanks to stupid unistd.h in win dir! */
     26#include <emxruntime\unistd.h>
    2527#include <winbase.h>
    2628#else
     
    2931#endif
    3032
     33#include <stdlib.h>
     34#include <stdio.h>
     35#include <ctype.h>
     36#include <string.h>
    3137#include <time.h>
    32 #include <stdio.h>
    33 #ifdef HAVE_UNISTD_H
    34 # include <unistd.h>
    35 #endif
     38
    3639
    3740#include "winternl.h"
     41#include "debugstr.h"
    3842#include "msvcrt.h"
    3943#include "msvcrt/errno.h"
     
    8286
    8387/* INTERNAL: process umask */
    84 static int MSVCRT_umask = 0;
     88static int MSVCRT__umask = 0;
    8589
    8690/* INTERNAL: Static buffer for temp file name */
     
    124128  {
    125129    WARN(":fd (%d) - no handle!\n",fd);
    126     *__doserrno() = 0;
     130    *MSVCRT_doserrno() = 0;
    127131    *MSVCRT__errno() = MSVCRT_EBADF;
    128132   return INVALID_HANDLE_VALUE;
     
    177181static MSVCRT_FILE* msvcrt_alloc_fp(int fd)
    178182{
    179   TRACE(":fd (%d) allocating FILE*\n",fd);
     183  TRACE("MSVCRT: fd (%d) allocating FILE*\n",fd);
    180184  if (fd < 0 || fd >= MSVCRT_fdend ||
    181185      MSVCRT_handles[fd] == INVALID_HANDLE_VALUE)
    182186  {
    183187    WARN(":invalid fd %d\n",fd);
    184     *__doserrno() = 0;
     188    *MSVCRT_doserrno() = 0;
    185189    *MSVCRT__errno() = MSVCRT_EBADF;
    186190    return NULL;
     
    227231void msvcrt_free_io(void)
    228232{
    229     _fcloseall();
    230     _close(0);
    231     _close(1);
    232     _close(2);
     233    MSVCRT__fcloseall();
     234    MSVCRT__close(0);
     235    MSVCRT__close(1);
     236    MSVCRT__close(2);
    233237}
    234238
     
    238242  if(file->_bufsiz) {
    239243        int cnt=file->_ptr-file->_base;
    240         if(cnt>0 && _write(file->_file, file->_base, cnt) != cnt) {
     244        if(cnt>0 && MSVCRT__write(file->_file, file->_base, cnt) != cnt) {
    241245                return MSVCRT_EOF;
    242246        }
     
    268272MSVCRT_FILE *__p__iob(void)
    269273{
     274 dprintf(("MSVCRT: __p__iob request"));
    270275 return &MSVCRT__iob[0];
    271276}
     
    274279 *              _access (MSVCRT.@)
    275280 */
    276 int _access(const char *filename, int mode)
     281int MSVCRT__access(const char *filename, int mode)
    277282{
    278283  DWORD attr = GetFileAttributesA(filename);
    279284
    280   TRACE("(%s,%d) %ld\n",filename,mode,attr);
     285  TRACE("MSVCRT _access (%s,%d) %ld\n",filename,mode,attr);
    281286
    282287  if (!filename || attr == 0xffffffff)
     
    300305  DWORD attr = GetFileAttributesW(filename);
    301306
    302   TRACE("(%s,%d) %ld\n",debugstr_w(filename),mode,attr);
     307  TRACE("MSVCRT: _waccess (%s,%d) %ld\n",debugstr_w(filename),mode,attr);
    303308
    304309  if (!filename || attr == 0xffffffff)
     
    318323 *              _chmod (MSVCRT.@)
    319324 */
    320 int _chmod(const char *path, int flags)
     325int MSVCRT__chmod(const char *path, int flags)
    321326{
    322327  DWORD oldFlags = GetFileAttributesA(path);
     328
     329  dprintf(("MSVCRT: _chmod %s",path));
    323330
    324331  if (oldFlags != 0x0FFFFFFFF)
     
    341348  DWORD oldFlags = GetFileAttributesW(path);
    342349
     350  dprintf(("MSVCRT: _wchmod %s",debugstr_w(path)));
     351
    343352  if (oldFlags != 0x0FFFFFFFF)
    344353  {
     
    356365 *              _unlink (MSVCRT.@)
    357366 */
    358 int _unlink(const char *path)
    359 {
    360   TRACE("(%s)\n",path);
     367int MSVCRT__unlink(const char *path)
     368{
     369  TRACE("MSVCRT: _unlink (%s)\n",path);
    361370  if(DeleteFileA(path))
    362371    return 0;
     
    382391 *              _close (MSVCRT.@)
    383392 */
    384 int _close(int fd)
     393int MSVCRT__close(int fd)
    385394{
    386395  HANDLE hand = msvcrt_fdtoh(fd);
    387396
    388   TRACE(":fd (%d) handle (%p)\n",fd,hand);
     397  TRACE("MSVCRT: _close fd (%d) handle (%p)\n",fd,hand);
    389398  if (hand == INVALID_HANDLE_VALUE)
    390399    return -1;
     
    413422  {
    414423    TRACE("deleting temporary file '%s'\n",MSVCRT_tempfiles[fd]);
    415     _unlink(MSVCRT_tempfiles[fd]);
     424    MSVCRT__unlink(MSVCRT_tempfiles[fd]);
    416425    MSVCRT_free(MSVCRT_tempfiles[fd]);
    417426    MSVCRT_tempfiles[fd] = NULL;
    418427  }
    419428
    420   TRACE(":ok\n");
     429  TRACE("MSVCRT: _close ok\n");
    421430  return 0;
    422431}
     
    429438  HANDLE hand = msvcrt_fdtoh(fd);
    430439
    431   TRACE(":fd (%d) handle (%p)\n",fd,hand);
     440  TRACE("MSVCRT: _commit fd (%d) handle (%p)\n",fd,hand);
    432441  if (hand == INVALID_HANDLE_VALUE)
    433442    return -1;
     
    458467  HANDLE hand = msvcrt_fdtoh(fd);
    459468
    460   TRACE(":fd (%d) handle (%p)\n",fd,hand);
     469  TRACE("MSVCRT: _eof fd (%d) handle (%p)\n",fd,hand);
    461470
    462471  if (hand == INVALID_HANDLE_VALUE)
     
    483492 *              _fcloseall (MSVCRT.@)
    484493 */
    485 int _fcloseall(void)
     494int MSVCRT__fcloseall(void)
    486495{
    487496  int num_closed = 0, i;
     497
     498  dprintf(("MSVCRT: _fcloseall"));
    488499
    489500  for (i = 3; i < MSVCRT_fdend; i++)
    490501    if (MSVCRT_handles[i] != INVALID_HANDLE_VALUE)
    491502    {
    492       _close(i);
     503      MSVCRT__close(i);
    493504      num_closed++;
    494505    }
     
    506517  HANDLE hand = msvcrt_fdtoh(fd);
    507518
    508   TRACE(":fd (%d) handle (%p)\n",fd,hand);
     519  TRACE("MSVCRT: _lseeki64 fd (%d) handle (%p)\n",fd,hand);
    509520  if (hand == INVALID_HANDLE_VALUE)
    510521    return -1;
     
    516527  }
    517528
    518   TRACE(":fd (%d) to 0x%08lx%08lx pos %s\n",
     529  TRACE("MSVCRT: _lseek fd (%d) to 0x%08lx%08lx pos %s\n",
    519530        fd,hoffset,(long)offset,
    520531        (whence==SEEK_SET)?"SEEK_SET":
     
    549560 *              _lseek (MSVCRT.@)
    550561 */
    551 LONG _lseek(int fd, LONG offset, int whence)
     562LONG MSVCRT__lseek(int fd, LONG offset, int whence)
    552563{
    553564    return _lseeki64(fd, offset, whence);
     
    565576  HANDLE hand = msvcrt_fdtoh(fd);
    566577
    567   TRACE(":fd (%d) handle (%p)\n",fd,hand);
     578  TRACE("MSVCRT: _locking fd (%d) handle (%p)\n",fd,hand);
    568579  if (hand == INVALID_HANDLE_VALUE)
    569580    return -1;
     
    597608      ret = LockFile(hand, cur_locn, 0L, nbytes, 0L);
    598609      if (ret) break;
    599       sleep (1);
     610      Sleep (1);
    600611    }
    601612  }
     
    613624void MSVCRT_rewind(MSVCRT_FILE* file)
    614625{
    615   TRACE(":file (%p) fd (%d)\n",file,file->_file);
     626  TRACE("MSVCRT: rewind file (%p) fd (%d)\n",file,file->_file);
    616627  MSVCRT_fseek(file, 0L, SEEK_SET);
    617628  MSVCRT_clearerr(file);
     
    621632 *              _fdopen (MSVCRT.@)
    622633 */
    623 MSVCRT_FILE* _fdopen(int fd, const char *mode)
     634MSVCRT_FILE* MSVCRT__fdopen(int fd, const char *mode)
    624635{
    625636  MSVCRT_FILE* file = msvcrt_alloc_fp(fd);
    626637
    627   TRACE(":fd (%d) mode (%s) FILE* (%p)\n",fd,mode,file);
     638  TRACE("MSVCRT: _fdopen fd (%d) mode (%s) FILE* (%p)\n",fd,mode,file);
    628639
    629640  return file;
     
    637648  MSVCRT_FILE* file = msvcrt_alloc_fp(fd);
    638649
    639   TRACE(":fd (%d) mode (%s) FILE* (%p)\n",fd,debugstr_w(mode),file);
     650  TRACE("MSVCRT: _wfdopen fd (%d) mode (%s) FILE* (%p)\n",fd,debugstr_w(mode),file);
    640651  if (file)
    641652    MSVCRT_rewind(file);
     
    647658 *              _filelength (MSVCRT.@)
    648659 */
    649 LONG _filelength(int fd)
    650 {
    651   LONG curPos = _lseek(fd, 0, SEEK_CUR);
     660LONG MSVCRT__filelength(int fd)
     661{
     662  LONG curPos = MSVCRT__lseek(fd, 0, SEEK_CUR);
     663
     664  dprintf(("MSVCRT: _filelength"));
     665
    652666  if (curPos != -1)
    653667  {
    654     LONG endPos = _lseek(fd, 0, SEEK_END);
     668    LONG endPos = MSVCRT__lseek(fd, 0, SEEK_END);
    655669    if (endPos != -1)
    656670    {
    657671      if (endPos != curPos)
    658         _lseek(fd, curPos, SEEK_SET);
     672        MSVCRT__lseek(fd, curPos, SEEK_SET);
    659673      return endPos;
    660674    }
     
    666680 *              _fileno (MSVCRT.@)
    667681 */
    668 int _fileno(MSVCRT_FILE* file)
    669 {
    670   TRACE(":FILE* (%p) fd (%d)\n",file,file->_file);
     682int MSVCRT__fileno(MSVCRT_FILE* file)
     683{
     684  TRACE("MSVCRT: _fileno FILE* (%p) fd (%d)\n",file,file->_file);
    671685  return file->_file;
    672686}
     
    675689 *              _flushall (MSVCRT.@)
    676690 */
    677 int _flushall(void)
     691int MSVCRT__flushall(void)
    678692{
    679693  int num_flushed = 0, i = 3;
     694
     695  dprintf(("MSVCRT: _flushall"));
    680696
    681697  while(i < MSVCRT_fdend)
     
    707723  HANDLE hand = msvcrt_fdtoh(fd);
    708724
    709   TRACE(":fd (%d) stat (%p)\n",fd,buf);
     725  TRACE("MSVCRT: _fstati64 fd (%d) stat (%p)\n",fd,buf);
    710726  if (hand == INVALID_HANDLE_VALUE)
    711727    return -1;
     
    722738  if (!GetFileInformationByHandle(hand, &hfi))
    723739  {
    724     WARN(":failed-last error (%ld)\n",GetLastError());
     740    WARN("MSVCRT: _fstati64 failed-last error (%ld)\n",GetLastError());
    725741    MSVCRT__set_errno(ERROR_INVALID_PARAMETER);
    726742    return -1;
     
    735751  return 0;
    736752}
     753
    737754
    738755/*********************************************************************
     
    810827 *              _isatty (MSVCRT.@)
    811828 */
    812 int _isatty(int fd)
     829int MSVCRT__isatty(int fd)
    813830{
    814831  HANDLE hand = msvcrt_fdtoh(fd);
     
    948965
    949966
    950   oflags |= _O_BINARY; /* FIXME: Default to text */
    951 
    952   if (oflags & _O_TEXT)
    953   {
    954     /* Dont warn when writing */
    955     if (ioflag & GENERIC_READ)
    956       FIXME(":TEXT node not implemented\n");
    957     oflags &= ~_O_TEXT;
    958   }
    959 
     967  if (oflags & _O_BINARY)
     968    ioflag |= _O_BINARY;
     969  else if (oflags & _O_TEXT)
     970    ioflag |= _O_TEXT;
     971  else if (*__p__fmode() & _O_BINARY)
     972    ioflag |= _O_BINARY;
     973  else
     974    ioflag |= _O_TEXT; /* default to TEXT*/
     975 
    960976  switch( shflags )
    961977  {
     
    10011017  {
    10021018    if (oflags & _O_TEMPORARY)
    1003       MSVCRT_tempfiles[fd] = _strdup(path);
     1019      MSVCRT_tempfiles[fd] = MSVCRT__strdup(path);
    10041020    if (ioflag & MSVCRT__IOAPPEND)
    1005       _lseek(fd, 0, FILE_END);
     1021      MSVCRT__lseek(fd, 0, FILE_END);
    10061022  }
    10071023
     
    10371053 *              _open (MSVCRT.@)
    10381054 */
    1039 int _open( const char *path, int flags, ... )
     1055int MSVCRT__open( const char *path, int flags, ... )
    10401056{
    10411057  va_list ap;
    1042   int pmode;
    1043 
    1044   va_start(ap, flags);
    1045   pmode = va_arg(ap, int);
    1046   va_end(ap);
    1047 
    1048   return MSVCRT__sopen( path, flags, _SH_DENYNO, pmode );
     1058
     1059  if (flags & _O_CREAT)
     1060  {
     1061    int pmode;
     1062    va_start(ap, flags);
     1063    pmode = va_arg(ap, int);
     1064    va_end(ap);
     1065    return MSVCRT__sopen( path, flags, _SH_DENYNO, pmode );
     1066  }
     1067  else
     1068    return MSVCRT__sopen( path, flags, _SH_DENYNO);
    10491069}
    10501070
     
    10651085  if (patha && WideCharToMultiByte(CP_ACP,0,path,len,patha,len,NULL,NULL))
    10661086  {
    1067     int retval = _open(patha,flags,pmode);
     1087    int retval = MSVCRT__open(patha,flags,pmode);
    10681088    MSVCRT_free(patha);
    10691089    return retval;
     
    10771097 *              _creat (MSVCRT.@)
    10781098 */
    1079 int _creat(const char *path, int flags)
     1099int MSVCRT__creat(const char *path, int flags)
    10801100{
    10811101  int usedFlags = (flags & _O_TEXT)| _O_CREAT| _O_WRONLY| _O_TRUNC;
    1082   return _open(path, usedFlags);
     1102  return MSVCRT__open(path, usedFlags);
    10831103}
    10841104
     
    11071127 *              _rmtmp (MSVCRT.@)
    11081128 */
    1109 int _rmtmp(void)
     1129int MSVCRT__rmtmp(void)
    11101130{
    11111131  int num_removed = 0, i;
     
    11141134    if (MSVCRT_tempfiles[i])
    11151135    {
    1116       _close(i);
     1136      MSVCRT__close(i);
    11171137      num_removed++;
    11181138    }
     
    11261146 *              _read (MSVCRT.@)
    11271147 */
    1128 int _read(int fd, void *buf, unsigned int count)
     1148int MSVCRT__read(int fd, void *buf, unsigned int count)
    11291149{
    11301150  DWORD num_read;
     
    11371157    return -1;
    11381158
    1139   if (ReadFile(hand, buf, count, &num_read, NULL))
    1140   {
    1141     if (num_read != count && MSVCRT_files[fd])
     1159  if (MSVCRT_flags[fd]& _O_BINARY)
    11421160    {
    1143       TRACE(":EOF\n");
    1144         MSVCRT_flags[fd] |= MSVCRT__IOEOF;
    1145 /*
    1146       MSVCRT_files[fd]->_flag |= MSVCRT__IOEOF;
    1147 */
     1161      if (ReadFile(hand, buf, count, &num_read, NULL))
     1162        {
     1163          if (num_read != count && MSVCRT_files[fd])
     1164            {
     1165              TRACE(":EOF\n");
     1166              MSVCRT_flags[fd] |= MSVCRT__IOEOF;
     1167              /*
     1168                MSVCRT_files[fd]->_flag |= MSVCRT__IOEOF;
     1169              */
     1170            }
     1171          dprintf(("%s\n",debugstr_an(buf,num_read)));
     1172          return num_read;
     1173        }
     1174      TRACE(":failed-last error (%ld)\n",GetLastError());
     1175      if (MSVCRT_files[fd])
     1176        MSVCRT_files[fd]->_flag |= MSVCRT__IOERR;
     1177      return -1;
    11481178    }
    1149     return num_read;
    1150   }
    1151   TRACE(":failed-last error (%ld)\n",GetLastError());
    1152   if (MSVCRT_files[fd])
    1153      MSVCRT_files[fd]->_flag |= MSVCRT__IOERR;
    1154   return -1;
     1179  else
     1180    {
     1181      char cc, *s=(char*)buf,* buf_start=(char*)buf;
     1182      unsigned int i;
     1183     
     1184      for (i = 0 , num_read = 1; i < count && (num_read == 1);)
     1185        {
     1186          if (ReadFile(hand, &cc, 1, &num_read, NULL))
     1187            if (num_read == 1)
     1188              if ((cc != '\r') || MSVCRT_flags[fd] & _O_BINARY)
     1189                {
     1190                  *s++ = (char)cc;
     1191                  i++;
     1192                }
     1193        }
     1194      if (num_read != 1)
     1195        {
     1196          TRACE(":EOF\n");
     1197          if (MSVCRT_files[fd])
     1198            MSVCRT_flags[fd] |= MSVCRT__IOEOF;
     1199          /*
     1200            MSVCRT_files[fd]->_flag |= MSVCRT__IOEOF;
     1201          */
     1202        }
     1203 
     1204      if (count > 4)
     1205        dprintf(("%s\n",debugstr_an(buf_start, s-buf_start)));
     1206      return s-buf_start;
     1207    }
     1208  return 0;
    11551209}
    11561210
     
    11581212 *              _getw (MSVCRT.@)
    11591213 */
    1160 int _getw(MSVCRT_FILE* file)
     1214int MSVCRT__getw(MSVCRT_FILE* file)
    11611215{
    11621216  int i;
    1163   if (_read(file->_file, &i, sizeof(int)) != 1)
     1217  if (MSVCRT__read(file->_file, &i, sizeof(int)) != 1)
    11641218    return MSVCRT_EOF;
    11651219  return i;
     
    11691223 *              _setmode (MSVCRT.@)
    11701224 */
    1171 int _setmode(int fd,int mode)
    1172 {
    1173   if (mode & _O_TEXT)
    1174     FIXME("fd (%d) mode (%d) TEXT not implemented\n",fd,mode);
    1175   return 0;
     1225int MSVCRT__setmode(int fd,int mode)
     1226{
     1227  int ret = MSVCRT_flags[fd] & (_O_TEXT | _O_BINARY);
     1228  if (mode & (~(_O_TEXT|_O_BINARY)))
     1229    FIXME("fd (%d) mode (0x%08x) unknown\n",fd,mode);
     1230  MSVCRT_flags[fd] &= ~(_O_TEXT|_O_BINARY);
     1231  MSVCRT_flags[fd] |= mode & (_O_TEXT | _O_BINARY);
     1232  return ret;
    11761233}
    11771234
     
    12021259                 as drive letter
    12031260  */
    1204   if (isalpha(*path)&& (*(path+1)==':'))
     1261  if (isalpha((int)*path) && (*(path+1)==':'))
    12051262    buf->st_dev = buf->st_rdev = toupper(*path) - 'A'; /* drive num */
    12061263  else
    1207     buf->st_dev = buf->st_rdev = _getdrive() - 1;
     1264    buf->st_dev = buf->st_rdev = MSVCRT__getdrive() - 1;
    12081265
    12091266  plen = strlen(path);
     
    12801337    buf->st_dev = buf->st_rdev = toupperW(*path - 'A'); /* drive num */
    12811338  else
    1282     buf->st_dev = buf->st_rdev = _getdrive() - 1;
     1339    buf->st_dev = buf->st_rdev = MSVCRT__getdrive() - 1;
    12831340
    12841341  plen = strlenW(path);
     
    13191376 *              _tell (MSVCRT.@)
    13201377 */
    1321 LONG _tell(int fd)
    1322 {
    1323   return _lseek(fd, 0, SEEK_CUR);
     1378LONG MSVCRT__tell(int fd)
     1379{
     1380  return MSVCRT__lseek(fd, 0, SEEK_CUR);
    13241381}
    13251382
     
    13271384 *              _tempnam (MSVCRT.@)
    13281385 */
    1329 char *_tempnam(const char *dir, const char *prefix)
     1386char *MSVCRT__tempnam(const char *dir, const char *prefix)
    13301387{
    13311388  char tmpbuf[MAX_PATH];
     
    13351392  {
    13361393    TRACE("got name (%s)\n",tmpbuf);
    1337     return _strdup(tmpbuf);
     1394    return MSVCRT__strdup(tmpbuf);
    13381395  }
    13391396  TRACE("failed (%ld)\n",GetLastError());
     
    13611418 *              _umask (MSVCRT.@)
    13621419 */
    1363 int _umask(int umask)
    1364 {
    1365   int old_umask = MSVCRT_umask;
    1366   TRACE("(%d)\n",umask);
    1367   MSVCRT_umask = umask;
     1420int MSVCRT_umask(int umask)
     1421{
     1422  int old_umask = MSVCRT__umask;
     1423  TRACE("MSVCRT: _umask (%d)\n",umask);
     1424  MSVCRT__umask = umask;
    13681425  return old_umask;
    13691426}
     
    13721429 *              _utime (MSVCRT.@)
    13731430 */
    1374 int _utime(const char* path, struct _utimbuf *t)
    1375 {
    1376   int fd = _open(path, _O_WRONLY | _O_BINARY);
     1431int MSVCRT_utime(const char* path, struct _utimbuf *t)
     1432{
     1433  int fd = MSVCRT__open(path, _O_WRONLY | _O_BINARY);
    13771434
    13781435  if (fd > 0)
    13791436  {
    13801437    int retVal = _futime(fd, t);
    1381     _close(fd);
     1438    MSVCRT__close(fd);
    13821439    return retVal;
    13831440  }
     
    13951452  {
    13961453    int retVal = _futime(fd, t);
    1397     _close(fd);
     1454     MSVCRT__close(fd);
    13981455    return retVal;
    13991456  }
     
    14041461 *              _write (MSVCRT.@)
    14051462 */
    1406 int _write(int fd, const void* buf, unsigned int count)
     1463int MSVCRT__write(int fd, const void* buf, unsigned int count)
    14071464{
    14081465  DWORD num_written;
     
    14151472#endif
    14161473  if (hand == INVALID_HANDLE_VALUE)
    1417     return -1;
     1474    {
     1475      *MSVCRT__errno() = MSVCRT_EBADF;
     1476      return -1;
     1477    }
    14181478
    14191479  /* If appending, go to EOF */
    14201480  if (MSVCRT_flags[fd] & MSVCRT__IOAPPEND)
    1421     _lseek(fd, 0, FILE_END);
    1422 
    1423   if (WriteFile(hand, buf, count, &num_written, NULL)
    1424       &&  (num_written == count))
    1425     return num_written;
    1426 
    1427   TRACE(":failed-last error (%ld)\n",GetLastError());
    1428   if (MSVCRT_files[fd])
    1429      MSVCRT_files[fd]->_flag |= MSVCRT__IOERR;
    1430 
     1481    MSVCRT__lseek(fd, 0, FILE_END);
     1482
     1483  if (MSVCRT_flags[fd] & _O_BINARY)
     1484    {
     1485      if (WriteFile(hand, buf, count, &num_written, NULL)
     1486          &&  (num_written >= count))
     1487        return num_written;
     1488      TRACE(":failed-last error (%ld)\n",GetLastError());
     1489      if (MSVCRT_files[fd])
     1490        {
     1491          MSVCRT_files[fd]->_flag |= MSVCRT__IOERR;
     1492          *MSVCRT__errno() = MSVCRT_ENOSPC;
     1493        }
     1494    }
     1495  else
     1496    {
     1497      char *s=(char*)buf, *buf_start=(char*)buf, *p;
     1498      char crlf[]= {'\r','\n'};
     1499      unsigned int i;
     1500      DWORD num_to_write;
     1501      for (i = 0; i< count && !(MSVCRT_flags[fd] & MSVCRT__IOERR);i++, s++)
     1502        {
     1503          if (*s == '\n')
     1504            {
     1505              p = crlf;
     1506              num_to_write = 2;
     1507            }
     1508          else
     1509            {
     1510              p = s;
     1511              num_to_write = 1;
     1512            }
     1513          if ((WriteFile(hand, p, num_to_write, &num_written, NULL) == 0 ) || (num_written != num_to_write))
     1514            {
     1515              TRACE(":failed-last error (%ld) num_written %ld\n",GetLastError(),num_written);
     1516              if (MSVCRT_files[fd])
     1517                {
     1518                  MSVCRT_files[fd]->_flag |= MSVCRT__IOERR;
     1519                  *MSVCRT__errno() = MSVCRT_ENOSPC;
     1520                  return s - buf_start;
     1521                }
     1522            }
     1523        }
     1524      return s - buf_start;
     1525    }
    14311526  return -1;
    14321527}
     
    14351530 *              _putw (MSVCRT.@)
    14361531 */
    1437 int _putw(int val, MSVCRT_FILE* file)
    1438 {
    1439   return _write(file->_file, &val, sizeof(val)) == 1? val : MSVCRT_EOF;
     1532int MSVCRT__putw(int val, MSVCRT_FILE* file)
     1533{
     1534  return MSVCRT__write(file->_file, &val, sizeof(val)) == 1? val : MSVCRT_EOF;
    14401535}
    14411536
     
    14551550{
    14561551  int r;
    1457   r=_close(file->_file);
     1552  r=MSVCRT__close(file->_file);
    14581553  return ((r==MSVCRT_EOF) || (file->_flag & MSVCRT__IOERR) ? MSVCRT_EOF : 0);
    14591554}
     
    14811576{
    14821577  if(!file) {
    1483         _flushall();
     1578        MSVCRT__flushall();
    14841579        return 0;
    14851580  } else {
     
    15051600 *              _fgetchar (MSVCRT.@)
    15061601 */
    1507 int _fgetchar(void)
     1602int MSVCRT__fgetchar(void)
    15081603{
    15091604  return MSVCRT_fgetc(MSVCRT_stdin);
     
    15291624  if(file->_flag & MSVCRT__IONBF) {
    15301625        unsigned char c;
    1531         if (_read(file->_file,&c,1) != 1) {
     1626        if (MSVCRT__read(file->_file,&c,1) != 1) {
    15321627                file->_flag |= MSVCRT__IOEOF;
    15331628                return MSVCRT_EOF;
     
    15351630        return c;
    15361631  } else {
    1537         file->_cnt = _read(file->_file, file->_base, file->_bufsiz);
     1632        file->_cnt = MSVCRT__read(file->_file, file->_base, file->_bufsiz);
    15381633        if(file->_cnt<0) file->_cnt = 0;
    15391634        if(!file->_cnt) {
     
    15891684/*********************************************************************
    15901685 *              fgetwc (MSVCRT.@)
     1686 *
     1687 * In _O_TEXT mode, bultibyte characters are read from the file, dropping
     1688 * the CR from CR/LF combinations
    15911689 */
    15921690MSVCRT_wint_t MSVCRT_fgetwc(MSVCRT_FILE* file)
    15931691{
    1594   MSVCRT_wchar_t wc;
    1595   if (_read(file->_file, &wc, sizeof(wc)) != sizeof(wc))
     1692  char c;
     1693
     1694  if (file->_flag & _O_BINARY)
     1695    {
     1696      MSVCRT_wchar_t wc;
     1697      if (MSVCRT__read(file->_file, &wc, sizeof(wc)) != sizeof(wc))
     1698        return MSVCRT_WEOF;
     1699      return wc;
     1700    }
     1701  c = MSVCRT_fgetc(file);
     1702  if ((*__p___mb_cur_max() > 1) && MSVCRT_isleadbyte(c))
     1703    {
     1704      FIXME("Treat Multibyte characters\n");
     1705    }
     1706  if (c == MSVCRT_EOF)
    15961707    return MSVCRT_WEOF;
    1597   return wc;
     1708  else
     1709    return (MSVCRT_wint_t)c;
    15981710}
    15991711
     
    17211833    }
    17221834
    1723   fd = _open(path, flags);
     1835  fd = MSVCRT__open(path, flags);
    17241836
    17251837  if (fd < 0)
     
    17291841  TRACE(":got (%p)\n",file);
    17301842  if (!file)
    1731     _close(fd);
     1843    MSVCRT__close(fd);
    17321844
    17331845  return file;
     
    17621874 *              _fsopen (MSVCRT.@)
    17631875 */
    1764 MSVCRT_FILE*  _fsopen(const char *path, const char *mode, int share)
     1876MSVCRT_FILE*  MSVCRT__fsopen(const char *path, const char *mode, int share)
    17651877{
    17661878  FIXME(":(%s,%s,%d),ignoring share mode!\n",path,mode,share);
     
    18131925  } else {
    18141926        unsigned char cc=c;
    1815         return _write(file->_file, &cc, 1) == 1? c : MSVCRT_EOF;
     1927        return MSVCRT__write(file->_file, &cc, 1) == 1? c : MSVCRT_EOF;
    18161928  }
    18171929}
     
    18201932 *              _fputchar (MSVCRT.@)
    18211933 */
    1822 int _fputchar(int c)
     1934int MSVCRT__fputchar(int c)
    18231935{
    18241936  return MSVCRT_fputc(c, MSVCRT_stdout);
     
    18471959                return 0;
    18481960  }
    1849   if(rcnt) pread = _read(file->_file,ptr, rcnt);
     1961  if(rcnt) pread = MSVCRT__read(file->_file,ptr, rcnt);
    18501962  if (MSVCRT_flags[file->_file] & MSVCRT__IOEOF)
    18511963     /* expose feof condition in the flags
     
    19152027int MSVCRT_fsetpos(MSVCRT_FILE* file, MSVCRT_fpos_t *pos)
    19162028{
    1917   return _lseek(file->_file,*pos,SEEK_SET);
     2029  return MSVCRT__lseek(file->_file,*pos,SEEK_SET);
    19182030}
    19192031
     
    19372049        file->_flag &= ~(MSVCRT__IOREAD|MSVCRT__IOWRT);
    19382050  }
    1939   return (_lseek(file->_file,offset,whence) == -1)?-1:0;
     2051  return (MSVCRT__lseek(file->_file,offset,whence) == -1)?-1:0;
    19402052}
    19412053
     
    19542066        }
    19552067  }
    1956   pos = _tell(file->_file);
     2068  pos = MSVCRT__tell(file->_file);
    19572069  if(pos == -1) return pos;
    19582070  return off + pos;
     
    19862098        int res=msvcrt_flush_buffer(file);
    19872099        if(!res) {
    1988                 int pwritten = _write(file->_file, ptr, wrcnt);
     2100                int pwritten = MSVCRT__write(file->_file, ptr, wrcnt);
    19892101                if (pwritten <= 0) pwritten=0;
    19902102                written += pwritten;
     
    19992111int MSVCRT_fputs(const char *s, MSVCRT_FILE* file)
    20002112{
    2001     size_t len = strlen(s);
    2002     return MSVCRT_fwrite(s,sizeof(*s),len,file) == len ? 0 : MSVCRT_EOF;
     2113    size_t i, len = strlen(s);
     2114    if (file->_flag & _O_BINARY)
     2115      return MSVCRT_fwrite(s,sizeof(*s),len,file) == len ? 0 : MSVCRT_EOF;
     2116    for (i=0; i<len; i++)
     2117      if (MSVCRT_fputc(s[i], file) == MSVCRT_EOF)
     2118        return MSVCRT_EOF;
     2119    return 0;
    20032120}
    20042121
     
    20082125int MSVCRT_fputws(const MSVCRT_wchar_t *s, MSVCRT_FILE* file)
    20092126{
    2010     size_t len = strlenW(s);
    2011     return MSVCRT_fwrite(s,sizeof(*s),len,file) == len ? 0 : MSVCRT_EOF;
    2012 }
     2127    size_t i, len = strlenW(s);
     2128    if (file->_flag & _O_BINARY)
     2129      return MSVCRT_fwrite(s,sizeof(*s),len,file) == len ? 0 : MSVCRT_EOF;
     2130    for (i=0; i<len; i++)
     2131      {
     2132        if ((s[i] == L'\n') && (MSVCRT_fputc('\r', file) == MSVCRT_EOF))
     2133          return MSVCRT_WEOF;
     2134        if (MSVCRT_fputwc(s[i], file) == MSVCRT_WEOF)
     2135          return MSVCRT_WEOF;
     2136      }
     2137    return 0;
     2138}
     2139
    20132140
    20142141/*********************************************************************
     
    22392366  char *filename = MSVCRT_tmpnam(NULL);
    22402367  int fd;
    2241   fd = _open(filename, _O_CREAT | _O_BINARY | _O_RDWR | _O_TEMPORARY);
     2368  fd = MSVCRT__open(filename, _O_CREAT | _O_BINARY | _O_RDWR | _O_TEMPORARY);
    22422369  if (fd != -1)
    22432370    return msvcrt_alloc_fp(fd);
     
    22572384   * The code below handles both cases
    22582385   */
    2259   while ((written = vsnprintf(mem, resize, format, valist)) == -1 ||
     2386  dprintf(("MSVCRT: vfprintf %p %s",file,format));
     2387  while ((written = _vsnprintf(mem, resize, format, valist)) == -1 ||
    22602388          written > resize)
    22612389  {
     
    23982526    return res;
    23992527}
     2528
     2529/*********************************************************************
     2530 *              _wstati64 (MSVCRT.@)
     2531 */
     2532int _wstati64(const MSVCRT(wchar_t)* path, struct _stati64 * buf)
     2533{
     2534  LPSTR asciipath;
     2535  int   ret,len;
     2536
     2537  TRACE("MSVCRT: _wstati64 file (%s) %x buf(%p)\n",debugstr_w(path),sizeof(*buf),buf);
     2538 
     2539  len = WideCharToMultiByte( CP_ACP, 0, path, -1, NULL, 0, 0, NULL);
     2540  asciipath = (LPSTR)MSVCRT_malloc(len);
     2541  WideCharToMultiByte(CP_ACP, 0, path, -1, asciipath, len, 0, NULL );
     2542
     2543  ret = _stati64(asciipath,buf); 
     2544
     2545  MSVCRT_free(asciipath);
     2546
     2547  return 0;
     2548}
Note: See TracChangeset for help on using the changeset viewer.