This example gets all the possible extended attributes (EAs) from the file "ATTRIB.EXE" in the OS2 directory, and then displays the names.
#define INCL_DOSFILEMGR /* File Manager values */ #define INCL_DOSERRORS /* DOS error values */ #include <os2.h> #include <stdio.h> int main(VOID) { UCHAR EnumBuf[200] = {0}; /* Data Buffer */ ULONG ulEnumCnt = 0; /* Count of entries to return */ FEA2 *ptr = NULL; /* Pointer to data items returned */ ULONG ulTemp = 0; APIRET rc = NO_ERROR; /* Return code */ ULONG i = 0; /* Loop index */ ulEnumCnt = (ULONG)-1; /* Request as many attributes as will fit in buffer */ rc = DosEnumAttribute(ENUMEA_REFTYPE_PATH, /* ASCIIZ string to be used */ "c:\\os2\\attrib.exe", /* Name of file */ 1L, /* Start with first attribute */ (PVOID)&EnumBuf, /* Buffer for information */ sizeof(EnumBuf), &ulEnumCnt, ENUMEA_LEVEL_NO_VALUE); /* Request level 1 info */ if (rc != NO_ERROR) { printf("DosEnumAttribute error: return code = %u\n", rc); return 1; } ptr = (FEA2 *)EnumBuf; /* Mask the buffer pointer to an FEA2 structure */ printf ("Attributes found = %u\n", ulEnumCnt); for (i = 0; i < ulEnumCnt; i++) { printf ("name = %s\n", ptr->szName); /* increment the ptr */ ulTemp = ptr->oNextEntryOffset + (ULONG)ptr; /* with the value in */ ptr = (FEA2 *)ulTemp; /* oNextEntryOffset */ } /* endfor */ /* to access next record */ return NO_ERROR; }