Changeset 10005 for trunk/src/msvcrt/file.c
- Timestamp:
- Apr 10, 2003, 12:28:07 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/msvcrt/file.c
r9633 r10005 23 23 #ifdef __WIN32OS2__ 24 24 #include <emxheader.h> 25 /* thanks to stupid unistd.h in win dir! */ 26 #include <emxruntime\unistd.h> 25 27 #include <winbase.h> 26 28 #else … … 29 31 #endif 30 32 33 #include <stdlib.h> 34 #include <stdio.h> 35 #include <ctype.h> 36 #include <string.h> 31 37 #include <time.h> 32 #include <stdio.h> 33 #ifdef HAVE_UNISTD_H 34 # include <unistd.h> 35 #endif 38 36 39 37 40 #include "winternl.h" 41 #include "debugstr.h" 38 42 #include "msvcrt.h" 39 43 #include "msvcrt/errno.h" … … 82 86 83 87 /* INTERNAL: process umask */ 84 static int MSVCRT_ umask = 0;88 static int MSVCRT__umask = 0; 85 89 86 90 /* INTERNAL: Static buffer for temp file name */ … … 124 128 { 125 129 WARN(":fd (%d) - no handle!\n",fd); 126 * __doserrno() = 0;130 *MSVCRT_doserrno() = 0; 127 131 *MSVCRT__errno() = MSVCRT_EBADF; 128 132 return INVALID_HANDLE_VALUE; … … 177 181 static MSVCRT_FILE* msvcrt_alloc_fp(int fd) 178 182 { 179 TRACE(" :fd (%d) allocating FILE*\n",fd);183 TRACE("MSVCRT: fd (%d) allocating FILE*\n",fd); 180 184 if (fd < 0 || fd >= MSVCRT_fdend || 181 185 MSVCRT_handles[fd] == INVALID_HANDLE_VALUE) 182 186 { 183 187 WARN(":invalid fd %d\n",fd); 184 * __doserrno() = 0;188 *MSVCRT_doserrno() = 0; 185 189 *MSVCRT__errno() = MSVCRT_EBADF; 186 190 return NULL; … … 227 231 void msvcrt_free_io(void) 228 232 { 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); 233 237 } 234 238 … … 238 242 if(file->_bufsiz) { 239 243 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) { 241 245 return MSVCRT_EOF; 242 246 } … … 268 272 MSVCRT_FILE *__p__iob(void) 269 273 { 274 dprintf(("MSVCRT: __p__iob request")); 270 275 return &MSVCRT__iob[0]; 271 276 } … … 274 279 * _access (MSVCRT.@) 275 280 */ 276 int _access(const char *filename, int mode)281 int MSVCRT__access(const char *filename, int mode) 277 282 { 278 283 DWORD attr = GetFileAttributesA(filename); 279 284 280 TRACE(" (%s,%d) %ld\n",filename,mode,attr);285 TRACE("MSVCRT _access (%s,%d) %ld\n",filename,mode,attr); 281 286 282 287 if (!filename || attr == 0xffffffff) … … 300 305 DWORD attr = GetFileAttributesW(filename); 301 306 302 TRACE(" (%s,%d) %ld\n",debugstr_w(filename),mode,attr);307 TRACE("MSVCRT: _waccess (%s,%d) %ld\n",debugstr_w(filename),mode,attr); 303 308 304 309 if (!filename || attr == 0xffffffff) … … 318 323 * _chmod (MSVCRT.@) 319 324 */ 320 int _chmod(const char *path, int flags)325 int MSVCRT__chmod(const char *path, int flags) 321 326 { 322 327 DWORD oldFlags = GetFileAttributesA(path); 328 329 dprintf(("MSVCRT: _chmod %s",path)); 323 330 324 331 if (oldFlags != 0x0FFFFFFFF) … … 341 348 DWORD oldFlags = GetFileAttributesW(path); 342 349 350 dprintf(("MSVCRT: _wchmod %s",debugstr_w(path))); 351 343 352 if (oldFlags != 0x0FFFFFFFF) 344 353 { … … 356 365 * _unlink (MSVCRT.@) 357 366 */ 358 int _unlink(const char *path)359 { 360 TRACE(" (%s)\n",path);367 int MSVCRT__unlink(const char *path) 368 { 369 TRACE("MSVCRT: _unlink (%s)\n",path); 361 370 if(DeleteFileA(path)) 362 371 return 0; … … 382 391 * _close (MSVCRT.@) 383 392 */ 384 int _close(int fd)393 int MSVCRT__close(int fd) 385 394 { 386 395 HANDLE hand = msvcrt_fdtoh(fd); 387 396 388 TRACE(" :fd (%d) handle (%p)\n",fd,hand);397 TRACE("MSVCRT: _close fd (%d) handle (%p)\n",fd,hand); 389 398 if (hand == INVALID_HANDLE_VALUE) 390 399 return -1; … … 413 422 { 414 423 TRACE("deleting temporary file '%s'\n",MSVCRT_tempfiles[fd]); 415 _unlink(MSVCRT_tempfiles[fd]);424 MSVCRT__unlink(MSVCRT_tempfiles[fd]); 416 425 MSVCRT_free(MSVCRT_tempfiles[fd]); 417 426 MSVCRT_tempfiles[fd] = NULL; 418 427 } 419 428 420 TRACE(" :ok\n");429 TRACE("MSVCRT: _close ok\n"); 421 430 return 0; 422 431 } … … 429 438 HANDLE hand = msvcrt_fdtoh(fd); 430 439 431 TRACE(" :fd (%d) handle (%p)\n",fd,hand);440 TRACE("MSVCRT: _commit fd (%d) handle (%p)\n",fd,hand); 432 441 if (hand == INVALID_HANDLE_VALUE) 433 442 return -1; … … 458 467 HANDLE hand = msvcrt_fdtoh(fd); 459 468 460 TRACE(" :fd (%d) handle (%p)\n",fd,hand);469 TRACE("MSVCRT: _eof fd (%d) handle (%p)\n",fd,hand); 461 470 462 471 if (hand == INVALID_HANDLE_VALUE) … … 483 492 * _fcloseall (MSVCRT.@) 484 493 */ 485 int _fcloseall(void)494 int MSVCRT__fcloseall(void) 486 495 { 487 496 int num_closed = 0, i; 497 498 dprintf(("MSVCRT: _fcloseall")); 488 499 489 500 for (i = 3; i < MSVCRT_fdend; i++) 490 501 if (MSVCRT_handles[i] != INVALID_HANDLE_VALUE) 491 502 { 492 _close(i);503 MSVCRT__close(i); 493 504 num_closed++; 494 505 } … … 506 517 HANDLE hand = msvcrt_fdtoh(fd); 507 518 508 TRACE(" :fd (%d) handle (%p)\n",fd,hand);519 TRACE("MSVCRT: _lseeki64 fd (%d) handle (%p)\n",fd,hand); 509 520 if (hand == INVALID_HANDLE_VALUE) 510 521 return -1; … … 516 527 } 517 528 518 TRACE(" :fd (%d) to 0x%08lx%08lx pos %s\n",529 TRACE("MSVCRT: _lseek fd (%d) to 0x%08lx%08lx pos %s\n", 519 530 fd,hoffset,(long)offset, 520 531 (whence==SEEK_SET)?"SEEK_SET": … … 549 560 * _lseek (MSVCRT.@) 550 561 */ 551 LONG _lseek(int fd, LONG offset, int whence)562 LONG MSVCRT__lseek(int fd, LONG offset, int whence) 552 563 { 553 564 return _lseeki64(fd, offset, whence); … … 565 576 HANDLE hand = msvcrt_fdtoh(fd); 566 577 567 TRACE(" :fd (%d) handle (%p)\n",fd,hand);578 TRACE("MSVCRT: _locking fd (%d) handle (%p)\n",fd,hand); 568 579 if (hand == INVALID_HANDLE_VALUE) 569 580 return -1; … … 597 608 ret = LockFile(hand, cur_locn, 0L, nbytes, 0L); 598 609 if (ret) break; 599 sleep (1);610 Sleep (1); 600 611 } 601 612 } … … 613 624 void MSVCRT_rewind(MSVCRT_FILE* file) 614 625 { 615 TRACE(" :file (%p) fd (%d)\n",file,file->_file);626 TRACE("MSVCRT: rewind file (%p) fd (%d)\n",file,file->_file); 616 627 MSVCRT_fseek(file, 0L, SEEK_SET); 617 628 MSVCRT_clearerr(file); … … 621 632 * _fdopen (MSVCRT.@) 622 633 */ 623 MSVCRT_FILE* _fdopen(int fd, const char *mode)634 MSVCRT_FILE* MSVCRT__fdopen(int fd, const char *mode) 624 635 { 625 636 MSVCRT_FILE* file = msvcrt_alloc_fp(fd); 626 637 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); 628 639 629 640 return file; … … 637 648 MSVCRT_FILE* file = msvcrt_alloc_fp(fd); 638 649 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); 640 651 if (file) 641 652 MSVCRT_rewind(file); … … 647 658 * _filelength (MSVCRT.@) 648 659 */ 649 LONG _filelength(int fd) 650 { 651 LONG curPos = _lseek(fd, 0, SEEK_CUR); 660 LONG MSVCRT__filelength(int fd) 661 { 662 LONG curPos = MSVCRT__lseek(fd, 0, SEEK_CUR); 663 664 dprintf(("MSVCRT: _filelength")); 665 652 666 if (curPos != -1) 653 667 { 654 LONG endPos = _lseek(fd, 0, SEEK_END);668 LONG endPos = MSVCRT__lseek(fd, 0, SEEK_END); 655 669 if (endPos != -1) 656 670 { 657 671 if (endPos != curPos) 658 _lseek(fd, curPos, SEEK_SET);672 MSVCRT__lseek(fd, curPos, SEEK_SET); 659 673 return endPos; 660 674 } … … 666 680 * _fileno (MSVCRT.@) 667 681 */ 668 int _fileno(MSVCRT_FILE* file)669 { 670 TRACE(" :FILE* (%p) fd (%d)\n",file,file->_file);682 int MSVCRT__fileno(MSVCRT_FILE* file) 683 { 684 TRACE("MSVCRT: _fileno FILE* (%p) fd (%d)\n",file,file->_file); 671 685 return file->_file; 672 686 } … … 675 689 * _flushall (MSVCRT.@) 676 690 */ 677 int _flushall(void)691 int MSVCRT__flushall(void) 678 692 { 679 693 int num_flushed = 0, i = 3; 694 695 dprintf(("MSVCRT: _flushall")); 680 696 681 697 while(i < MSVCRT_fdend) … … 707 723 HANDLE hand = msvcrt_fdtoh(fd); 708 724 709 TRACE(" :fd (%d) stat (%p)\n",fd,buf);725 TRACE("MSVCRT: _fstati64 fd (%d) stat (%p)\n",fd,buf); 710 726 if (hand == INVALID_HANDLE_VALUE) 711 727 return -1; … … 722 738 if (!GetFileInformationByHandle(hand, &hfi)) 723 739 { 724 WARN(" :failed-last error (%ld)\n",GetLastError());740 WARN("MSVCRT: _fstati64 failed-last error (%ld)\n",GetLastError()); 725 741 MSVCRT__set_errno(ERROR_INVALID_PARAMETER); 726 742 return -1; … … 735 751 return 0; 736 752 } 753 737 754 738 755 /********************************************************************* … … 810 827 * _isatty (MSVCRT.@) 811 828 */ 812 int _isatty(int fd)829 int MSVCRT__isatty(int fd) 813 830 { 814 831 HANDLE hand = msvcrt_fdtoh(fd); … … 948 965 949 966 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 960 976 switch( shflags ) 961 977 { … … 1001 1017 { 1002 1018 if (oflags & _O_TEMPORARY) 1003 MSVCRT_tempfiles[fd] = _strdup(path);1019 MSVCRT_tempfiles[fd] = MSVCRT__strdup(path); 1004 1020 if (ioflag & MSVCRT__IOAPPEND) 1005 _lseek(fd, 0, FILE_END);1021 MSVCRT__lseek(fd, 0, FILE_END); 1006 1022 } 1007 1023 … … 1037 1053 * _open (MSVCRT.@) 1038 1054 */ 1039 int _open( const char *path, int flags, ... )1055 int MSVCRT__open( const char *path, int flags, ... ) 1040 1056 { 1041 1057 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); 1049 1069 } 1050 1070 … … 1065 1085 if (patha && WideCharToMultiByte(CP_ACP,0,path,len,patha,len,NULL,NULL)) 1066 1086 { 1067 int retval = _open(patha,flags,pmode);1087 int retval = MSVCRT__open(patha,flags,pmode); 1068 1088 MSVCRT_free(patha); 1069 1089 return retval; … … 1077 1097 * _creat (MSVCRT.@) 1078 1098 */ 1079 int _creat(const char *path, int flags)1099 int MSVCRT__creat(const char *path, int flags) 1080 1100 { 1081 1101 int usedFlags = (flags & _O_TEXT)| _O_CREAT| _O_WRONLY| _O_TRUNC; 1082 return _open(path, usedFlags);1102 return MSVCRT__open(path, usedFlags); 1083 1103 } 1084 1104 … … 1107 1127 * _rmtmp (MSVCRT.@) 1108 1128 */ 1109 int _rmtmp(void)1129 int MSVCRT__rmtmp(void) 1110 1130 { 1111 1131 int num_removed = 0, i; … … 1114 1134 if (MSVCRT_tempfiles[i]) 1115 1135 { 1116 _close(i);1136 MSVCRT__close(i); 1117 1137 num_removed++; 1118 1138 } … … 1126 1146 * _read (MSVCRT.@) 1127 1147 */ 1128 int _read(int fd, void *buf, unsigned int count)1148 int MSVCRT__read(int fd, void *buf, unsigned int count) 1129 1149 { 1130 1150 DWORD num_read; … … 1137 1157 return -1; 1138 1158 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) 1142 1160 { 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; 1148 1178 } 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; 1155 1209 } 1156 1210 … … 1158 1212 * _getw (MSVCRT.@) 1159 1213 */ 1160 int _getw(MSVCRT_FILE* file)1214 int MSVCRT__getw(MSVCRT_FILE* file) 1161 1215 { 1162 1216 int i; 1163 if ( _read(file->_file, &i, sizeof(int)) != 1)1217 if (MSVCRT__read(file->_file, &i, sizeof(int)) != 1) 1164 1218 return MSVCRT_EOF; 1165 1219 return i; … … 1169 1223 * _setmode (MSVCRT.@) 1170 1224 */ 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; 1225 int 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; 1176 1233 } 1177 1234 … … 1202 1259 as drive letter 1203 1260 */ 1204 if (isalpha( *path)&& (*(path+1)==':'))1261 if (isalpha((int)*path) && (*(path+1)==':')) 1205 1262 buf->st_dev = buf->st_rdev = toupper(*path) - 'A'; /* drive num */ 1206 1263 else 1207 buf->st_dev = buf->st_rdev = _getdrive() - 1;1264 buf->st_dev = buf->st_rdev = MSVCRT__getdrive() - 1; 1208 1265 1209 1266 plen = strlen(path); … … 1280 1337 buf->st_dev = buf->st_rdev = toupperW(*path - 'A'); /* drive num */ 1281 1338 else 1282 buf->st_dev = buf->st_rdev = _getdrive() - 1;1339 buf->st_dev = buf->st_rdev = MSVCRT__getdrive() - 1; 1283 1340 1284 1341 plen = strlenW(path); … … 1319 1376 * _tell (MSVCRT.@) 1320 1377 */ 1321 LONG _tell(int fd)1322 { 1323 return _lseek(fd, 0, SEEK_CUR);1378 LONG MSVCRT__tell(int fd) 1379 { 1380 return MSVCRT__lseek(fd, 0, SEEK_CUR); 1324 1381 } 1325 1382 … … 1327 1384 * _tempnam (MSVCRT.@) 1328 1385 */ 1329 char * _tempnam(const char *dir, const char *prefix)1386 char *MSVCRT__tempnam(const char *dir, const char *prefix) 1330 1387 { 1331 1388 char tmpbuf[MAX_PATH]; … … 1335 1392 { 1336 1393 TRACE("got name (%s)\n",tmpbuf); 1337 return _strdup(tmpbuf);1394 return MSVCRT__strdup(tmpbuf); 1338 1395 } 1339 1396 TRACE("failed (%ld)\n",GetLastError()); … … 1361 1418 * _umask (MSVCRT.@) 1362 1419 */ 1363 int _umask(int umask)1364 { 1365 int old_umask = MSVCRT_ umask;1366 TRACE(" (%d)\n",umask);1367 MSVCRT_ umask = umask;1420 int MSVCRT_umask(int umask) 1421 { 1422 int old_umask = MSVCRT__umask; 1423 TRACE("MSVCRT: _umask (%d)\n",umask); 1424 MSVCRT__umask = umask; 1368 1425 return old_umask; 1369 1426 } … … 1372 1429 * _utime (MSVCRT.@) 1373 1430 */ 1374 int _utime(const char* path, struct _utimbuf *t)1375 { 1376 int fd = _open(path, _O_WRONLY | _O_BINARY);1431 int MSVCRT_utime(const char* path, struct _utimbuf *t) 1432 { 1433 int fd = MSVCRT__open(path, _O_WRONLY | _O_BINARY); 1377 1434 1378 1435 if (fd > 0) 1379 1436 { 1380 1437 int retVal = _futime(fd, t); 1381 _close(fd);1438 MSVCRT__close(fd); 1382 1439 return retVal; 1383 1440 } … … 1395 1452 { 1396 1453 int retVal = _futime(fd, t); 1397 _close(fd);1454 MSVCRT__close(fd); 1398 1455 return retVal; 1399 1456 } … … 1404 1461 * _write (MSVCRT.@) 1405 1462 */ 1406 int _write(int fd, const void* buf, unsigned int count)1463 int MSVCRT__write(int fd, const void* buf, unsigned int count) 1407 1464 { 1408 1465 DWORD num_written; … … 1415 1472 #endif 1416 1473 if (hand == INVALID_HANDLE_VALUE) 1417 return -1; 1474 { 1475 *MSVCRT__errno() = MSVCRT_EBADF; 1476 return -1; 1477 } 1418 1478 1419 1479 /* If appending, go to EOF */ 1420 1480 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 } 1431 1526 return -1; 1432 1527 } … … 1435 1530 * _putw (MSVCRT.@) 1436 1531 */ 1437 int _putw(int val, MSVCRT_FILE* file)1438 { 1439 return _write(file->_file, &val, sizeof(val)) == 1? val : MSVCRT_EOF;1532 int MSVCRT__putw(int val, MSVCRT_FILE* file) 1533 { 1534 return MSVCRT__write(file->_file, &val, sizeof(val)) == 1? val : MSVCRT_EOF; 1440 1535 } 1441 1536 … … 1455 1550 { 1456 1551 int r; 1457 r= _close(file->_file);1552 r=MSVCRT__close(file->_file); 1458 1553 return ((r==MSVCRT_EOF) || (file->_flag & MSVCRT__IOERR) ? MSVCRT_EOF : 0); 1459 1554 } … … 1481 1576 { 1482 1577 if(!file) { 1483 _flushall();1578 MSVCRT__flushall(); 1484 1579 return 0; 1485 1580 } else { … … 1505 1600 * _fgetchar (MSVCRT.@) 1506 1601 */ 1507 int _fgetchar(void)1602 int MSVCRT__fgetchar(void) 1508 1603 { 1509 1604 return MSVCRT_fgetc(MSVCRT_stdin); … … 1529 1624 if(file->_flag & MSVCRT__IONBF) { 1530 1625 unsigned char c; 1531 if ( _read(file->_file,&c,1) != 1) {1626 if (MSVCRT__read(file->_file,&c,1) != 1) { 1532 1627 file->_flag |= MSVCRT__IOEOF; 1533 1628 return MSVCRT_EOF; … … 1535 1630 return c; 1536 1631 } else { 1537 file->_cnt = _read(file->_file, file->_base, file->_bufsiz);1632 file->_cnt = MSVCRT__read(file->_file, file->_base, file->_bufsiz); 1538 1633 if(file->_cnt<0) file->_cnt = 0; 1539 1634 if(!file->_cnt) { … … 1589 1684 /********************************************************************* 1590 1685 * fgetwc (MSVCRT.@) 1686 * 1687 * In _O_TEXT mode, bultibyte characters are read from the file, dropping 1688 * the CR from CR/LF combinations 1591 1689 */ 1592 1690 MSVCRT_wint_t MSVCRT_fgetwc(MSVCRT_FILE* file) 1593 1691 { 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) 1596 1707 return MSVCRT_WEOF; 1597 return wc; 1708 else 1709 return (MSVCRT_wint_t)c; 1598 1710 } 1599 1711 … … 1721 1833 } 1722 1834 1723 fd = _open(path, flags);1835 fd = MSVCRT__open(path, flags); 1724 1836 1725 1837 if (fd < 0) … … 1729 1841 TRACE(":got (%p)\n",file); 1730 1842 if (!file) 1731 _close(fd);1843 MSVCRT__close(fd); 1732 1844 1733 1845 return file; … … 1762 1874 * _fsopen (MSVCRT.@) 1763 1875 */ 1764 MSVCRT_FILE* _fsopen(const char *path, const char *mode, int share)1876 MSVCRT_FILE* MSVCRT__fsopen(const char *path, const char *mode, int share) 1765 1877 { 1766 1878 FIXME(":(%s,%s,%d),ignoring share mode!\n",path,mode,share); … … 1813 1925 } else { 1814 1926 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; 1816 1928 } 1817 1929 } … … 1820 1932 * _fputchar (MSVCRT.@) 1821 1933 */ 1822 int _fputchar(int c)1934 int MSVCRT__fputchar(int c) 1823 1935 { 1824 1936 return MSVCRT_fputc(c, MSVCRT_stdout); … … 1847 1959 return 0; 1848 1960 } 1849 if(rcnt) pread = _read(file->_file,ptr, rcnt);1961 if(rcnt) pread = MSVCRT__read(file->_file,ptr, rcnt); 1850 1962 if (MSVCRT_flags[file->_file] & MSVCRT__IOEOF) 1851 1963 /* expose feof condition in the flags … … 1915 2027 int MSVCRT_fsetpos(MSVCRT_FILE* file, MSVCRT_fpos_t *pos) 1916 2028 { 1917 return _lseek(file->_file,*pos,SEEK_SET);2029 return MSVCRT__lseek(file->_file,*pos,SEEK_SET); 1918 2030 } 1919 2031 … … 1937 2049 file->_flag &= ~(MSVCRT__IOREAD|MSVCRT__IOWRT); 1938 2050 } 1939 return ( _lseek(file->_file,offset,whence) == -1)?-1:0;2051 return (MSVCRT__lseek(file->_file,offset,whence) == -1)?-1:0; 1940 2052 } 1941 2053 … … 1954 2066 } 1955 2067 } 1956 pos = _tell(file->_file);2068 pos = MSVCRT__tell(file->_file); 1957 2069 if(pos == -1) return pos; 1958 2070 return off + pos; … … 1986 2098 int res=msvcrt_flush_buffer(file); 1987 2099 if(!res) { 1988 int pwritten = _write(file->_file, ptr, wrcnt);2100 int pwritten = MSVCRT__write(file->_file, ptr, wrcnt); 1989 2101 if (pwritten <= 0) pwritten=0; 1990 2102 written += pwritten; … … 1999 2111 int MSVCRT_fputs(const char *s, MSVCRT_FILE* file) 2000 2112 { 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; 2003 2120 } 2004 2121 … … 2008 2125 int MSVCRT_fputws(const MSVCRT_wchar_t *s, MSVCRT_FILE* file) 2009 2126 { 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 2013 2140 2014 2141 /********************************************************************* … … 2239 2366 char *filename = MSVCRT_tmpnam(NULL); 2240 2367 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); 2242 2369 if (fd != -1) 2243 2370 return msvcrt_alloc_fp(fd); … … 2257 2384 * The code below handles both cases 2258 2385 */ 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 || 2260 2388 written > resize) 2261 2389 { … … 2398 2526 return res; 2399 2527 } 2528 2529 /********************************************************************* 2530 * _wstati64 (MSVCRT.@) 2531 */ 2532 int _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.