diff --git a/fstester/README.md b/fstester/README.md new file mode 100644 index 00000000..285cb459 --- /dev/null +++ b/fstester/README.md @@ -0,0 +1,8 @@ +DiscImageChef Filesystem Testers +================================ + +This folder contains source code for snippets designed to retrieve special features +(e.g. extended attributes) from all files on installed volumes (getters) as well as snippets +designed to create known files with all features specific to an +operating system / filesystem combination to reverse engineer them and/or test +DiscImageChef filesystem implementations. \ No newline at end of file diff --git a/fstester/getter/README.md b/fstester/getter/README.md new file mode 100644 index 00000000..ab08d6bd --- /dev/null +++ b/fstester/getter/README.md @@ -0,0 +1,8 @@ +DiscImageChef Filesystem Testers: Getters +========================================= + +This folder contains snippets designed to retrieve special features from files on a volume +that can be feed to the Setters snippets to create special test filesystem volumes. + +`os2_32` contains a snippet designed to retrieve all Extended Attributes from an OS/2 volume, +under a 32-bit OS/2 version. \ No newline at end of file diff --git a/fstester/getter/os2_32/DIR.C b/fstester/getter/os2_32/DIR.C new file mode 100644 index 00000000..a68cbe6f --- /dev/null +++ b/fstester/getter/os2_32/DIR.C @@ -0,0 +1,228 @@ +/**************************************************************************** +The Disc Image Chef +----------------------------------------------------------------------------- + +Filename : dir.c +Author(s) : Natalia Portillo + +Component : fstester.getter.os2 + +--[ Description ] ----------------------------------------------------------- + +Contains directory handlers + +--[ License ] --------------------------------------------------------------- + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warraty of + MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +----------------------------------------------------------------------------- +Copyright (C) 2011-2018 Natalia Portillo +*****************************************************************************/ + +#define INCL_DOSFILEMGR // File Manager values +#define INCL_DOSERRORS // DOS error values + +#include +#include +#include +#include +#include "dir.h" +#include "ea.h" + +int GetAllInDir(PSZ path, ULONG *eaCounter) +{ + HDIR hdirFindHandle; + FILEFINDBUF3 FindBuffer = {0}; // Returned from FindFirst/Next + ULONG ulResultBufLen; + ULONG ulFindCount; + APIRET rc; // Return code + PSZ pathWithWildcard; + PSZ fullPath; + ULONG flAttribute; // File attributes + int isDir = 0; + APIRET drc; + + // Variables for EA saving + char *eaBuffer; + size_t eaSize; + char eaPath[8 + 1 + 3 + 1]; + HFILE eaFileHandle; // Address of the handle for the file + ULONG ulAction = 0; // Address of the variable that receives the value that specifies the action taken by the DosOpen function + APIRET earc; + + for(isDir = 0; isDir < 2; isDir++) + { + hdirFindHandle = HDIR_CREATE; + ulResultBufLen = sizeof(FILEFINDBUF3); + ulFindCount = 1; // Look for 1 file at a time + rc = NO_ERROR; // Return code + pathWithWildcard = malloc(strlen(path) + 5); + strcpy(pathWithWildcard, path); + strcat(pathWithWildcard, "\\*.*"); // Adds wildcard to passed path + + flAttribute = FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN | FILE_READONLY; // All files + if(isDir) + flAttribute |= MUST_HAVE_DIRECTORY; // Must be a directory + + rc = DosFindFirst(pathWithWildcard, // File pattern + &hdirFindHandle, // Directory search handle + flAttribute, // Search attribute + &FindBuffer, // Result buffer + ulResultBufLen, // Result buffer length + &ulFindCount, // Number of entries to find + FIL_STANDARD); // Return Level 1 file info + + if(rc != NO_ERROR) + { + free(pathWithWildcard); + if(rc == ERROR_NO_MORE_FILES && !isDir) + continue; + + printf("DosFindFirst error: return code = %u\n", rc); + return rc; + } + else + { + if(strcmp(FindBuffer.achName, ".") != 0 && strcmp(FindBuffer.achName, "..") != 0) + { + fullPath = malloc(strlen(path) + 2 + strlen(FindBuffer.achName) + 1); + fullPath = strcpy(fullPath, path); // Parent path + strcat(fullPath, "\\"); // Adds slashes + strcat(fullPath, FindBuffer.achName); // Adds filename + if(isDir) + printf("%s\\\n", fullPath); // Print directory name + else + printf("%s\n", fullPath); // Print file name + if(strcmp(FindBuffer.achName, ".") != 0 && strcmp(FindBuffer.achName, "..") != 0) + { + eaSize = 0; + GetEAs(fullPath, &eaBuffer, &eaSize); + + if(eaSize != 0) + { + sprintf(&eaPath, "%08d.EA", *eaCounter); + earc = DosOpen(eaPath, &eaFileHandle, &ulAction, 0L, FILE_NORMAL, + OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS, + OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, NULL); + + if(earc == NO_ERROR) + { + earc = DosWrite(eaFileHandle, eaBuffer, eaSize, &ulAction); + if(earc == NO_ERROR) + { + printf("\tSaved %ld bytes from %ld bytes of EAs saved to %08d.EA\n", ulAction, eaSize, + *eaCounter); + *eaCounter += 1; + } + DosClose(eaFileHandle); + } + + free(eaBuffer); + } + + if(isDir) + { + drc = GetAllInDir(fullPath, eaCounter); + if(drc != NO_ERROR && drc != ERROR_NO_MORE_FILES) + { + printf("GetAllInDir(%s) returned %u\n", fullPath, drc); + return drc; + } + } + } + + free(fullPath); + } + } + + while(rc != ERROR_NO_MORE_FILES) + { + ulFindCount = 1; // Reset find count + + rc = DosFindNext(hdirFindHandle, // Directory handle + &FindBuffer, // Result buffer + ulResultBufLen, // Result buffer length + &ulFindCount); // Number of entries to find + + if(rc != NO_ERROR && rc != ERROR_NO_MORE_FILES) + { + free(pathWithWildcard); + printf("DosFindNext error: return code = %u\n", rc); + return rc; + } + else + { + if(strcmp(FindBuffer.achName, ".") == 0 || strcmp(FindBuffer.achName, "..") == 0) + continue; + + fullPath = malloc(strlen(path) + 2 + strlen(FindBuffer.achName) + 1); + fullPath = strcpy(fullPath, path); // Parent path + strcat(fullPath, "\\"); // Adds slashes + strcat(fullPath, FindBuffer.achName); // Adds filename + if(isDir) + printf("%s\\\n", fullPath); // Print directory name + else + printf("%s\n", fullPath); // Print file name + + eaSize = 0; + GetEAs(fullPath, &eaBuffer, &eaSize); + + if(eaSize != 0) + { + sprintf(&eaPath, "%08d.EA", *eaCounter); + earc = DosOpen(eaPath, &eaFileHandle, &ulAction, 0L, FILE_NORMAL, + OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS, + OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, NULL); + + if(earc == NO_ERROR) + { + earc = DosWrite(eaFileHandle, eaBuffer, eaSize, &ulAction); + if(earc == NO_ERROR) + { + printf("\tSaved %ld bytes from %ld bytes of EAs saved to %08d.EA\n", ulAction, eaSize, + *eaCounter); + *eaCounter += 1; + } + DosClose(eaFileHandle); + } + else + printf("Error %d calling DosOpen\n", earc); + + free(eaBuffer); + } + + if(isDir) + { + drc = GetAllInDir(fullPath, eaCounter); + if(drc != NO_ERROR && drc != ERROR_NO_MORE_FILES) + { + printf("GetAllInDir(%s) returned %u\n", fullPath, drc); + return drc; + } + } + + free(fullPath); + } /* endif */ + } /* endwhile */ + + free(pathWithWildcard); + rc = DosFindClose(hdirFindHandle); // Close our directory handle + if(rc != NO_ERROR) + { + printf("DosFindClose error: return code = %u\n", rc); + return rc; + } + } + return ERROR_NO_MORE_FILES; +} + diff --git a/fstester/getter/os2_32/DIR.H b/fstester/getter/os2_32/DIR.H new file mode 100644 index 00000000..7963713a --- /dev/null +++ b/fstester/getter/os2_32/DIR.H @@ -0,0 +1,37 @@ +/**************************************************************************** +The Disc Image Chef +----------------------------------------------------------------------------- + +Filename : dir.h +Author(s) : Natalia Portillo + +Component : fstester.getter.os2 + +--[ Description ] ----------------------------------------------------------- + +Contains directory definitions + +--[ License ] --------------------------------------------------------------- + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warraty of + MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +----------------------------------------------------------------------------- +Copyright (C) 2011-2018 Natalia Portillo +*****************************************************************************/ + +#ifndef DIC_FSTESTER_GETTER_OS2_DIR_H +#define DIC_FSTESTER_GETTER_OS2_DIR_H + +int GetAllInDir(); + +#endif diff --git a/fstester/getter/os2_32/EA.C b/fstester/getter/os2_32/EA.C new file mode 100644 index 00000000..219ef952 --- /dev/null +++ b/fstester/getter/os2_32/EA.C @@ -0,0 +1,93 @@ +/* Public domain code from Info/Zip + * Written by Kai Uew Rommel + * from zip30/os2/os2zip.c + * Modified by Natalia Portillo + */ + +#include +#include + +#define INCL_NOPM +#define INCL_DOSNLS +#define INCL_DOSERRORS + +#include + +#include "ea.h" + +void GetEAs(char *path, char **bufptr, size_t *size) +{ + FILESTATUS4 fs; + PDENA2 pDENA, pFound; + EAOP2 eaop; + PGEA2 pGEA; + PGEA2LIST pGEAlist; + PFEA2LIST pFEAlist; + ULONG ulAttributes; + ULONG nLength; + ULONG nBlock; + + if(DosQueryPathInfo(path, FIL_QUERYEASIZE, (PBYTE) & fs, sizeof(fs))) + return; + + nBlock = max(fs.cbList, 65535); + + if((pDENA = malloc((size_t)nBlock)) == NULL) + return; + + ulAttributes = -1; + + if(DosEnumAttribute(ENUMEA_REFTYPE_PATH, path, 1, pDENA, nBlock, &ulAttributes, ENUMEA_LEVEL_NO_VALUE) || + ulAttributes == 0 || (pGEAlist = malloc((size_t)nBlock)) == NULL) + { + free(pDENA); + return; + } + + pGEA = pGEAlist->list; + memset(pGEAlist, 0, nBlock); + pFound = pDENA; + + while(ulAttributes--) + { + pGEA->cbName = pFound->cbName; + strcpy(pGEA->szName, pFound->szName); + + nLength = sizeof(GEA2) + strlen(pGEA->szName); + nLength = ((nLength - 1) / sizeof(ULONG) + 1) * sizeof(ULONG); + + pGEA->oNextEntryOffset = ulAttributes ? nLength : 0; + pGEA = (PGEA2)((PCH)pGEA + nLength); + + pFound = (PDENA2)((PCH)pFound + pFound->oNextEntryOffset); + } + + if(pGEA == pGEAlist->list) // No attributes to save + { + free(pDENA); + free(pGEAlist); + return; + } + + pGEAlist->cbList = (PCH)pGEA - (PCH)pGEAlist; + + pFEAlist = (PVOID)pDENA; // reuse buffer + pFEAlist->cbList = nBlock; + + eaop.fpGEA2List = pGEAlist; + eaop.fpFEA2List = pFEAlist; + eaop.oError = 0; + + if(DosQueryPathInfo(path, FIL_QUERYEASFROMLIST, (PBYTE) & eaop, sizeof(eaop))) + { + free(pDENA); + free(pGEAlist); + return; + } + + *size = pFEAlist->cbList; + *bufptr = (char *)pFEAlist; + + free(pDENA); + free(pGEAlist); +} diff --git a/fstester/getter/os2_32/EA.H b/fstester/getter/os2_32/EA.H new file mode 100644 index 00000000..c45bd667 --- /dev/null +++ b/fstester/getter/os2_32/EA.H @@ -0,0 +1,41 @@ +/**************************************************************************** +The Disc Image Chef +----------------------------------------------------------------------------- + +Filename : ea.h +Author(s) : Natalia Portillo + +Component : fstester.getter.os2 + +--[ Description ] ----------------------------------------------------------- + +Contains extended attribute definitions + +--[ License ] --------------------------------------------------------------- + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warraty of + MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +----------------------------------------------------------------------------- +Copyright (C) 2011-2018 Natalia Portillo +*****************************************************************************/ + +#ifndef DIC_FSTESTER_GETTER_OS2_EA_H +#define DIC_FSTESTER_GETTER_OS2_EA_H + +#ifndef max +#define max(a, b) ((a) < (b) ? (b) : (a)) +#endif + +void GetEAs(); + +#endif diff --git a/fstester/getter/os2_32/MAIN.C b/fstester/getter/os2_32/MAIN.C new file mode 100644 index 00000000..f7c2b7a5 --- /dev/null +++ b/fstester/getter/os2_32/MAIN.C @@ -0,0 +1,46 @@ +/**************************************************************************** +The Disc Image Chef +----------------------------------------------------------------------------- + +Filename : main.c +Author(s) : Natalia Portillo + +Component : fstester.getter.os2 + +--[ Description ] ----------------------------------------------------------- + +Contains global definitions + +--[ License ] --------------------------------------------------------------- + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warraty of + MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +----------------------------------------------------------------------------- +Copyright (C) 2011-2018 Natalia Portillo +*****************************************************************************/ + +#include + +#include + +#include "main.h" +#include "dir.h" + +int main() +{ + ULONG eaCounter = 0; + printf("The Disc Image Chef Filesystem Tester (Getter) for OS/2 %s\n", DIC_FSTESTER_VERSION); + printf("%s\n", DIC_COPYRIGHT); + + return GetAllInDir("C:", &eaCounter); +} diff --git a/fstester/getter/os2_32/MAIN.H b/fstester/getter/os2_32/MAIN.H new file mode 100644 index 00000000..97ae69e6 --- /dev/null +++ b/fstester/getter/os2_32/MAIN.H @@ -0,0 +1,38 @@ +/**************************************************************************** +The Disc Image Chef +----------------------------------------------------------------------------- + +Filename : main.h +Author(s) : Natalia Portillo + +Component : fstester.getter.os2 + +--[ Description ] ----------------------------------------------------------- + +Contains global definitions + +--[ License ] --------------------------------------------------------------- + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warraty of + MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +----------------------------------------------------------------------------- +Copyright (C) 2011-2018 Natalia Portillo +*****************************************************************************/ + +#ifndef DIC_FSTESTER_GETTER_OS2_MAIN_H +#define DIC_FSTESTER_GETTER_OS2_MAIN_H + +#define DIC_FSTESTER_VERSION "0.1" +#define DIC_COPYRIGHT "Copyright (C) 2011-2018 Natalia Portillo" + +#endif diff --git a/fstester/getter/os2_32/OS2.EXE b/fstester/getter/os2_32/OS2.EXE new file mode 100755 index 00000000..0a4537a2 Binary files /dev/null and b/fstester/getter/os2_32/OS2.EXE differ diff --git a/fstester/getter/os2_32/OS2.LK1 b/fstester/getter/os2_32/OS2.LK1 new file mode 100644 index 00000000..4b8a3d7a --- /dev/null +++ b/fstester/getter/os2_32/OS2.LK1 @@ -0,0 +1,2 @@ +FIL dir.obj,ea.obj,main.obj + diff --git a/fstester/getter/os2_32/OS2.MAP b/fstester/getter/os2_32/OS2.MAP new file mode 100644 index 00000000..8f0fb894 --- /dev/null +++ b/fstester/getter/os2_32/OS2.MAP @@ -0,0 +1,326 @@ +Open Watcom Linker Version 1.8 +Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved. +Created on: 18/01/10 16:16:05 +Executable Image: os2.exe +creating an OS/2 32-bit executable + + + +------------+ + | Groups | + +------------+ + +Group Address Size +===== ======= ==== + +DGROUP 0002:00000000 00010820 + + + + +--------------+ + | Segments | + +--------------+ + +Segment Class Group Address Size +======= ===== ===== ======= ==== + +BEGTEXT CODE AUTO 0001:00000000 00000007 +_TEXT CODE AUTO 0001:00000010 0000347f +_NULL BEGDATA DGROUP 0002:00000000 00000004 +_AFTERNULL BEGDATA DGROUP 0002:00000004 00000000 +CONST DATA DGROUP 0002:00000004 00000198 +CONST2 DATA DGROUP 0002:0000019c 00000000 +_DATA DATA DGROUP 0002:0000019c 00000434 +XIB DATA DGROUP 0002:000005d0 00000000 +XI DATA DGROUP 0002:000005d0 00000012 +XIE DATA DGROUP 0002:000005e2 00000000 +YIB DATA DGROUP 0002:000005e2 00000000 +YI DATA DGROUP 0002:000005e2 00000006 +YIE DATA DGROUP 0002:000005e8 00000000 +TIB DATA DGROUP 0002:000005e8 00000000 +TI DATA DGROUP 0002:000005e8 00000000 +TIE DATA DGROUP 0002:000005e8 00000000 +DATA DATA DGROUP 0002:000005e8 00000000 +_BSS BSS DGROUP 0002:000005e8 0000022c +STACK STACK DGROUP 0002:00000820 00010000 + + + +----------------+ + | Memory Map | + +----------------+ + +* = unreferenced symbol ++ = symbol only referenced locally + +Address Symbol +======= ====== + +Module: dir.obj(C:\dic\os2\dir.c) +0001:00000130 GetAllInDir +Module: ea.obj(C:\dic\os2\ea.c) +0001:00000710 GetEAs +Module: main.obj(C:\dic\os2\main.c) +0001:0000092d main +Module: C:\WATCOM/lib386/os2\clib3s.lib(stk) +0001:000009a1* __STK +0001:00000991 __CHK +0001:000009cd* __GRO +0001:000009c0* __STKOVERFLOW +Module: C:\WATCOM/lib386/os2\clib3s.lib(strlen.c) +0001:000009f0 strlen +Module: C:\WATCOM/lib386/os2\clib3s.lib(nmalloc.c) +0001:00000a10 malloc +0001:00000a20 _nmalloc +0002:000001ac __nheapbeg +0002:000001b0 __MiniHeapRover +0002:000001b4 __LargestSizeB4MiniHeapRover +Module: C:\WATCOM/lib386/os2\clib3s.lib(strcpy.c) +0001:00000b40 strcpy +Module: C:\WATCOM/lib386/os2\clib3s.lib(strcat.c) +0001:00000b70 strcat +Module: C:\WATCOM/lib386/os2\clib3s.lib(nfree.c) +0001:00000bb0 free +0001:00000bc0 _nfree +0002:000005e8 __MiniHeapFreeRover +Module: C:\WATCOM/lib386/os2\clib3s.lib(printf.c) +0001:00000cd0 printf +Module: C:\WATCOM/lib386/os2\clib3s.lib(_strcmp) +0001:00000d00 strcmp +Module: C:\WATCOM/lib386/os2\clib3s.lib(sprintf.c) +0001:00000e50 sprintf +Module: C:\WATCOM/lib386/os2\clib3s.lib(memset.c) +0001:00000e80 memset +Module: C:\WATCOM/lib386/os2\clib3s.lib(cstart) +0001:00000ea0 _cstart_ +Module: C:\WATCOM/lib386/os2\clib3s.lib(xmsgo32.c) +0001:00000f00+ __exit_with_msg +0001:00000f50 __fatal_runtime_error +Module: C:\WATCOM/lib386/os2\clib3s.lib(maino32.c) +0002:000001b8+ __FirstThreadData +0002:000001bc __GetThreadPtr +0002:000001c0 _AccessFileH +0002:000001c4 _ReleaseFileH +0002:000001c8 _AccessIOB +0002:000001cc _ReleaseIOB +0002:000001d0 _AccessNHeap +0002:000001d4* _AccessFHeap +0002:000001d8 _ReleaseNHeap +0002:000001dc* _ReleaseFHeap +0002:000001e0* _AccessTDList +0001:00000f8b __threadstack +0001:00000f92* __threadid +0001:00000f9b __OS2MainInit +0001:0000100c+ __OS2Init +0001:0000104d* __OS2Fini +0001:00001055+ __shutdown_stack_checking +0001:0000106a __exit +0002:000001e4* _ReleaseTDList +0002:000001e8+ __sig_init_rtn +0002:000001ec* __sig_fini_rtn +0002:000001f0* __threadstksize +0002:000001f4 __process_fini +0002:000005ec __Is_DLL +0002:000005f0+ __saved_CS +Module: C:\WATCOM/lib386/os2\clib3s.lib(nmemneed.c) +0001:000010c0 __nmemneed +Module: C:\WATCOM/lib386/os2\clib3s.lib(mem.c) +0001:000010d0 __MemAllocator +0001:00001180 __MemFree +Module: C:\WATCOM/lib386/os2\clib3s.lib(grownear.c) +0001:00001430 __ExpandDGROUP +Module: C:\WATCOM/lib386/os2\clib3s.lib(iob.c) +0002:000001f8 __iob +0002:00000400* _fmode +0002:000006f4 __OpenStreams +0002:000006f8 __ClosedStreams +Module: C:\WATCOM/lib386/os2\clib3s.lib(fprtf.c) +0001:00001470 __fprtf +Module: C:\WATCOM/lib386/os2\clib3s.lib(vsprintf.c) +0001:00001570 vsprintf +Module: C:\WATCOM/lib386/os2\clib3s.lib(__stos) +0001:000015a0 __STOSB +0001:000015d7* __STOSD +Module: C:\WATCOM/lib386/os2\clib3s.lib(main2o32.c) +0001:00001650 __OS2Main +Module: C:\WATCOM/lib386/os2\clib3s.lib(segdefns) +0001:00000003 ___begtext +0002:00000000* __nullarea +0002:000005d0 _Start_XI +0002:000005e2 _End_XI +0002:000005e2 _Start_YI +0002:000005e8 _End_YI +Module: C:\WATCOM/lib386/os2\clib3s.lib(enterdb.c) +0001:000016c0 __EnterWVIDEO +0002:00000404+ __WD_Present +Module: C:\WATCOM/lib386/os2\clib3s.lib(crwdata) +0002:0000044c _osmajor +0002:0000044d _osminor +0002:00000418* _LpDllName +0002:0000041c* _LpwCmdLine +0002:00000420* _LpwPgmName +0002:00000424* _LpwDllName +0002:00000410 _LpCmdLine +0002:00000414 _LpPgmName +0002:00000408* _dynend +0002:0000040c _curbrk +0002:00000428* _STACKLOW +0002:0000042c* _STACKTOP +0002:00000430 __ASTACKSIZ +0002:00000434 __ASTACKPTR +0002:00000438* _cbyte +0002:0000043c* _cbyte2 +0002:00000440* _child +0002:00000446 _Envptr +0002:0000044a* _Envseg +0002:00000444* __no87 +0002:0000044e* __FPE_handler +Module: C:\WATCOM/lib386/os2\clib3s.lib(cinit.c) +0001:000016f0 __CommonInit +0002:000006fc __hmodule +Module: C:\WATCOM/lib386/os2\clib3s.lib(initrtns.c) +0001:00001710 __InitRtns +0001:00001770 __FiniRtns +Module: C:\WATCOM/lib386/os2\clib3s.lib(amblksiz.c) +0002:00000454 _amblksiz +Module: C:\WATCOM/lib386/os2\clib3s.lib(heapen.c) +0001:000017e0* _heapenable +0002:00000458 __heap_enabled +Module: C:\WATCOM/lib386/os2\clib3s.lib(nheapmin.c) +0001:00001800* _heapshrink +0001:00001810* _heapmin +0001:00001820* _nheapmin +0001:000018e0 _nheapshrink +Module: C:\WATCOM/lib386/os2\clib3s.lib(initfile.c) +0001:00001950 __InitFiles +Module: C:\WATCOM/lib386/os2\clib3s.lib(ioexit.c) +0001:00001a60* fcloseall +0001:00001a70 __full_io_exit +Module: C:\WATCOM/lib386/os2\clib3s.lib(fputc.c) +0001:00001a80 fputc +Module: C:\WATCOM/lib386/os2\clib3s.lib(ioalloc.c) +0001:00001b80 __ioalloc +Module: C:\WATCOM/lib386/os2\clib3s.lib(prtf.c) +0001:00001c20 __prtf +Module: C:\WATCOM/lib386/os2\clib3s.lib(flush.c) +0001:000029d0 __flush +Module: C:\WATCOM/lib386/os2\clib3s.lib(mthrdini.c) +0001:00002ae0 __InitThreadData +0002:0000045c __ThreadDataSize +Module: C:\WATCOM/lib386/os2\clib3s.lib(cmain386.c) +0001:00002b00 __CMain +Module: C:\WATCOM/lib386/os2\clib3s.lib(dosseg) +0000:00001234 __DOSseg__ +Module: C:\WATCOM/lib386/os2\clib3s.lib(fclose.c) +0001:00002b50+ __doclose +0001:00002c10 __shutdown_stream +0001:00002c40* fclose +0002:00000700+ __RmTmpFileFn +Module: C:\WATCOM/lib386/os2\clib3s.lib(freefp.c) +0001:00002c80 __freefp +0001:00002cd0 __purgefp +Module: C:\WATCOM/lib386/os2\clib3s.lib(seterrno.c) +0001:00002d02 __set_errno +0001:00002d13* __set_EDOM +0001:00002d21* __set_ERANGE +0001:00002d2f* __set_EINVAL +0001:00002d42 __set_doserrno +Module: C:\WATCOM/lib386/os2\clib3s.lib(chktty.c) +0001:00002d60 __chktty +Module: C:\WATCOM/lib386/os2\clib3s.lib(wctomb.c) +0001:00002da0 wctomb +Module: C:\WATCOM/lib386/os2\clib3s.lib(itoa.c) +0001:00002de0+ utoa +0001:00002e40 itoa +Module: C:\WATCOM/lib386/os2\clib3s.lib(strupr.c) +0001:00002e80 strupr +Module: C:\WATCOM/lib386/os2\clib3s.lib(noefgfmt.c) +0002:00000460 __EFG_printf +0002:00000464* __EFG_scanf +Module: C:\WATCOM/lib386/os2\clib3s.lib(lltoa.c) +0001:00002ee0 ulltoa +0001:00002f50* lltoa +Module: C:\WATCOM/lib386/os2\clib3s.lib(ltoa.c) +0001:00002f90 ultoa +0001:00002ff0* ltoa +Module: C:\WATCOM/lib386/os2\clib3s.lib(mbisdbcs.c) +0002:00000704 __IsDBCS +Module: C:\WATCOM/lib386/os2\clib3s.lib(mbislead.c) +0001:00003030* _ismbblead +0002:00000708 __MBCSIsTable +Module: C:\WATCOM/lib386/os2\clib3s.lib(lseekos2.c) +0001:00003060 __lseek +Module: C:\WATCOM/lib386/os2\clib3s.lib(fsync.c) +0001:000030a0 fsync +Module: C:\WATCOM/lib386/os2\clib3s.lib(qwrit.c) +0001:000030d0 __qwrite +Module: C:\WATCOM/lib386/os2\clib3s.lib(___argc.c) +0002:0000080c ___Argc +0002:00000810 ___Argv +Module: C:\WATCOM/lib386/os2\clib3s.lib(exit.c) +0001:00003190+ __null_int23_exit +0001:00003192 exit +0001:000031e2* _exit +0002:00000468+ __int23_exit +0002:0000046c+ __FPE_handler_exit +Module: C:\WATCOM/lib386/os2\clib3s.lib(_clseos2.c) +0001:00003200 __close +Module: C:\WATCOM/lib386/os2\clib3s.lib(isattos2.c) +0001:00003250 isatty +Module: C:\WATCOM/lib386/os2\clib3s.lib(alphabet.c) +0002:00000174 __Alphabet +Module: C:\WATCOM/lib386/os2\clib3s.lib(mbinit.c) +0001:000032c1 __mbinit +0002:00000470+ __MBCodePage +Module: C:\WATCOM/lib386/os2\clib3s.lib(dosret.c) +0001:000033d0+ _dosretax +0001:000033f0* _dosret0 +0001:00003410 __set_errno_dos +Module: C:\WATCOM/lib386/os2\clib3s.lib(iomode.c) +0001:00003450 __GetIOMode +0001:00003470 __SetIOMode_nogrow +0002:00000578+ __NFiles +0002:0000057c+ __init_mode +0002:000005cc+ __io_mode + + + +----------------------+ + | Imported Symbols | + +----------------------+ + +Symbol Module +====== ====== + +DosFindFirst DOSCALLS +DosOpen DOSCALLS +DosWrite DOSCALLS +DosClose DOSCALLS +DosFindNext DOSCALLS +DosFindClose DOSCALLS +DosQueryPathInfo DOSCALLS +DosEnumAttribute DOSCALLS +DosQuerySysInfo DOSCALLS +DosExit DOSCALLS +DosAllocMem DOSCALLS +DosFreeMem DOSCALLS +DosSetFilePtr DOSCALLS +DosResetBuffer DOSCALLS +DosQueryHType DOSCALLS +DosQueryDBCSEnv NLS +DosQueryCp DOSCALLS + + + +--------------------+ + | Libraries Used | + +--------------------+ + +C:\WATCOM/lib386/os2\clib3s.lib +C:\WATCOM/lib386/os2\os2386.lib + + + +-----------------------+ + | Linker Statistics | + +-----------------------+ + +Stack size: 00010000 (65536.) +Memory size: 00013caf (81071.) +Entry point address: 0001:00000ea0 +Link time: 00:00.08 diff --git a/fstester/getter/os2_32/OS2.MK b/fstester/getter/os2_32/OS2.MK new file mode 100644 index 00000000..19667b3d --- /dev/null +++ b/fstester/getter/os2_32/OS2.MK @@ -0,0 +1,3 @@ +project : C:\dic\os2\os2.exe .SYMBOLIC + +!include C:\dic\os2\os2.mk1 diff --git a/fstester/getter/os2_32/OS2.MK1 b/fstester/getter/os2_32/OS2.MK1 new file mode 100644 index 00000000..673a8828 --- /dev/null +++ b/fstester/getter/os2_32/OS2.MK1 @@ -0,0 +1,35 @@ +!define BLANK "" +C:\dic\os2\dir.obj : C:\dic\os2\dir.c .AUTODEPEND + @C: + cd C:\dic\os2 + *wcc386 dir.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3s -bt& +=os2 -fo=.obj -mf + +C:\dic\os2\ea.obj : C:\dic\os2\ea.c .AUTODEPEND + @C: + cd C:\dic\os2 + *wcc386 ea.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3s -bt=& +os2 -fo=.obj -mf + +C:\dic\os2\main.obj : C:\dic\os2\main.c .AUTODEPEND + @C: + cd C:\dic\os2 + *wcc386 main.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3s -b& +t=os2 -fo=.obj -mf + +C:\dic\os2\os2.exe : C:\dic\os2\dir.obj C:\dic\os2\ea.obj C:\dic\os2\main.ob& +j C:\dic\os2\dir.h C:\dic\os2\ea.h C:\dic\os2\main.h .AUTODEPEND + @C: + cd C:\dic\os2 + @%write os2.lk1 FIL dir.obj,ea.obj,main.obj + @%append os2.lk1 +!ifneq BLANK "" + *wlib -q -n -b os2.imp + @%append os2.lk1 LIBR os2.imp +!endif + *wlink name os2 d all SYS os2v2 op m op maxe=25 op q op symf op vers=0.1.0 & +@os2.lk1 +!ifneq BLANK "" + rc -i $[: -i C:\WATCOM\h -i C:\WATCOM\h\os2 os2.exe +!endif + diff --git a/fstester/getter/os2_32/OS2.SYM b/fstester/getter/os2_32/OS2.SYM new file mode 100644 index 00000000..0d8dd968 Binary files /dev/null and b/fstester/getter/os2_32/OS2.SYM differ diff --git a/fstester/getter/os2_32/OS2.TGT b/fstester/getter/os2_32/OS2.TGT new file mode 100644 index 00000000..122e2c8f --- /dev/null +++ b/fstester/getter/os2_32/OS2.TGT @@ -0,0 +1,238 @@ +40 +targetIdent +0 +MProject +1 +MComponent +0 +2 +WString +4 +OEXE +3 +WString +5 +oc2eo +1 +0 +1 +4 +MCommand +0 +5 +MCommand +0 +6 +MItem +7 +os2.exe +7 +WString +4 +OEXE +8 +WVList +1 +9 +MVState +10 +WString +7 +OS2LINK +11 +WString +31 +o????Version (Major.minor.rev): +1 +12 +WString +5 +0.1.0 +0 +13 +WVList +1 +14 +ActionStates +15 +WString +5 +&Make +16 +WVList +0 +-1 +1 +1 +0 +17 +WPickList +8 +18 +MItem +3 +*.c +19 +WString +4 +COBJ +20 +WVList +2 +21 +MRState +22 +WString +3 +WCC +23 +WString +30 +??2??80386 Stack based calling +1 +1 +24 +MRState +25 +WString +3 +WCC +26 +WString +39 +??2??Pentium Pro Register based calling +1 +0 +27 +WVList +0 +-1 +1 +1 +0 +28 +MItem +5 +dir.c +29 +WString +4 +COBJ +30 +WVList +0 +31 +WVList +0 +18 +1 +1 +0 +32 +MItem +4 +ea.c +33 +WString +4 +COBJ +34 +WVList +0 +35 +WVList +0 +18 +1 +1 +0 +36 +MItem +6 +main.c +37 +WString +4 +COBJ +38 +WVList +0 +39 +WVList +0 +18 +1 +1 +0 +40 +MItem +3 +*.h +41 +WString +3 +NIL +42 +WVList +0 +43 +WVList +0 +-1 +1 +1 +0 +44 +MItem +5 +dir.h +45 +WString +3 +NIL +46 +WVList +0 +47 +WVList +0 +40 +1 +1 +0 +48 +MItem +4 +ea.h +49 +WString +3 +NIL +50 +WVList +0 +51 +WVList +0 +40 +1 +1 +0 +52 +MItem +6 +main.h +53 +WString +3 +NIL +54 +WVList +0 +55 +WVList +0 +40 +1 +1 +0 diff --git a/fstester/getter/os2_32/OS2.WPJ b/fstester/getter/os2_32/OS2.WPJ new file mode 100644 index 00000000..947bb2a2 --- /dev/null +++ b/fstester/getter/os2_32/OS2.WPJ @@ -0,0 +1,43 @@ +40 +projectIdent +0 +VpeMain +1 +WRect +624 +1450 +7680 +9210 +2 +MProject +3 +MCommand +0 +4 +MCommand +0 +1 +5 +WFileName +7 +os2.tgt +6 +WVList +1 +7 +VComponent +8 +WRect +0 +0 +5712 +4330 +0 +0 +9 +WFileName +7 +os2.tgt +0 +2 +7 diff --git a/fstester/getter/os2_32/README.md b/fstester/getter/os2_32/README.md new file mode 100644 index 00000000..0c1b1c12 --- /dev/null +++ b/fstester/getter/os2_32/README.md @@ -0,0 +1,28 @@ +DiscImageChef 32-bit OS/2 Filesystem Getter +=========================================== +This snippet is designed to retrieve all Extended Attributes from all files in the `C:` +volume, saving them as a set of COUNTER.EA files in executing directory. + +The format of those files should be as `FEA2LIST` structure (following). +It compiles under OpenWatcom. + +``` +/* FEA2 defines the format for setting the full extended attributes in the file. */ + + typedef struct _FEA2 { + ULONG oNextEntryOffset; /* Offset to next entry. */ + BYTE fEA; /* Extended attributes flag. */ + BYTE cbName; /* Length of szName, not including NULL. */ + USHORT cbValue; /* Value length. */ + CHAR szName[1]; /* Extended attribute name. */ + } FEA2; + typedef FEA2 *PFEA2; + +/* FEA2 data structure. */ + + typedef struct _FEA2LIST { + ULONG cbList; /* Total bytes of structure including full list. */ + FEA2 list[1]; /* Variable-length FEA2 structures. */ + } FEA2LIST; + typedef FEA2LIST *PFEA2LIST; +``` \ No newline at end of file