Changeset 170
- Timestamp:
- Oct 20, 2018, 9:58:56 AM (6 years ago)
- Location:
- trunk/src/VBox/Additions/os2/VBoxSF
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/Makefile.kmk ¶
r154 r170 20 20 VBoxSF_INCS := \ 21 21 . \ 22 $(PATH_ROOT)/include \ 22 23 $(PATH_ROOT)/src/VBox/Additions/common/VBoxGuestLib \ 23 24 $(PATH_ROOT)/src/VBox/Additions/common/VBoxGuest \ -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSF.cpp ¶
r161 r170 6 6 /* 7 7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 * Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 8 9 * 9 10 * Permission is hereby granted, free of charge, to any person … … 40 41 #include <iprt/mem.h> 41 42 42 VBSFCLIENT g_clientHandle = {0}; 43 APIRET APIENTRY parseFileName(const char *pszPath, PCDFSI pcdfsi, 44 char *pszParsedPath, int *pcbParsedPath, VBGLSFMAP *map); 45 46 VBGLSFCLIENT g_clientHandle = {0}; 43 47 44 48 … … 68 72 PVBOXSFVP pvboxsfvp = (PVBOXSFVP)pvpfsd; 69 73 70 //__asm__ __volatile__ (".byte 0xcc\n\t");71 72 74 if (! pszDev) 73 75 { … … 79 81 { 80 82 case 0: // Attach 81 dprintf("*pcbParm=%u, pszParm=%s\n", *pcbParm, pszParm);82 83 if (pszDev[1] != ':') 83 84 { … … 91 92 goto FS32_ATTACHEXIT; 92 93 } 93 dprintf("g_clientHandle=%lx\n", g_clientHandle);94 94 sharename = make_shflstring((char *)pszParm); 95 rc = vboxCallMapFolder(&g_clientHandle, sharename, &pvboxsfvp->map);95 rc = VbglR0SfMapFolder(&g_clientHandle, sharename, &pvboxsfvp->map); 96 96 strncpy(pvboxsfvp->szLabel, (char *)pszParm, 12); 97 97 pvboxsfvp->szLabel[11] = '\0'; 98 dprintf("pvboxsfvp->map=%lx\n", pvboxsfvp->map);99 98 free_shflstring(sharename); 100 99 if (RT_FAILURE(rc)) 101 100 { 102 dprintf(" vboxCallMapFolder rc=%d", rc);101 dprintf("VbglR0SfMapFolder rc=%d", rc); 103 102 rc = ERROR_VOLUME_NOT_MOUNTED; 104 103 goto FS32_ATTACHEXIT; … … 117 116 118 117 case 2: // Query 119 dprintf("pvboxsfvp->szLabel=%s\n", pvboxsfvp->szLabel);120 dprintf("pvboxsfvp->map=%lx\n", pvboxsfvp->map);121 118 len = MIN(strlen(pvboxsfvp->szLabel) + 1, 12); 122 119 if (*pcbParm >= sizeof(pvboxsfvp->szLabel) && pszParm) … … 156 153 APIRET rc = NO_ERROR; 157 154 int32_t rv = 0; 158 VB SFMAP map;155 VBGLSFMAP map; 159 156 PVPFSI pvpfsi = NULL; 160 157 PVPFSD pvpfsd = NULL; … … 174 171 dprintf("map=%lx\n", map); 175 172 176 rv = vboxCallFSInfo(&g_clientHandle, &map, 0,173 rv = VbglR0SfFsInfo(&g_clientHandle, &map, 0, 177 174 (SHFL_INFO_GET | SHFL_INFO_VOLUME), &bytes, (PSHFLDIRINFO)&volume_info); 178 175 179 176 if (RT_FAILURE(rv)) 180 177 { 181 dprintf("VBOXSF: vboxCallFSInfo failed (%d)\n", rv);178 dprintf("VBOXSF: VbglR0SfFsInfo failed (%d)\n", rv); 182 179 return vbox_err_to_os2_err(rv); 183 180 } … … 315 312 { 316 313 APIRET hrc = NO_ERROR; 317 SHFLCREATEPARMS params; 318 PVPFSI pvpfsi = NULL; 319 PVPFSD pvpfsd = NULL; 320 PVBOXSFVP pvboxsfvp; 321 PSHFLSTRING path; 322 char *pwsz; 323 char *pszFullDir; 314 SHFLCREATEPARMS params = {0}; 315 PSHFLSTRING path = NULL; 316 char *pszFullName = NULL; 317 int cbFullName; 318 VBGLSFMAP map; 319 char *pwsz = NULL; 324 320 int rc; 325 321 … … 331 327 dprintf("chdir to: %s\n", pszDir); 332 328 333 FSH32_GETVOLPARM(pcdfsi->cdi_hVPB, &pvpfsi, &pvpfsd); 334 335 pvboxsfvp = (PVBOXSFVP)pvpfsd; 336 337 pszFullDir = (char *)RTMemAlloc(CCHMAXPATHCOMP); 338 339 if ( (pszDir[0] == '\\' || pszDir[1] == ':') ) 340 { 341 // absolute path 342 strcpy(pszFullDir, (char *)pszDir); 343 dprintf("1\n"); 344 } 345 else 346 { 347 // relative path 348 strcpy(pszFullDir, pcdfsi->cdi_curdir); 349 350 if (pszFullDir[strlen(pszFullDir) - 1] != '\\') 351 strcat(pszFullDir, "\\"); 352 353 strcat(pszFullDir, (char *)pszDir); 354 dprintf("2\n"); 355 } 356 357 pszFullDir += 3; 358 //if (iCurDirEnd != 0xffff) 359 //{ 360 // pszFullDir += iCurDirEnd - 3; 361 //} 362 363 dprintf("pszFullDir=%s\n", pszFullDir); 364 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 365 vboxsfStrToUtf8(pwsz, (char *)pszFullDir); 329 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 330 331 if (! pszFullName) 332 { 333 hrc = ERROR_NOT_ENOUGH_MEMORY; 334 goto FS32_CHDIREXIT; 335 } 336 337 cbFullName = CCHMAXPATHCOMP + 1; 338 339 hrc = parseFileName((char *)pszDir, pcdfsi, pszFullName, &cbFullName, &map); 340 341 if (hrc) 342 { 343 dprintf("Filename parse error!\n"); 344 goto FS32_CHDIREXIT; 345 } 346 347 dprintf("pszFullName=%s\n", pszFullName); 348 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 349 vboxsfStrToUtf8(pwsz, (char *)pszFullName); 366 350 367 351 path = make_shflstring((char *)pwsz); 368 rc = vboxCallCreate(&g_clientHandle, &pvboxsfvp->map, path, ¶ms); 369 free_shflstring(path); 370 RTMemFree(pwsz); 371 RTMemFree(pszFullDir); 352 353 params.Handle = SHFL_HANDLE_NIL; 354 params.CreateFlags = SHFL_CF_DIRECTORY | SHFL_CF_ACT_OPEN_IF_EXISTS | SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READ; 355 356 rc = VbglR0SfCreate(&g_clientHandle, &map, path, ¶ms); 372 357 373 358 if (RT_SUCCESS(rc)) … … 379 364 380 365 pcdfsd->cwd->handle = params.Handle; 381 pcdfsd->cwd->map = pvboxsfvp->map;366 pcdfsd->cwd->map = map; 382 367 dprintf("success\n"); 383 368 } … … 391 376 392 377 case CD_FREE: /* deallocate working directory */ 393 vboxCallClose(&g_clientHandle, &pcdfsd->cwd->map, pcdfsd->cwd->handle);378 VbglR0SfClose(&g_clientHandle, &pcdfsd->cwd->map, pcdfsd->cwd->handle); 394 379 RTMemFree(pcdfsd->cwd); 395 380 hrc = NO_ERROR; … … 401 386 402 387 FS32_CHDIREXIT: 388 if (path) 389 RTMemFree(path); 390 if (pwsz) 391 RTMemFree(pwsz); 392 if (pszFullName) 393 RTMemFree(pszFullName); 394 403 395 dprintf(" => %d\n", hrc); 404 396 return hrc; … … 410 402 PBYTE pEABuf, ULONG flag) 411 403 { 412 SHFLCREATEPARMS params ;404 SHFLCREATEPARMS params = {0}; 413 405 APIRET hrc = NO_ERROR; 414 PVPFSI pvpfsi;415 PVPFSD pvpfsd;406 char *pszFullName = NULL; 407 int cbFullName; 416 408 PVBOXSFVP pvboxsfvp; 417 PSHFLSTRING path; 418 char *pwsz; 409 PSHFLSTRING path = NULL; 410 char *pwsz = NULL; 411 VBGLSFMAP map; 419 412 int rc; 420 413 … … 424 417 params.Info.cbObject = 0; 425 418 params.CreateFlags = SHFL_CF_DIRECTORY | SHFL_CF_ACT_CREATE_IF_NEW | 426 SHFL_CF_ACT_FAIL_IF_EXISTS | SHFL_CF_ACCESS_READ; 427 428 FSH32_GETVOLPARM(pcdfsi->cdi_hVPB, &pvpfsi, &pvpfsd); 429 430 pvboxsfvp = (PVBOXSFVP)pvpfsd; 431 432 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 433 vboxsfStrToUtf8(pwsz, (char *)pszName); 419 SHFL_CF_ACT_FAIL_IF_EXISTS | SHFL_CF_ACCESS_READWRITE; //SHFL_CF_ACCESS_READ; 420 421 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 422 423 if (! pszFullName) 424 { 425 hrc = ERROR_NOT_ENOUGH_MEMORY; 426 goto FS32_MKDIREXIT; 427 } 428 429 cbFullName = CCHMAXPATHCOMP + 1; 430 431 hrc = parseFileName((char *)pszName, pcdfsi, pszFullName, &cbFullName, &map); 432 433 if (hrc) 434 { 435 dprintf("Filename parse error!\n"); 436 goto FS32_MKDIREXIT; 437 } 438 439 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 440 vboxsfStrToUtf8(pwsz, (char *)pszFullName); 441 dprintf("path=%s\n", pwsz); 434 442 435 443 path = make_shflstring((char *)pwsz); 436 rc = vboxCallCreate(&g_clientHandle, &pvboxsfvp->map, path, ¶ms); 437 RTMemFree(path); 438 RTMemFree(pwsz); 444 rc = VbglR0SfCreate(&g_clientHandle, &map, path, ¶ms); 439 445 440 446 /** @todo r=ramshankar: we should perhaps also check rc here and change … … 442 448 if (params.Handle == SHFL_HANDLE_NIL) 443 449 { 450 dprintf("fail\n"); 444 451 hrc = vbox_err_to_os2_err(rc); 445 452 goto FS32_MKDIREXIT; 446 453 } 447 454 448 vboxCallClose(&g_clientHandle, &pvboxsfvp->map, params.Handle);455 VbglR0SfClose(&g_clientHandle, &map, params.Handle); 449 456 hrc = NO_ERROR; 450 457 451 458 FS32_MKDIREXIT: 459 if (pszFullName) 460 RTMemFree(pszFullName); 461 if (path) 462 RTMemFree(path); 463 if (pwsz) 464 RTMemFree(pwsz); 465 452 466 dprintf(" => %d\n", hrc); 453 467 return hrc; … … 459 473 { 460 474 APIRET hrc = NO_ERROR; 461 P VPFSI pvpfsi;462 PVPFSD pvpfsd;463 PVBOXSFVP pvboxsfvp;464 PSHFLSTRING path;465 char *pwsz ;475 PSHFLSTRING path = NULL; 476 char *pszFullName = NULL; 477 int cbFullName; 478 VBGLSFMAP map; 479 char *pwsz = NULL; 466 480 int rc; 467 481 468 482 dprintf("VBOXSF: FS32_RMDIR(%s)\n", pszName); 469 483 470 FSH32_GETVOLPARM(pcdfsi->cdi_hVPB, &pvpfsi, &pvpfsd); 471 472 pvboxsfvp = (PVBOXSFVP)pvpfsd; 473 474 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 475 vboxsfStrToUtf8(pwsz, (char *)pszName); 484 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 485 486 if (! pszFullName) 487 { 488 hrc = ERROR_NOT_ENOUGH_MEMORY; 489 goto FS32_RMDIREXIT; 490 } 491 492 cbFullName = CCHMAXPATHCOMP + 1; 493 494 hrc = parseFileName((char *)pszName, pcdfsi, pszFullName, &cbFullName, &map); 495 496 if (hrc) 497 { 498 dprintf("Filename parse error!\n"); 499 goto FS32_RMDIREXIT; 500 } 501 502 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 503 vboxsfStrToUtf8(pwsz, (char *)pszFullName); 476 504 477 505 path = make_shflstring((char *)pwsz); 478 rc = vboxCallRemove(&g_clientHandle, &pvboxsfvp->map, path, SHFL_REMOVE_DIR); 479 RTMemFree(path); 480 RTMemFree(pwsz); 506 rc = VbglR0SfRemove(&g_clientHandle, &map, path, SHFL_REMOVE_DIR); 481 507 482 508 hrc = vbox_err_to_os2_err(rc); 483 509 484 510 FS32_RMDIREXIT: 511 if (pszFullName) 512 RTMemFree(pszFullName); 513 if (path) 514 RTMemFree(path); 515 if (pwsz) 516 RTMemFree(pwsz); 517 485 518 dprintf(" => %d\n", hrc); 486 519 return hrc; … … 502 535 { 503 536 APIRET hrc = NO_ERROR; 504 PVPFSI pvpfsi; 505 PVPFSD pvpfsd; 506 PVBOXSFVP pvboxsfvp; 507 PSHFLSTRING oldpath, newpath; 508 char *pwszFrom, *pwszTo; 537 PSHFLSTRING oldpath = NULL, newpath = NULL; 538 char *pszFullSrc = NULL; 539 int cbFullSrc; 540 char *pszFullDst = NULL; 541 int cbFullDst; 542 VBGLSFMAP map; 543 char *pwszSrc = NULL, *pwszDst = NULL; 509 544 int rc; 510 545 511 546 dprintf("VBOXSF: FS32_MOVE(%s, %s, %lx)\n", pszSrc, pszDst, flag); 512 547 513 FSH32_GETVOLPARM(pcdfsi->cdi_hVPB, &pvpfsi, &pvpfsd); 514 515 pvboxsfvp = (PVBOXSFVP)pvpfsd; 516 517 pwszFrom = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 518 pwszTo = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 519 vboxsfStrToUtf8(pwszFrom, (char *)pszSrc); 520 vboxsfStrToUtf8(pwszTo, (char *)pszDst); 521 522 oldpath = make_shflstring((char *)pwszFrom); 523 newpath = make_shflstring((char *)pwszTo); 524 525 rc = vboxCallRename(&g_clientHandle, &pvboxsfvp->map, oldpath, newpath, SHFL_RENAME_FILE | SHFL_RENAME_REPLACE_IF_EXISTS); 526 RTMemFree(oldpath); 527 RTMemFree(newpath); 528 RTMemFree(pwszFrom); 529 RTMemFree(pwszTo); 548 pszFullSrc = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 549 550 if (! pszFullSrc) 551 { 552 hrc = ERROR_NOT_ENOUGH_MEMORY; 553 goto FS32_MOVEEXIT; 554 } 555 556 cbFullSrc = CCHMAXPATHCOMP + 1; 557 558 hrc = parseFileName((char *)pszSrc, pcdfsi, pszFullSrc, &cbFullSrc, &map); 559 560 if (hrc) 561 { 562 dprintf("Filename parse error!\n"); 563 goto FS32_MOVEEXIT; 564 } 565 566 pszFullDst = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 567 568 if (! pszFullDst) 569 { 570 hrc = ERROR_NOT_ENOUGH_MEMORY; 571 goto FS32_MOVEEXIT; 572 } 573 574 cbFullDst = CCHMAXPATHCOMP + 1; 575 576 hrc = parseFileName((char *)pszDst, pcdfsi, pszFullDst, &cbFullDst, &map); 577 578 if (hrc) 579 { 580 dprintf("Filename parse error!\n"); 581 goto FS32_MOVEEXIT; 582 } 583 584 pwszSrc = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 585 pwszDst = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 586 587 vboxsfStrToUtf8(pwszSrc, (char *)pszFullSrc); 588 vboxsfStrToUtf8(pwszDst, (char *)pszFullDst); 589 590 oldpath = make_shflstring((char *)pwszSrc); 591 newpath = make_shflstring((char *)pwszDst); 592 593 rc = VbglR0SfRename(&g_clientHandle, &map, oldpath, newpath, SHFL_RENAME_FILE | SHFL_RENAME_REPLACE_IF_EXISTS); 530 594 531 595 hrc = vbox_err_to_os2_err(rc); 532 596 533 597 FS32_MOVEEXIT: 598 if (oldpath) 599 RTMemFree(oldpath); 600 if (newpath) 601 RTMemFree(newpath); 602 if (pwszSrc) 603 RTMemFree(pwszSrc); 604 if (pwszDst) 605 RTMemFree(pwszDst); 606 if (pszFullSrc) 607 RTMemFree(pszFullSrc); 608 if (pszFullDst) 609 RTMemFree(pszFullDst); 610 534 611 dprintf(" => %d\n", hrc); 535 612 return hrc; … … 541 618 { 542 619 APIRET hrc = NO_ERROR; 543 P VPFSI pvpfsi;544 PVPFSD pvpfsd;545 PVBOXSFVP pvboxsfvp;546 PSHFLSTRING path;547 char *pwsz;620 PSHFLSTRING path = NULL; 621 char *pwsz = NULL; 622 char *pszFullName = NULL; 623 int cbFullName; 624 VBGLSFMAP map; 548 625 int rc; 549 626 550 627 dprintf("VBOXSF: FS32_DELETE(%s)\n", pszFile); 551 628 552 FSH32_GETVOLPARM(pcdfsi->cdi_hVPB, &pvpfsi, &pvpfsd); 553 554 pvboxsfvp = (PVBOXSFVP)pvpfsd; 555 556 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 557 vboxsfStrToUtf8(pwsz, (char *)pszFile); 629 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 630 631 if (! pszFullName) 632 { 633 hrc = ERROR_NOT_ENOUGH_MEMORY; 634 goto FS32_DELETEEXIT; 635 } 636 637 cbFullName = CCHMAXPATHCOMP + 1; 638 639 hrc = parseFileName((char *)pszFile, pcdfsi, pszFullName, &cbFullName, &map); 640 641 if (hrc) 642 { 643 dprintf("Filename parse error!\n"); 644 goto FS32_DELETEEXIT; 645 } 646 647 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 648 vboxsfStrToUtf8(pwsz, (char *)pszFullName); 558 649 559 650 path = make_shflstring((char *)pwsz); 560 rc = vboxCallRemove(&g_clientHandle, &pvboxsfvp->map, path, SHFL_REMOVE_FILE); 561 RTMemFree(path); 562 RTMemFree(pwsz); 651 rc = VbglR0SfRemove(&g_clientHandle, &map, path, SHFL_REMOVE_FILE); 563 652 564 653 hrc = vbox_err_to_os2_err(rc); 565 654 566 655 FS32_DELETEEXIT: 656 if (pszFullName) 657 RTMemFree(pszFullName); 658 if (path) 659 RTMemFree(path); 660 if (pwsz) 661 RTMemFree(pwsz); 662 567 663 dprintf(" => %d\n", hrc); 568 664 return hrc; … … 573 669 FS32_FILEATTRIBUTE(ULONG flag, PCDFSI pcdfsi, PVBOXSFCD pcdfsd, PCSZ pszName, USHORT iCurDirEnd, PUSHORT pAttr) 574 670 { 575 SHFLCREATEPARMS params ;671 SHFLCREATEPARMS params = {0}; 576 672 APIRET hrc = NO_ERROR; 577 PVPFSI pvpfsi;578 PVPFSD pvpfsd;579 PVBOXSFVP pvboxsfvp;580 673 PSHFLDIRINFO file = NULL; 581 674 uint32_t len = sizeof(SHFLDIRINFO); 582 uint32_t num_files = 0; 583 uint32_t index = 0; 584 char *str, *p, *lastslash; 585 char *pszDirName; 586 PSHFLSTRING path, path2; 587 char *pwsz; 675 PSHFLSTRING path = NULL; 676 char *pwsz = NULL; 677 char *pszFullName = NULL; 678 int cbFullName; 679 VBGLSFMAP map; 588 680 int rc; 589 681 590 682 dprintf("VBOXSF: FS32_FILEATTRIBUTE(%lx, %s)\n", flag, pszName); 591 683 592 FSH32_GETVOLPARM(pcdfsi->cdi_hVPB, &pvpfsi, &pvpfsd);593 594 pvboxsfvp = (PVBOXSFVP)pvpfsd;595 596 684 switch (flag) 597 685 { 598 686 case 0: // retrieve 599 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 600 vboxsfStrToUtf8(pwsz, (char *)pszName); 601 602 path = make_shflstring((char *)pwsz); 603 604 str = (char *)RTMemAlloc(strlen((char *)pszName) + 1); 605 606 if (! str) 607 { 608 dprintf("Not enough memory 2\n"); 687 file = (PSHFLDIRINFO)RTMemAlloc(len); 688 689 if (! file) 690 { 691 dprintf("Not enough memory 1\n"); 609 692 hrc = ERROR_NOT_ENOUGH_MEMORY; 610 693 goto FS32_FILEATTRIBUTEEXIT; 611 694 } 612 695 613 strcpy(str, (char *)pszName); 614 615 lastslash = p = str; 616 617 // get last backslash 618 do { 619 lastslash = p; 620 p = strchr(p + 1, '\\'); 621 } while (p && p < str + strlen(str)); 622 623 // cut off file part from directory part 624 str[lastslash - str + 1] = '\0'; 625 pszDirName = str + 1; 626 627 dprintf("pszDirName=%s\n", pszDirName); 628 629 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 630 vboxsfStrToUtf8(pwsz, (char *)pszDirName); 696 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 697 698 if (! pszFullName) 699 { 700 hrc = ERROR_NOT_ENOUGH_MEMORY; 701 goto FS32_FILEATTRIBUTEEXIT; 702 } 703 704 cbFullName = CCHMAXPATHCOMP + 1; 705 706 hrc = parseFileName((char *)pszName, pcdfsi, pszFullName, &cbFullName, &map); 707 708 if (hrc) 709 { 710 dprintf("Filename parse error!\n"); 711 goto FS32_FILEATTRIBUTEEXIT; 712 } 713 714 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 715 vboxsfStrToUtf8(pwsz, (char *)pszFullName); 631 716 632 717 path = make_shflstring((char *)pwsz); 633 rc = vboxCallCreate(&g_clientHandle, &pvboxsfvp->map, path, ¶ms); 634 free_shflstring(path); 635 RTMemFree(pwsz); 636 RTMemFree(str); 718 719 params.Handle = SHFL_HANDLE_NIL; 720 params.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW; 721 722 rc = VbglR0SfCreate(&g_clientHandle, &map, path, ¶ms); 637 723 638 724 if (!RT_SUCCESS(rc)) 639 725 { 640 dprintf("vboxCallCreate returned %d\n", rc); 641 free_shflstring(path); 726 dprintf("VbglR0SfCreate returned %d\n", rc); 642 727 hrc = vbox_err_to_os2_err(rc); 643 728 goto FS32_FILEATTRIBUTEEXIT; … … 645 730 646 731 dprintf("path=%s\n", pszName); 647 dprintf(" pvboxsfvp->map=%x\n", pvboxsfvp->map);732 dprintf("map=%x\n", map); 648 733 dprintf("params.Handle=%x\n", params.Handle); 649 734 dprintf("len=%x\n", len); 650 dprintf("num_files=%x\n", num_files); 651 652 //path = make_shflstring(str); 653 654 rc = vboxCallFSInfo(&g_clientHandle, &pvboxsfvp->map, params.Handle, 735 736 rc = VbglR0SfFsInfo(&g_clientHandle, &map, params.Handle, 655 737 SHFL_INFO_GET | SHFL_INFO_FILE, &len, file); 656 738 … … 659 741 if (RT_FAILURE(rc)) 660 742 { 661 dprintf(" vboxCallFSInfo failed: %d\n", rc);743 dprintf("VbglR0SfFsInfo failed: %d\n", rc); 662 744 goto FS32_FILEATTRIBUTEEXIT; 663 745 } 664 746 665 vboxCallClose(&g_clientHandle, &pvboxsfvp->map, params.Handle);747 VbglR0SfClose(&g_clientHandle, &map, params.Handle); 666 748 667 749 *pAttr = VBoxToOS2Attr(file->Info.Attr.fMode); … … 673 755 674 756 FS32_FILEATTRIBUTEEXIT: 757 if (file) 758 RTMemFree(file); 759 if (path) 760 RTMemFree(path); 761 if (pwsz) 762 RTMemFree(pwsz); 763 if (pszFullName) 764 RTMemFree(pszFullName); 765 675 766 dprintf(" => %d\n", hrc); 676 767 return hrc; … … 685 776 SHFLCREATEPARMS params = {0}; 686 777 USHORT usNeededSize; 687 PVPFSI pvpfsi;688 PVPFSD pvpfsd;689 PVBOXSFVP pvboxsfvp;690 778 PSHFLDIRINFO file = NULL; 691 779 uint32_t len = sizeof(SHFLDIRINFO); 692 uint32_t num_files = 0; 693 uint32_t index = 0; 694 char *str, *p, *lastslash; 695 char *pszDirName; 696 PSHFLSTRING path, path2; 697 char *pwsz, pwsz2; 780 PSHFLSTRING path = NULL; 781 char *pwsz = NULL; 782 char *pszFullName = NULL; 783 int cbFullName; 784 VBGLSFMAP map; 698 785 int rc; 699 786 700 787 dprintf("VBOXSF: FS32_PATHINFO(%x, %s, %x)\n", flag, pszName, level); 701 788 702 FSH32_GETVOLPARM(pcdfsi->cdi_hVPB, &pvpfsi, &pvpfsd); 703 704 pvboxsfvp = (PVBOXSFVP)pvpfsd; 705 706 str = (char *)RTMemAlloc(strlen((char *)pszName) + 1); 707 708 if (! str) 709 { 710 dprintf("Not enough memory 2\n"); 789 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 790 791 if (! pszFullName) 792 { 711 793 hrc = ERROR_NOT_ENOUGH_MEMORY; 712 794 goto FS32_PATHINFOEXIT; 713 795 } 714 796 715 strcpy(str, (char *)pszName); 716 717 lastslash = p = str; 718 719 // get last backslash 720 do { 721 lastslash = p; 722 p = strchr(p + 1, '\\'); 723 } while (p && p < str + strlen(str)); 724 725 // cut off file part from directory part 726 str[lastslash - str + 1] = '\0'; 727 pszDirName = str + 1; 728 729 dprintf("pszDirName=%s\n", pszDirName); 730 731 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP); 732 vboxsfStrToUtf8(pwsz, (char *)pszDirName); 797 cbFullName = CCHMAXPATHCOMP + 1; 798 799 hrc = parseFileName((char *)pszName, pcdfsi, pszFullName, &cbFullName, &map); 800 801 if (hrc) 802 { 803 dprintf("Filename parse error!\n"); 804 goto FS32_PATHINFOEXIT; 805 } 806 807 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 808 vboxsfStrToUtf8(pwsz, (char *)pszFullName); 733 809 734 810 path = make_shflstring((char *)pwsz); 735 rc = vboxCallCreate(&g_clientHandle, &pvboxsfvp->map, path, ¶ms); 736 RTMemFree(pwsz); 737 RTMemFree(str); 738 739 if (!RT_SUCCESS(rc)) 740 { 741 dprintf("vboxCallCreate returned %d\n", rc); 742 free_shflstring(path); 811 812 params.Handle = SHFL_HANDLE_NIL; 813 params.CreateFlags = SHFL_CF_ACT_FAIL_IF_NEW; // SHFL_CF_LOOKUP 814 815 rc = VbglR0SfCreate(&g_clientHandle, &map, path, ¶ms); 816 817 if (! RT_SUCCESS(rc)) 818 { 819 dprintf("VbglR0SfCreate returned %d\n", rc); 743 820 hrc = vbox_err_to_os2_err(rc); 744 821 goto FS32_PATHINFOEXIT; … … 746 823 747 824 dprintf("path=%s\n", pszName); 748 dprintf(" pvboxsfvp->map=%x\n", pvboxsfvp->map);825 dprintf("map=%x\n", map); 749 826 dprintf("params.Handle=%x\n", params.Handle); 750 827 dprintf("len=%x\n", len); 751 dprintf("num_files=%x\n", num_files);752 753 //path = make_shflstring(str);754 828 755 829 switch (flag) … … 803 877 dprintf("file=%x\n", file); 804 878 805 rc = vboxCallFSInfo(&g_clientHandle, &pvboxsfvp->map, params.Handle,879 rc = VbglR0SfFsInfo(&g_clientHandle, &map, params.Handle, 806 880 SHFL_INFO_GET | SHFL_INFO_FILE, &len, file); 807 881 … … 810 884 if (RT_FAILURE(rc)) 811 885 { 812 dprintf(" vboxCallFSInfo failed: %d\n", rc);886 dprintf("VbglR0SfFsInfo failed: %d\n", rc); 813 887 goto FS32_PATHINFOEXIT; 814 888 } … … 995 1069 EAOP filestatus; 996 1070 KernCopyIn(&filestatus, pData, sizeof(EAOP)); 997 PFEALIST pFEA = filestatus.fpFEAList;1071 PFEALIST pFEA = (PFEALIST)KernSelToFlat((ULONG)filestatus.fpFEAList); 998 1072 // @todo: get empty EAs 999 1073 memset(pFEA, 0, (USHORT)pFEA->cbList); 1000 1074 pFEA->cbList = sizeof(pFEA->cbList); 1001 KernCopyOut(pData, &filestatus, sizeof( FILESTATUS4L));1075 KernCopyOut(pData, &filestatus, sizeof(EAOP)); 1002 1076 break; 1003 1077 } 1004 1078 1005 case 4: 1079 case 4: // FIL_QUERYALLEAS 1006 1080 { 1007 1081 EAOP filestatus; 1008 1082 KernCopyIn(&filestatus, pData, sizeof(EAOP)); 1009 PFEALIST pFEA = filestatus.fpFEAList;1083 PFEALIST pFEA = (PFEALIST)KernSelToFlat((ULONG)filestatus.fpFEAList); 1010 1084 memset(pFEA, 0, (USHORT)pFEA->cbList); 1011 1085 pFEA->cbList = sizeof(pFEA->cbList); 1012 KernCopyOut(pData, &filestatus, sizeof( FILESTATUS4L));1086 KernCopyOut(pData, &filestatus, sizeof(EAOP)); 1013 1087 break; 1014 1088 } … … 1167 1241 } 1168 1242 1169 rc = vboxCallFSInfo(&g_clientHandle, &pvboxsfvp->map, params.Handle,1243 rc = VbglR0SfFsInfo(&g_clientHandle, &map, params.Handle, 1170 1244 SHFL_INFO_SET | SHFL_INFO_FILE, &len, file); 1171 1245 1172 1246 if (RT_FAILURE(rc)) 1173 1247 { 1174 dprintf(" vboxCallFSInfo failed: %d\n", rc);1248 dprintf("VbglR0SfFsInfo failed: %d\n", rc); 1175 1249 hrc = vbox_err_to_os2_err(rc); 1176 1250 goto FS32_PATHINFOEXIT; … … 1184 1258 1185 1259 FS32_PATHINFOEXIT: 1260 if (pwsz) 1261 RTMemFree(pwsz); 1262 if (path) 1263 RTMemFree(path); 1186 1264 if (file) 1187 1265 RTMemFree(file); 1266 if (pszFullName) 1267 RTMemFree(pszFullName); 1188 1268 1189 1269 if (params.Handle) 1190 vboxCallClose(&g_clientHandle, &pvboxsfvp->map, params.Handle);1270 VbglR0SfClose(&g_clientHandle, &map, params.Handle); 1191 1271 1192 1272 dprintf(" => %d\n", hrc); -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFA.asm ¶
r161 r170 6 6 ; 7 7 ; Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 ; Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 8 9 ; 9 10 ; Permission is hereby granted, free of charge, to any person -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFAttach.cpp ¶
r154 r170 1 /** $Id: VBoxSF.cpp 161 2018-04-10 00:36:59Z valerius $ */ 2 /** @file 3 * VBoxSF - OS/2 Shared Folders, the FS and FSD level IFS EPs 4 */ 5 6 /* 7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 * Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 9 * 10 * Permission is hereby granted, free of charge, to any person 11 * obtaining a copy of this software and associated documentation 12 * files (the "Software"), to deal in the Software without 13 * restriction, including without limitation the rights to use, 14 * copy, modify, merge, publish, distribute, sublicense, and/or sell 15 * copies of the Software, and to permit persons to whom the 16 * Software is furnished to do so, subject to the following 17 * conditions: 18 * 19 * The above copyright notice and this permission notice shall be 20 * included in all copies or substantial portions of the Software. 21 * 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 24 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 25 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 26 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 27 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 29 * OTHER DEALINGS IN THE SOFTWARE. 30 */ 31 1 32 #define OS2EMX_PLAIN_CHAR 2 33 #define INCL_DOSFILEMGR -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFFile.cpp ¶
r161 r170 6 6 /* 7 7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 * Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 8 9 * 9 10 * Permission is hereby granted, free of charge, to any person … … 40 41 #include <iprt/assert.h> 41 42 42 extern VBSFCLIENT g_clientHandle; 43 extern VBGLSFCLIENT g_clientHandle; 44 45 uint32_t VBoxToOS2Attr(uint32_t fMode); 43 46 44 47 /** … … 50 53 */ 51 54 APIRET APIENTRY parseFileName(const char *pszPath, PCDFSI pcdfsi, 52 char *pszParsedPath, int *pcbParsedPath, VB SFMAP *map)55 char *pszParsedPath, int *pcbParsedPath, VBGLSFMAP *map) 53 56 { 54 57 PVPFSI pvpfsi; … … 114 117 PUSHORT pusAction, USHORT usAttr, PBYTE pcEABuf, PUSHORT pfgenflag) 115 118 { 116 SHFLCREATEPARMS params ;119 SHFLCREATEPARMS params = {0}; 117 120 APIRET hrc = NO_ERROR; 118 121 char *pszFullName; 119 122 int cbFullName; 120 VB SFMAP map;123 VBGLSFMAP map; 121 124 char *pwsz; 122 125 PSHFLSTRING path; … … 124 127 PVPFSD pvpfsd; 125 128 PVBOXSFVP pvboxsfvp; 129 RTTIME time; 130 FDATE d; 131 FTIME t; 126 132 int rc; 127 133 … … 131 137 params.Handle = SHFL_HANDLE_NIL; 132 138 133 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP); 134 cbFullName = CCHMAXPATHCOMP; 139 pszFullName = (char *)RTMemAlloc(CCHMAXPATHCOMP + 1); 140 141 if (! pszFullName) 142 { 143 hrc = ERROR_NOT_ENOUGH_MEMORY; 144 goto FS32_OPENCREATEEXIT; 145 } 146 147 cbFullName = CCHMAXPATHCOMP + 1; 135 148 136 149 hrc = parseFileName((char *)pszName, pcdfsi, pszFullName, &cbFullName, &map); … … 199 212 params.CreateFlags &= ~SHFL_CF_ACCESS_ATTR_WRITE; 200 213 201 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP );214 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 202 215 vboxsfStrToUtf8(pwsz, (char *)pszFullName); 203 216 204 217 path = make_shflstring((char *)pwsz); 205 rc = vboxCallCreate(&g_clientHandle, &map, path, ¶ms);218 rc = VbglR0SfCreate(&g_clientHandle, &map, path, ¶ms); 206 219 RTMemFree(pwsz); 207 220 RTMemFree(pszFullName); … … 209 222 if (!RT_SUCCESS(rc)) 210 223 { 211 dprintf(" vboxCallCreate returned %d\n", rc);224 dprintf("VbglR0SfCreate returned %d\n", rc); 212 225 free_shflstring(path); 213 226 hrc = vbox_err_to_os2_err(rc); … … 228 241 psffsd->filebuf->handle = params.Handle; 229 242 psffsd->filebuf->path = path; 243 244 psffsi->sfi_positionl = 0; 245 psffsi->sfi_position = 0; 246 247 psffsi->sfi_sizel = params.Info.cbObject; 248 psffsi->sfi_size = (LONG)params.Info.cbObject; 249 250 /* Creation time */ 251 RTTimeExplode(&time, ¶ms.Info.BirthTime); 252 253 t.hours = time.u8Hour; 254 t.minutes = time.u8Minute; 255 t.twosecs = time.u8Second / 2; 256 d.year = time.i32Year - 1980; 257 d.month = time.u8Month; 258 d.day = time.u8MonthDay; 259 psffsi->sfi_ctime = *(PUSHORT)&t; 260 psffsi->sfi_cdate = *(PUSHORT)&d; 261 262 /* Last access time */ 263 RTTimeExplode(&time, ¶ms.Info.AccessTime); 264 265 t.hours = time.u8Hour; 266 t.minutes = time.u8Minute; 267 t.twosecs = time.u8Second / 2; 268 d.year = time.i32Year - 1980; 269 d.month = time.u8Month; 270 d.day = time.u8MonthDay; 271 psffsi->sfi_atime = *(PUSHORT)&t; 272 psffsi->sfi_adate = *(PUSHORT)&d; 273 274 /* Last write time */ 275 RTTimeExplode(&time, ¶ms.Info.ModificationTime); 276 277 t.hours = time.u8Hour; 278 t.minutes = time.u8Minute; 279 t.twosecs = time.u8Second / 2; 280 d.year = time.i32Year - 1980; 281 d.month = time.u8Month; 282 d.day = time.u8MonthDay; 283 psffsi->sfi_mtime = *(PUSHORT)&t; 284 psffsi->sfi_mdate = *(PUSHORT)&d; 285 286 // @todo omit ST_SCREAT | ST_PCREAT if not creating the file 287 psffsi->sfi_tstamp = ST_SCREAT | ST_PCREAT | ST_SREAD | ST_PREAD | ST_SWRITE | ST_PWRITE; 288 289 psffsi->sfi_DOSattr = VBoxToOS2Attr(params.Info.Attr.fMode); 230 290 231 291 FS32_OPENCREATEEXIT: … … 257 317 pvboxsfvp = (PVBOXSFVP)pvpfsd; 258 318 259 rc = vboxCallClose(&g_clientHandle, &pvboxsfvp->map, filebuf->handle);319 rc = VbglR0SfClose(&g_clientHandle, &pvboxsfvp->map, filebuf->handle); 260 320 hrc = vbox_err_to_os2_err(rc); 261 321 free_shflstring(filebuf->path); … … 329 389 { 330 390 APIRET hrc = NO_ERROR; 331 SHFLCREATEPARMS params ;391 SHFLCREATEPARMS params = {0}; 332 392 USHORT usNeededSize; 333 PSHFLSTRING path;334 393 PVPFSI pvpfsi; 335 394 PVPFSD pvpfsd; … … 337 396 PSHFLDIRINFO file = NULL; 338 397 uint32_t len = sizeof(SHFLDIRINFO); 339 uint32_t num_files = 0;340 uint32_t index = 0;341 char *str, *p, *lastslash;342 char *pszDirName;343 char *pwsz;344 398 int rc; 345 399 … … 398 452 } 399 453 400 dprintf("file=%x\n", file); 401 402 str = (char *)RTMemAlloc(psffsd->filebuf->path->u16Length); 403 404 if (! str) 454 dprintf("pvboxsfvp->map=%x\n", pvboxsfvp->map); 455 dprintf("psffsd->filebuf->handle=%x\n", psffsd->filebuf->handle); 456 457 rc = VbglR0SfFsInfo(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 458 SHFL_INFO_GET | SHFL_INFO_FILE, &len, file); 459 460 hrc = vbox_err_to_os2_err(rc); 461 462 if (RT_FAILURE(rc)) 405 463 { 406 dprintf("Not enough memory 2\n"); 407 hrc = ERROR_NOT_ENOUGH_MEMORY; 464 dprintf("VbglR0SfFsInfo failed: %d\n", rc); 408 465 goto FS32_FILEINFOEXIT; 409 466 } 410 411 strcpy(str, "\\");412 strcat(str, (char *)psffsd->filebuf->path->String.utf8);413 414 lastslash = p = str;415 416 // get last backslash417 do {418 lastslash = p;419 p = strchr(p + 1, '\\');420 } while (p && p < str + strlen(str));421 422 // cut off file part from directory part423 str[lastslash - str + 1] = '\0';424 pszDirName = str + 1;425 426 dprintf("pszDirName=%s\n", pszDirName);427 428 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP);429 vboxsfStrToUtf8(pwsz, (char *)pszDirName);430 431 path = make_shflstring((char *)pwsz);432 rc = vboxCallCreate(&g_clientHandle, &pvboxsfvp->map, path, ¶ms);433 RTMemFree(pwsz);434 RTMemFree(str);435 436 if (!RT_SUCCESS(rc))437 {438 dprintf("vboxCallCreate returned %d\n", rc);439 free_shflstring(path);440 hrc = vbox_err_to_os2_err(rc);441 goto FS32_FILEINFOEXIT;442 }443 444 dprintf("path=%s\n", psffsd->filebuf->path->String.utf8);445 dprintf("pvboxsfvp->map=%x\n", pvboxsfvp->map);446 dprintf("params.Handle=%x\n", params.Handle);447 dprintf("len=%x\n", len);448 dprintf("num_files=%x\n", num_files);449 450 rc = vboxCallFSInfo(&g_clientHandle, &pvboxsfvp->map, params.Handle,451 SHFL_INFO_GET | SHFL_INFO_FILE, &len, file);452 453 hrc = vbox_err_to_os2_err(rc);454 455 if (RT_FAILURE(rc))456 {457 dprintf("vboxCallFSInfo failed: %d\n", rc);458 goto FS32_FILEINFOEXIT;459 }460 461 vboxCallClose(&g_clientHandle, &pvboxsfvp->map, params.Handle);462 467 463 468 if (level == FIL_STANDARD || level == FIL_STANDARDL || … … 681 686 EAOP filestatus; 682 687 KernCopyIn(&filestatus, pData, sizeof(EAOP)); 683 PFEALIST pFEA = filestatus.fpFEAList;688 PFEALIST pFEA = (PFEALIST)KernSelToFlat((ULONG)filestatus.fpFEAList); 684 689 // @todo: get empty EAs 685 690 memset(pFEA, 0, (USHORT)pFEA->cbList); 686 691 pFEA->cbList = sizeof(pFEA->cbList); 687 KernCopyOut(pData, &filestatus, sizeof( FILESTATUS4L));692 KernCopyOut(pData, &filestatus, sizeof(EAOP)); 688 693 break; 689 694 } 690 695 691 case 4: 696 case 4: // FIL_QUERYALLEAS 692 697 { 693 698 EAOP filestatus; 694 699 KernCopyIn(&filestatus, pData, sizeof(EAOP)); 695 PFEALIST pFEA = filestatus.fpFEAList;700 PFEALIST pFEA = (PFEALIST)KernSelToFlat((ULONG)filestatus.fpFEAList); 696 701 memset(pFEA, 0, (USHORT)pFEA->cbList); 697 702 pFEA->cbList = sizeof(pFEA->cbList); 698 KernCopyOut(pData, &filestatus, sizeof( FILESTATUS4L));703 KernCopyOut(pData, &filestatus, sizeof(EAOP)); 699 704 break; 700 705 } … … 922 927 } 923 928 924 rc = vboxCallFSInfo(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle,929 rc = VbglR0SfFsInfo(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 925 930 SHFL_INFO_SET | SHFL_INFO_FILE, &len, file); 926 931 927 932 if (RT_FAILURE(rc)) 928 933 { 929 dprintf(" vboxCallFSInfo failed: %d\n", rc);934 dprintf("VbglR0SfFsInfo failed: %d\n", rc); 930 935 hrc = vbox_err_to_os2_err(rc); 931 936 goto FS32_FILEINFOEXIT; … … 939 944 940 945 FS32_FILEINFOEXIT: 941 dprintf("file=%x\n", file);942 //__asm__ __volatile__ (".byte 0xcc\n\t");943 946 if (file) 944 947 RTMemFree(file); 948 945 949 dprintf(" => %d\n", hrc); 946 950 return hrc; 947 951 } 948 952 953 int chsize(PVBOXSFVP pvboxsfvp, PVBOXSFFSD psffsd, ULONG size) 954 { 955 PSHFLFSOBJINFO pObjInfo = NULL; 956 uint32_t cbBuf = sizeof(SHFLFSOBJINFO); 957 int rc; 958 959 pObjInfo = (PSHFLFSOBJINFO)RTMemAlloc(cbBuf); 960 961 if (! pObjInfo) 962 { 963 return VERR_NO_MEMORY; 964 } 965 966 memset(pObjInfo, 0, cbBuf); 967 pObjInfo->cbObject = size; 968 969 rc = VbglR0SfFsInfo(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 970 SHFL_INFO_SET | SHFL_INFO_SIZE, &cbBuf, (PSHFLDIRINFO)pObjInfo); 971 972 if (pObjInfo) 973 RTMemFree(pObjInfo); 974 975 return rc; 976 } 949 977 950 978 DECLASM(int) … … 955 983 PVPFSD pvpfsd; 956 984 PVBOXSFVP pvboxsfvp; 957 PSHFLFSOBJINFO pObjInfo = NULL;958 985 PSHFLSTRING path; 959 uint32_t cbBuf = sizeof(SHFLFSOBJINFO);960 986 int rc; 961 987 … … 966 992 pvboxsfvp = (PVBOXSFVP)pvpfsd; 967 993 968 pObjInfo = (PSHFLFSOBJINFO)RTMemAlloc(cbBuf); 969 if (!pObjInfo) 970 { 971 hrc = ERROR_NOT_ENOUGH_MEMORY; 972 goto FS32_NEWSIZELEXIT; 973 } 974 975 memset(pObjInfo, 0, cbBuf); 976 pObjInfo->cbObject = cbFile; 977 978 rc = vboxCallFSInfo(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 979 SHFL_INFO_SET | SHFL_INFO_SIZE, &cbBuf, (PSHFLDIRINFO)pObjInfo); 994 rc = chsize(pvboxsfvp, psffsd, cbFile); 980 995 981 996 hrc = vbox_err_to_os2_err(rc); … … 983 998 FS32_NEWSIZELEXIT: 984 999 dprintf(" => %d\n", hrc); 985 986 if (pObjInfo)987 RTMemFree(pObjInfo);988 1000 989 1001 return hrc; … … 999 1011 PVBOXSFVP pvboxsfvp; 1000 1012 uint8_t *pBuf; 1013 ULONG cb = *pcb; 1001 1014 int rc; 1002 1015 … … 1009 1022 pBuf = (uint8_t *)RTMemAlloc(*pcb); 1010 1023 1011 rc = vboxCallRead(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 1024 if (psffsi->sfi_positionl > psffsi->sfi_sizel) 1025 { 1026 *pcb = 0; 1027 } 1028 else if (*pcb > psffsi->sfi_sizel - psffsi->sfi_positionl) 1029 { 1030 *pcb = psffsi->sfi_sizel - psffsi->sfi_positionl; 1031 } 1032 1033 memset(pBuf, 0, cb); 1034 1035 rc = VbglR0SfRead(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 1012 1036 psffsi->sfi_positionl, (uint32_t *)pcb, pBuf, false); 1013 1037 … … 1019 1043 } 1020 1044 1045 psffsi->sfi_tstamp |= (ST_SREAD | ST_PREAD); 1046 1021 1047 hrc = vbox_err_to_os2_err(rc); 1022 RTMemFree(pBuf);1023 1048 1024 1049 FS32_READEXIT: 1050 if (pBuf) 1051 RTMemFree(pBuf); 1052 1025 1053 dprintf(" => %d\n", hrc); 1026 1054 return hrc; … … 1035 1063 PVPFSD pvpfsd; 1036 1064 PVBOXSFVP pvboxsfvp; 1065 uint32_t cbNewPos; 1037 1066 uint8_t *pBuf; 1038 1067 int rc; … … 1045 1074 1046 1075 pBuf = (uint8_t *)RTMemAlloc(*pcb); 1076 1077 if (! pBuf) 1078 { 1079 hrc = ERROR_NOT_ENOUGH_MEMORY; 1080 goto FS32_WRITEEXIT; 1081 } 1082 1047 1083 KernCopyIn(pBuf, (char *)pvData, *pcb); 1048 1084 1049 rc = vboxCallWrite(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 1085 cbNewPos = psffsi->sfi_positionl + *pcb; 1086 1087 if (cbNewPos > psffsi->sfi_sizel) 1088 { 1089 rc = chsize(pvboxsfvp, psffsd, cbNewPos); 1090 1091 if (rc) 1092 { 1093 hrc = vbox_err_to_os2_err(rc); 1094 goto FS32_WRITEEXIT; 1095 } 1096 1097 psffsi->sfi_sizel = cbNewPos; 1098 psffsi->sfi_size = cbNewPos; 1099 } 1100 1101 rc = VbglR0SfWrite(&g_clientHandle, &pvboxsfvp->map, psffsd->filebuf->handle, 1050 1102 psffsi->sfi_positionl, (uint32_t *)pcb, pBuf, false); 1051 1103 … … 1054 1106 psffsi->sfi_positionl += *pcb; 1055 1107 psffsi->sfi_position += *pcb; 1108 psffsi->sfi_tstamp |= (ST_SWRITE | ST_PWRITE); 1056 1109 } 1057 1110 1058 1111 hrc = vbox_err_to_os2_err(rc); 1059 RTMemFree(pBuf);1060 1112 1061 1113 FS32_WRITEEXIT: 1114 if (pBuf) 1115 RTMemFree(pBuf); 1116 1062 1117 dprintf(" => %d\n", hrc); 1063 1118 return hrc; -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFFind.cpp ¶
r161 r170 6 6 /* 7 7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 * Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 8 9 * 9 10 * Permission is hereby granted, free of charge, to any person … … 40 41 #include <iprt/assert.h> 41 42 42 extern VB SFCLIENT g_clientHandle;43 extern VBGLSFCLIENT g_clientHandle; 43 44 44 45 … … 95 96 *pcMatch = 0; 96 97 97 dprintf("usEntriesWanted=%u\n", usEntriesWanted);98 99 98 switch (level) 100 99 { … … 159 158 } 160 159 161 rc = vboxCallDirInfo(&g_clientHandle, &pFindBuf->map, pFindBuf->handle, pFindBuf->path, 0, pFindBuf->index,160 rc = VbglR0SfDirInfo(&g_clientHandle, &pFindBuf->map, pFindBuf->handle, pFindBuf->path, 0, pFindBuf->index, 162 161 &pFindBuf->len, pFindBuf->buf, &pFindBuf->num_files); 163 162 164 163 if (rc != 0 && rc != VERR_NO_MORE_FILES) 165 164 { 166 dprintf(" vboxCallDirInfo failed: %d\n", rc);165 dprintf("VbglR0SfDirInfo failed: %d\n", rc); 167 166 RTMemFree(pFindBuf->buf); 168 167 hrc = vbox_err_to_os2_err(rc); … … 177 176 goto FILLFINDBUFEXIT; 178 177 } 179 180 dprintf("num_files=%lu\n", pFindBuf->num_files);181 178 } 182 179 … … 226 223 char *pszFileName = (char *)file->name.String.utf8; 227 224 RTTIME time; 228 dprintf("FIL_STANDARD\n");229 225 memset(&findbuf, 0, sizeof(findbuf)); 230 226 /* File name */ … … 232 228 CCHMAXPATHCOMP, file->name.u16Length); 233 229 findbuf.cchName = strlen(findbuf.achName); 234 dprintf("findbuf.achName=%s\n", findbuf.achName);235 dprintf("findbuf.cchName=%u\n", findbuf.cchName);236 230 /* File attributes */ 237 231 findbuf.attrFile = VBoxToOS2Attr(file->Info.Attr.fMode); … … 283 277 char *pszFileName = (char *)file->name.String.utf8; 284 278 RTTIME time; 285 dprintf("FIL_STANDARDL\n");286 279 memset(&findbuf, 0, sizeof(findbuf)); 287 280 /* File name */ … … 289 282 CCHMAXPATHCOMP, file->name.u16Length); 290 283 findbuf.cchName = strlen(findbuf.achName); 291 dprintf("findbuf.achName=%s\n", findbuf.achName);292 dprintf("findbuf.cchName=%u\n", findbuf.cchName);293 284 /* File attributes */ 294 285 findbuf.attrFile = VBoxToOS2Attr(file->Info.Attr.fMode); … … 340 331 char *pszFileName = (char *)file->name.String.utf8; 341 332 RTTIME time; 342 dprintf("FIL_QUERYEASIZE\n");343 333 memset(&findbuf, 0, sizeof(findbuf)); 344 334 /* File name */ … … 346 336 CCHMAXPATHCOMP, file->name.u16Length); 347 337 findbuf.cchName = strlen(findbuf.achName); 348 dprintf("findbuf.achName=%s\n", findbuf.achName);349 dprintf("findbuf.cchName=%u\n", findbuf.cchName);350 338 /* File attributes */ 351 339 findbuf.attrFile = VBoxToOS2Attr(file->Info.Attr.fMode); … … 390 378 findbuf.cbList = file->Info.Attr.u.EASize.cb; 391 379 KernCopyOut(pbData, &findbuf, cbSize); 392 dprintf("cbList=%lu\n", findbuf.cbList);393 380 break; 394 381 } … … 398 385 FILEFNDBUF4L findbuf; 399 386 RTTIME time; 400 dprintf("FIL_QUERYEASIZEL\n");401 387 char *pszFileName = (char *)file->name.String.utf8; 402 388 memset(&findbuf, 0, sizeof(findbuf)); … … 405 391 CCHMAXPATHCOMP, file->name.u16Length); 406 392 findbuf.cchName = strlen(findbuf.achName); 407 dprintf("findbuf.achName=%s\n", findbuf.achName);408 dprintf("findbuf.cchName=%u\n", findbuf.cchName);409 393 /* File attributes */ 410 394 findbuf.attrFile = VBoxToOS2Attr(file->Info.Attr.fMode); … … 449 433 findbuf.cbList = file->Info.Attr.u.EASize.cb; 450 434 KernCopyOut(pbData, &findbuf, cbSize); 451 dprintf("cbList=%lu\n", findbuf.cbList);452 435 break; 453 436 } … … 456 439 { 457 440 FILEFNDBUF3 findbuf; 458 dprintf("FIL_QUERYEASFROMLIST\n");459 441 char *pszFileName = (char *)file->name.String.utf8; 460 442 RTTIME time; … … 464 446 CCHMAXPATHCOMP, file->name.u16Length); 465 447 findbuf.cchName = strlen(findbuf.achName); 466 dprintf("findbuf.achName=%s\n", findbuf.achName);467 dprintf("findbuf.cchName=%u\n", findbuf.cchName);468 448 /* File attributes */ 469 449 findbuf.attrFile = VBoxToOS2Attr(file->Info.Attr.fMode); … … 513 493 { 514 494 FILEFNDBUF3L findbuf; 515 dprintf("FIL_QUERYEASFROMLISTL\n");516 495 char *pszFileName = (char *)file->name.String.utf8; 517 496 RTTIME time; … … 521 500 CCHMAXPATHCOMP, file->name.u16Length); 522 501 findbuf.cchName = strlen(findbuf.achName); 523 dprintf("findbuf.achName=%s\n", findbuf.achName);524 dprintf("findbuf.cchName=%u\n", findbuf.cchName);525 502 /* File attributes */ 526 503 findbuf.attrFile = VBoxToOS2Attr(file->Info.Attr.fMode); … … 574 551 575 552 (*pcMatch)++; 576 dprintf("*pcMatch=%u\n", *pcMatch);577 553 578 554 pbData += cbSize; … … 594 570 USHORT level, USHORT flags) 595 571 { 596 SHFLCREATEPARMS params ;572 SHFLCREATEPARMS params = {0}; 597 573 PFINDBUF pFindBuf; 598 574 PSHFLSTRING path; … … 663 639 dprintf("str=%s\n", str); 664 640 665 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP );641 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 666 642 vboxsfStrToUtf8(pwsz, str); 667 643 668 644 path = make_shflstring(pwsz); 669 rc = vboxCallCreate(&g_clientHandle, &pvboxsfvp->map, path, ¶ms);645 rc = VbglR0SfCreate(&g_clientHandle, &pvboxsfvp->map, path, ¶ms); 670 646 free_shflstring(path); 671 647 RTMemFree(pwsz); … … 693 669 dprintf("wildcard: %s\n", str); 694 670 695 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP );671 pwsz = (char *)RTMemAlloc(2 * CCHMAXPATHCOMP + 2); 696 672 vboxsfStrToUtf8(pwsz, str); 697 673 … … 708 684 else 709 685 { 710 dprintf("VBOXSF: vboxCallCreate: %d\n", rc);686 dprintf("VBOXSF: VbglR0SfCreate: %d\n", rc); 711 687 hrc = vbox_err_to_os2_err(rc); 712 688 goto FS32_FINDFIRSTEXIT; … … 750 726 dprintf("FS32_FINDCLOSE\n"); 751 727 752 vboxCallClose(&g_clientHandle, &pFindBuf->map, pFindBuf->handle);728 VbglR0SfClose(&g_clientHandle, &pFindBuf->map, pFindBuf->handle); 753 729 free_shflstring(pFindBuf->path); 754 730 RTMemFree(pFindBuf); -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFInit.cpp ¶
r154 r170 6 6 /* 7 7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 * Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 8 9 * 9 10 * Permission is hereby granted, free of charge, to any person … … 52 53 /* from sys0.asm and the linker/end.lib. */ 53 54 extern char _text, _etext, _data, _end; 54 extern VB SFCLIENT g_clientHandle;55 extern VBGLSFCLIENT g_clientHandle; 55 56 RT_C_DECLS_END 56 57 … … 65 66 * The caller will do the necessary AttachDD and calling of the 16 bit 66 67 * IDC to initialize the g_VBoxGuestIDC global. Perhaps we should move 67 * this bit to VbglInit ? It's just that it's so much simpler to do it68 * this bit to VbglInitClient? It's just that it's so much simpler to do it 68 69 * while we're on the way here... 69 70 * 70 71 */ 71 DECLASM(void) 72 VBoxSFR0Init(void) 72 DECLASM(void) VBoxSFR0Init(void) 73 73 { 74 74 APIRET rc; … … 84 84 && VALID_PTR(g_VBoxGuestIDC.pfnServiceEP)) 85 85 { 86 #if 0 // ??? 87 int rc = RTR0Init(0); 88 if (RT_SUCCESS(rc)) 89 { 90 rc = VbglInitClient(); 91 if (RT_SUCCESS(rc)) 92 { 93 #endif // ??? 86 94 #ifndef DONT_LOCK_SEGMENTS 87 95 /* … … 99 107 #endif 100 108 /* Initialize VBox subsystem. */ 101 rc = vboxInit();109 rc = VbglR0SfInit(); 102 110 if (RT_FAILURE(rc)) 103 111 { … … 107 115 /* Connect the HGCM client */ 108 116 RT_ZERO(g_clientHandle); 109 rc = vboxConnect(&g_clientHandle);117 rc = VbglR0SfConnect(&g_clientHandle); 110 118 if (RT_FAILURE(rc)) 111 119 { 112 120 dprintf("VBOXSF: %s: ERROR while connecting to host (%Rrc)!\n", __FUNCTION__, rc); 113 vboxUninit();121 VbglR0SfTerm(); 114 122 } 115 123 116 rc = vboxCallSetUtf8(&g_clientHandle);124 rc = VbglR0SfSetUtf8(&g_clientHandle); 117 125 if (RT_FAILURE(rc)) 118 126 { 119 dprintf("VBOXSF: vboxCallSetUtf8 failed. rc=%d\n", rc);127 dprintf("VBOXSF: VbglR0SfSetUtf8 failed. rc=%d\n", rc); 120 128 } 121 129 -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFInternal.h ¶
r161 r170 6 6 /* 7 7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 * Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 8 9 * 9 10 * Permission is hereby granted, free of charge, to any person … … 42 43 #undef RT_MAX 43 44 44 #include <VBox GuestR0LibSharedFolders.h>45 #include <VBox/VBoxGuestLibSharedFolders.h> 45 46 46 47 #include <iprt/types.h> … … 128 129 { 129 130 SHFLHANDLE handle; 130 VB SFMAP map;131 VBGLSFMAP map; 131 132 } CWD, *PCWD; 132 133 … … 145 146 { 146 147 uint32_t u32Dummy; 147 VB SFMAP map;148 VBGLSFMAP map; 148 149 char szLabel[12]; 149 150 } VBOXSFVP; … … 195 196 uint32_t bAttr; 196 197 uint32_t bMustAttr; 197 VB SFMAP map;198 VBGLSFMAP map; 198 199 } FINDBUF, *PFINDBUF; 199 200 … … 222 223 APIRET APIENTRY vboxsfStrToUtf8(char *dst, char *src); 223 224 APIRET APIENTRY parseFileName(const char *pszPath, PCDFSI pcdfsi, 224 char *pszParsedPath, int *cbParsedPath, VB SFMAP *map);225 char *pszParsedPath, int *cbParsedPath, VBGLSFMAP *map); 225 226 226 227 RT_C_DECLS_BEGIN … … 242 243 243 244 #endif 244 -
TabularUnified trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFStr.cpp ¶
r154 r170 6 6 /* 7 7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> 8 * Copyright (c) 2015-2018 Valery V. Sedletski <_valerius-no-spam@mail.ru> 8 9 * 9 10 * Permission is hereby granted, free of charge, to any person
Note:
See TracChangeset
for help on using the changeset viewer.