windows-nt/Source/XPSP1/NT/sdktools/ztools/inc/rm.h
2020-09-26 16:20:57 +08:00

81 lines
2.9 KiB
C

/* rm.h - include file for rm and undel facility
*
* Revision History:
* ??-???-???? ?? Created
* 27-Dec-1989 SB Added new index file header stuff
*
* Index file format:
* The indexed file is composed of records of length RM_RECLEN.
* The old index file was composed of entries each the size of a record
* and composed of filename padded by NULs. The hash function mapped the
* Nth record (i.e. Nth INDEXED entry) to 'deleted.xxx', where, 'xxx' is (N+1)
* padded by leading zeroes.
* The new index file has an header record, rm_header, followed by entries
* of one or more records padded by NULs. Longfilenames occupy multiple
* records. The hash function maps the entry starting at Nth record to
* 'deleted.xxx' where xxx is (N+1) padded by leading zeroes. This works out
* to be basically the same as that for the old format. The differences are :-
* -No entry is mapped to 'deleted.000'
* -Entries for filenames longer than (RM_RECLEN-1) bytes cause gaps in
* mapping.
*
* Notes:
* RM/EXP/UNDEL work as follows:-
* 'RM foo' saves a copy of 'foo' and places it in an hidden
* sub-directory of RM_DIR (of foo) as file 'deleted.xxx', where, xxx is
* determined from the index file RM_IDX in RM_DIR. An entry is made in
* the index file for this.
* 'UNDEL foo' reads the index file in RM_DIR and determines xxx for
* foo and renames 'deleted.xxx' as foo. The entry for foo in the index
* file is filled with NULLs.
* 'EXP' picks up the index file from RM_DIR and deletes 'deleted.xxx'
* for each entry in the index file. It then deletes the index file and
* RM_DIR.
*
* The new index file format can coexist with the old one because :-
* The header has a starting NULL which causes it to be ignored by
* the old utilities,
* When the old utilities attempt to read in a long filename entry they
* fail without harm as the hashed 'deleted.xx' does not exist.
*/
#define RM_DIR "deleted."
#define RM_IDX "index."
#define RM_RECLEN 16
/* The header record in the index file has
* '\0IXn.nn\0' padded to RM_RECLEN bytes
*/
#define RM_SIG (char)0x00
#define RM_MAGIC "IX" /* IX - IndeXed file */
#define RM_VER "1.01"
#define RM_NULL "\0"
/* Forms header for Index file using RM_MAGIC, RM_VER and RM_NULL */
extern char rm_header[RM_RECLEN];
/* Function prototypes */
// Converts Index file to the new format
int convertIdxFile (int fhidx, char *dir);
// Determines if the record is a new index file header
flagType fIdxHdr (char *rec);
// Reads an Index file record
int readIdxRec (int fhIdx, char *rec);
// Reads index file records and returns INDEXED entry
int readNewIdxRec (int fhIdx, char *szRec, unsigned int cbMax);
// Writes an new index file header
int writeIdxHdr (int fhIdx);
// Writes an index file record
int writeIdxRec (int fhIdx, char *rec);
// Indexes an entry into the Index file
int writeNewIdxRec (int fhIdx, char *szRec);