| 1 |  | 
|---|
| 2 | /* | 
|---|
| 3 | *@@sourcefile eah.h: | 
|---|
| 4 | *      header file for eah.c. See remarks there. | 
|---|
| 5 | * | 
|---|
| 6 | *      Note: Version numbering in this file relates to XWorkplace version | 
|---|
| 7 | *            numbering. | 
|---|
| 8 | * | 
|---|
| 9 | *@@include #include <os2.h> | 
|---|
| 10 | *@@include #include "helpers\eah.h" | 
|---|
| 11 | */ | 
|---|
| 12 |  | 
|---|
| 13 | /* | 
|---|
| 14 | *      Most of the code in this file dealing with Extended Attributes | 
|---|
| 15 | *      is based on code (w) by Chris Hanson (cph@zurich.ai.mit.edu). | 
|---|
| 16 | *      Copyright (c) 1995 Massachusetts Institute of Technology. | 
|---|
| 17 | *      The original code is available as EALIB.ZIP at Hobbes. | 
|---|
| 18 | * | 
|---|
| 19 | *      From that code is the following copyright notice: | 
|---|
| 20 | * | 
|---|
| 21 | *      This material was developed by the Scheme project at the Massachusetts | 
|---|
| 22 | *      Institute of Technology, Department of Electrical Engineering and | 
|---|
| 23 | *      Computer Science.  Permission to copy this software, to redistribute | 
|---|
| 24 | *      it, and to use it for any purpose is granted, subject to the following | 
|---|
| 25 | *      restrictions and understandings. | 
|---|
| 26 | * | 
|---|
| 27 | *      1. Any copy made of this software must include this copyright notice | 
|---|
| 28 | *      in full. | 
|---|
| 29 | * | 
|---|
| 30 | *      2. Users of this software agree to make their best efforts (a) to | 
|---|
| 31 | *      return to the MIT Scheme project any improvements or extensions that | 
|---|
| 32 | *      they make, so that these may be included in future releases; and (b) | 
|---|
| 33 | *      to inform MIT of noteworthy uses of this software. | 
|---|
| 34 | * | 
|---|
| 35 | *      3. All materials developed as a consequence of the use of this | 
|---|
| 36 | *      software shall duly acknowledge such use, in accordance with the usual | 
|---|
| 37 | *      standards of acknowledging credit in academic research. | 
|---|
| 38 | * | 
|---|
| 39 | *      4. MIT has made no warrantee or representation that the operation of | 
|---|
| 40 | *      this software will be error-free, and MIT is under no obligation to | 
|---|
| 41 | *      provide any services, by way of maintenance, update, or otherwise. | 
|---|
| 42 | * | 
|---|
| 43 | *      5. In conjunction with products arising from the use of this material, | 
|---|
| 44 | *      there shall be no use of the name of the Massachusetts Institute of | 
|---|
| 45 | *      Technology nor of any adaptation thereof in any advertising, | 
|---|
| 46 | *      promotional, or sales literature without prior written consent from | 
|---|
| 47 | *      MIT in each case. | 
|---|
| 48 | * | 
|---|
| 49 | *      This file Copyright (C) 1997-2000 Ulrich Mller, | 
|---|
| 50 | *                                        Massachusetts Institute of Technology. | 
|---|
| 51 | *      This file is part of the "XWorkplace helpers" source package. | 
|---|
| 52 | *      This is free software; you can redistribute it and/or modify | 
|---|
| 53 | *      it under the terms of the GNU General Public License as published | 
|---|
| 54 | *      by the Free Software Foundation, in version 2 as it comes in the | 
|---|
| 55 | *      "COPYING" file of the XWorkplace main distribution. | 
|---|
| 56 | *      This program is distributed in the hope that it will be useful, | 
|---|
| 57 | *      but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 58 | *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|---|
| 59 | *      GNU General Public License for more details. | 
|---|
| 60 | */ | 
|---|
| 61 |  | 
|---|
| 62 | #if __cplusplus | 
|---|
| 63 | extern "C" { | 
|---|
| 64 | #endif | 
|---|
| 65 |  | 
|---|
| 66 | #ifndef EAS_HEADER_INCLUDED | 
|---|
| 67 | #define EAS_HEADER_INCLUDED | 
|---|
| 68 |  | 
|---|
| 69 | /* | 
|---|
| 70 | *@@ EABINDING: | 
|---|
| 71 | *      generic data structure used for all | 
|---|
| 72 | *      the EA functions. | 
|---|
| 73 | * | 
|---|
| 74 | *      usValueLength gives you the length of *pszValue, | 
|---|
| 75 | *      which is _not_ necessarily zero-terminated. | 
|---|
| 76 | * | 
|---|
| 77 | *      The format of pszValue depends on the EA type. | 
|---|
| 78 | *      This pointer points to the "raw" EA data. | 
|---|
| 79 | * | 
|---|
| 80 | *      The first USHORT gives you the EA type (EAT_* flag), | 
|---|
| 81 | *      on which the other bytes depend. | 
|---|
| 82 | * | 
|---|
| 83 | *      Most EA types have their size in the second USHORT. | 
|---|
| 84 | *      All EA formats are described in detail in CPREF. | 
|---|
| 85 | */ | 
|---|
| 86 |  | 
|---|
| 87 | typedef struct _EABINDING | 
|---|
| 88 | { | 
|---|
| 89 | BYTE    bFlags; | 
|---|
| 90 | // EA flags, as in FEA2.fEA. This is either | 
|---|
| 91 | // FFEA_NEEDEA (for critical EAs) or 0. | 
|---|
| 92 | BYTE    bNameLength;        // length of (*pszName) | 
|---|
| 93 | USHORT  usValueLength;      // length of (*pszValue) | 
|---|
| 94 | PSZ     pszName;            // EA name (e.g. ".CLASSINFO") | 
|---|
| 95 | PSZ     pszValue;           // complete raw EA contents. | 
|---|
| 96 | // The first USHORT gives you the type, | 
|---|
| 97 | // the second USHORT normally the size. | 
|---|
| 98 | } EABINDING, *PEABINDING; | 
|---|
| 99 |  | 
|---|
| 100 | /* | 
|---|
| 101 | *@@ EALIST: | 
|---|
| 102 | *      list structure returned by eaPathReadAll and | 
|---|
| 103 | *      eaHFileReadAll. | 
|---|
| 104 | */ | 
|---|
| 105 |  | 
|---|
| 106 | typedef struct _EALIST | 
|---|
| 107 | { | 
|---|
| 108 | PEABINDING      peab; | 
|---|
| 109 | struct _EALIST  *next; | 
|---|
| 110 | } EALIST, *PEALIST; | 
|---|
| 111 |  | 
|---|
| 112 | void eaFreeBinding(PEABINDING peab); | 
|---|
| 113 |  | 
|---|
| 114 | void eaFreeList(PEALIST list); | 
|---|
| 115 |  | 
|---|
| 116 | /* ****************************************************************** | 
|---|
| 117 | * | 
|---|
| 118 | *   Read-EA functions | 
|---|
| 119 | * | 
|---|
| 120 | ********************************************************************/ | 
|---|
| 121 |  | 
|---|
| 122 | ULONG eaHFileQueryTotalSize(HFILE hFile); | 
|---|
| 123 |  | 
|---|
| 124 | ULONG eaPathQueryTotalSize(const char *pcszPath); | 
|---|
| 125 |  | 
|---|
| 126 | PEALIST eaHFileReadAll(HFILE hfile); | 
|---|
| 127 |  | 
|---|
| 128 | PEALIST eaPathReadAll(const char *pcszPath); | 
|---|
| 129 |  | 
|---|
| 130 | PEABINDING eaHFileReadOneByIndex(HFILE hfile, ULONG index); | 
|---|
| 131 |  | 
|---|
| 132 | PEABINDING eaPathReadOneByIndex(const char *pcszPath, ULONG index); | 
|---|
| 133 |  | 
|---|
| 134 | PEABINDING eaHFileReadOneByName(HFILE hfile, const char *pcszEAName); | 
|---|
| 135 |  | 
|---|
| 136 | PEABINDING eaPathReadOneByName(const char *pcszPath, const char *pcszEAName); | 
|---|
| 137 |  | 
|---|
| 138 | /* ****************************************************************** | 
|---|
| 139 | * | 
|---|
| 140 | *   Write-EA functions | 
|---|
| 141 | * | 
|---|
| 142 | ********************************************************************/ | 
|---|
| 143 |  | 
|---|
| 144 | APIRET eaHFileWriteAll(HFILE hfile, PEALIST list); | 
|---|
| 145 |  | 
|---|
| 146 | APIRET eaPathWriteAll(const char *pcszPath, PEALIST list); | 
|---|
| 147 |  | 
|---|
| 148 | APIRET eaHFileWriteOne(HFILE hfile, PEABINDING peab); | 
|---|
| 149 |  | 
|---|
| 150 | APIRET eaPathWriteOne(const char *pcszPath, PEABINDING peab); | 
|---|
| 151 |  | 
|---|
| 152 | APIRET eaPathDeleteOne(const char *pcszPath, const char *pcszEAName); | 
|---|
| 153 |  | 
|---|
| 154 | /******************************************************************** | 
|---|
| 155 | * | 
|---|
| 156 | *   Translation funcs | 
|---|
| 157 | * | 
|---|
| 158 | ********************************************************************/ | 
|---|
| 159 |  | 
|---|
| 160 | USHORT eaQueryEAType(PEABINDING peab); | 
|---|
| 161 |  | 
|---|
| 162 | PSZ eaCreatePSZFromBinding(PEABINDING peab); | 
|---|
| 163 |  | 
|---|
| 164 | PEABINDING eaCreateBindingFromPSZ(const char *pcszEAName, | 
|---|
| 165 | const char *pcszInput); | 
|---|
| 166 |  | 
|---|
| 167 | USHORT eaQueryMVCount(PEABINDING peab, | 
|---|
| 168 | PUSHORT pusCodepage, | 
|---|
| 169 | PUSHORT pusEAType); | 
|---|
| 170 |  | 
|---|
| 171 | PSZ eaQueryMVItem(PEABINDING peab, | 
|---|
| 172 | USHORT usIndex, | 
|---|
| 173 | PUSHORT pusEAType, | 
|---|
| 174 | PUSHORT pusCodepage, | 
|---|
| 175 | PUSHORT pusDataLength); | 
|---|
| 176 |  | 
|---|
| 177 | PSZ eaCreatePSZFromMVBinding(PEABINDING peab, | 
|---|
| 178 | const char *pcszSeparator, | 
|---|
| 179 | PUSHORT pusCodepage); | 
|---|
| 180 |  | 
|---|
| 181 | PEABINDING eaCreateMVBindingFromPSZ(const char *pcszEAName, | 
|---|
| 182 | const char *pcszInput, | 
|---|
| 183 | const char *pcszSeparator, | 
|---|
| 184 | USHORT usCodepage); | 
|---|
| 185 |  | 
|---|
| 186 | /* ****************************************************************** | 
|---|
| 187 | * | 
|---|
| 188 | *   Direct plain-string EA handling | 
|---|
| 189 | * | 
|---|
| 190 | ********************************************************************/ | 
|---|
| 191 |  | 
|---|
| 192 | typedef struct _EAMVMT | 
|---|
| 193 | { | 
|---|
| 194 | USHORT         usType; | 
|---|
| 195 | USHORT         usCodepage; | 
|---|
| 196 | USHORT         usEntries; | 
|---|
| 197 | USHORT         usEntryType; | 
|---|
| 198 | USHORT         usEntryLen; | 
|---|
| 199 | CHAR           chEntry[1]; | 
|---|
| 200 | } EAMVMT, *PEAMVMT; | 
|---|
| 201 |  | 
|---|
| 202 | typedef struct _EASVST | 
|---|
| 203 | { | 
|---|
| 204 | USHORT         usType; | 
|---|
| 205 | USHORT         usEntryLen; | 
|---|
| 206 | CHAR           chEntry[1]; | 
|---|
| 207 | } EASVST, *PEASVST; | 
|---|
| 208 |  | 
|---|
| 209 | #define MAX(a,b)   (a > b ? a : b) | 
|---|
| 210 | #define MAX(a,b)   (a > b ? a : b) | 
|---|
| 211 | #define NEXTSTR(s) (s+strlen(s) + 1) | 
|---|
| 212 |  | 
|---|
| 213 | APIRET eahWriteStringEA(HFILE hfile, | 
|---|
| 214 | PSZ pszEaName, | 
|---|
| 215 | PSZ pszEaValue); | 
|---|
| 216 |  | 
|---|
| 217 | APIRET eahReadStringEA(PSZ pszFileName, | 
|---|
| 218 | PSZ pszEaName, | 
|---|
| 219 | PSZ pszBuffer, | 
|---|
| 220 | PULONG pulBuflen); | 
|---|
| 221 | #endif | 
|---|
| 222 |  | 
|---|
| 223 | #if __cplusplus | 
|---|
| 224 | } | 
|---|
| 225 | #endif | 
|---|
| 226 |  | 
|---|