/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Communicator client code, released * March 31, 1998. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Daniel Veditz * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ /* NSReg.h */ #ifndef _NSREG_H_ #define _NSREG_H_ typedef void (*nr_RegPackCallbackFunc) (void *userData, int32 bytes, int32 totalBytes); typedef int32 REGERR; typedef int32 RKEY; typedef uint32 REGENUM; typedef void * HREG; typedef struct _reginfo { uint16 size; /* must be initialized to sizeof(REGINFO) */ uint16 entryType; uint32 entryLength; } REGINFO; #define REGERR_OK (0) #define REGERR_FAIL (1) #define REGERR_NOMORE (2) #define REGERR_NOFIND (3) #define REGERR_BADREAD (4) #define REGERR_BADLOCN (5) #define REGERR_PARAM (6) #define REGERR_BADMAGIC (7) #define REGERR_BADCHECK (8) #define REGERR_NOFILE (9) #define REGERR_MEMORY (10) #define REGERR_BUFTOOSMALL (11) #define REGERR_NAMETOOLONG (12) #define REGERR_REGVERSION (13) #define REGERR_DELETED (14) #define REGERR_BADTYPE (15) #define REGERR_NOPATH (16) #define REGERR_BADNAME (17) #define REGERR_READONLY (18) #define REGERR_BADUTF8 (19) /* Total path length */ #define MAXREGPATHLEN (2048) /* Name on the path (including null terminator) */ #define MAXREGNAMELEN (512) /* Value of an entry */ #define MAXREGVALUELEN (0x7FFF) /* Standard keys */ #define ROOTKEY_USERS (0x01) #define ROOTKEY_COMMON (0x02) #define ROOTKEY_CURRENT_USER (0x03) #define ROOTKEY_PRIVATE (0x04) /* enumeration styles */ #define REGENUM_NORMAL (0x00) #define REGENUM_CHILDREN REGENUM_NORMAL #define REGENUM_DESCEND (0x01) #define REGENUM_DEPTH_FIRST (0x02) /* entry data types */ #define REGTYPE_ENTRY (0x0010) #define REGTYPE_ENTRY_STRING_UTF (REGTYPE_ENTRY + 1) #define REGTYPE_ENTRY_INT32_ARRAY (REGTYPE_ENTRY + 2) #define REGTYPE_ENTRY_BYTES (REGTYPE_ENTRY + 3) #define REGTYPE_ENTRY_FILE (REGTYPE_ENTRY + 4) #define REG_DELETE_LIST_KEY "Mozilla/XPInstall/Delete List" #define REG_REPLACE_LIST_KEY "Mozilla/XPInstall/Replace List" #define REG_UNINSTALL_DIR "Mozilla/XPInstall/Uninstall/" #define REG_REPLACE_SRCFILE "ReplacementFile" #define REG_REPLACE_DESTFILE "DestinationFile" #define UNINSTALL_NAV_STR "_" #define UNIX_GLOBAL_FLAG "MOZILLA_SHARED_REGISTRY" /* Platform-dependent declspec for library interface */ #if defined(XP_WIN) #if defined(WIN32) #if defined (STANDALONE_REGISTRY) #define VR_INTERFACE(type) __declspec(dllexport) type __cdecl #else #define VR_INTERFACE(type) __declspec(dllexport) type __stdcall #endif #else #define VR_INTERFACE(type) type _far _pascal _export #endif #elif defined XP_MAC #define VR_INTERFACE(__x) __declspec(export) __x #elif defined (HAVE_VISIBILITY_ATTRIBUTE) #define VR_INTERFACE(type) __attribute__ ((visibility ("default"))) type #else #define VR_INTERFACE(type) type #endif PR_BEGIN_EXTERN_C /* --------------------------------------------------------------------- * Registry API -- General * --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- * NR_RegSetBufferSize - Sets the file buffer size * * Parameters: * hReg - handle to opened registry * bufsize - size of the new buffer * * Output: * --------------------------------------------------------------------- * returns the size of the buffer or -1 for err */ VR_INTERFACE(int) NR_RegSetBufferSize( HREG hReg, /* handle to opened registry */ int bufsize ); /* --------------------------------------------------------------------- * NR_RegOpen - Open a netscape XP registry * * Parameters: * filename - registry file to open. NULL or "" opens the standard * local registry. * hReg - OUT: handle to opened registry * * Output: * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegOpen( const char *filename, /* reg. file to open (NULL == standard registry) */ HREG *hReg /* OUT: handle to opened registry */ ); /* --------------------------------------------------------------------- * NR_RegClose - Close a netscape XP registry * * Parameters: * hReg - handle of open registry to be closed. * * After calling this routine the handle is no longer valid * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegClose( HREG hReg /* handle of open registry to close */ ); /* --------------------------------------------------------------------- * NR_RegFlush - Manually flush data in a netscape XP registry * * Parameters: * hReg - handle of open registry to be flushed. * * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegFlush( HREG hReg /* handle of open registry to flush */ ); /* --------------------------------------------------------------------- * NR_RegIsWritable - Check read/write status of open registry * * Parameters: * hReg - handle of open registry to query * Returns: * REGERR_OK if writable, REGERR_READONLY if not, possibly * other errors for an invalid hReg * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegIsWritable( HREG hReg /* handle of open registry to query */ ); VR_INTERFACE(REGERR) NR_RegPack( HREG hReg, /* handle of open registry to pack */ void *userData, nr_RegPackCallbackFunc fn ); /* --------------------------------------------------------------------- * NR_RegSetUsername - Set the current username * * If the current user profile name is not set then trying to use * HKEY_CURRENT_USER will result in an error. * * Parameters: * name - name of the current user * * Output: * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegSetUsername( const char *name /* name of current user */ ); /* --------------------------------------------------------------------- * NR_RegGetUniqueName * * Returns a unique name that can be used for anonymous key/value names * * Parameters: * hReg - handle of open registry * outbuf - where to put the string * buflen - how big the buffer is * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegGetUniqueName( HREG hReg, /* handle of open registry */ char* outbuf, /* buffer to hold key name */ uint32 buflen /* size of buffer */ ); /* --------------------------------------------------------------------- * DO NOT USE -- Will be removed * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegGetUsername( char **name /* on return, an alloc'ed copy of the current user name */ ); /* --------------------------------------------------------------------- * Registry API -- Key Management functions * --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- * NR_RegAddKey - Add a key node to the registry * * Can also be used to find an existing node for convenience. * * Parameters: * hReg - handle of open registry * key - registry key obtained from NR_RegGetKey(), * or one of the standard top-level keys * path - relative path of key to be added. Intermediate * nodes will be added if necessary. * newkey - If not null returns RKEY of new or found node * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegAddKey( HREG hReg, /* handle of open registry */ RKEY key, /* root key */ char *path, /* relative path of subkey to add */ RKEY *newKey /* if not null returns newly created key */ ); /* --------------------------------------------------------------------- * NR_RegAddKeyRaw - Add a key node to the registry * * This routine is different from NR_RegAddKey() in that it takes * a keyname rather than a path. * * Parameters: * hReg - handle of open registry * key - registry key obtained from NR_RegGetKey(), * or one of the standard top-level keys * keyname - name of key to be added. No parsing of this * name happens. * newkey - if not null the RKEY of the new key is returned * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegAddKeyRaw( HREG hReg, /* handle of open registry */ RKEY key, /* root key */ char *keyname, /* name of key to add */ RKEY *newKey /* if not null returns newly created key */ ); /* --------------------------------------------------------------------- * NR_RegDeleteKey - Delete the specified key * * Note that delete simply orphans blocks and makes no attempt * to reclaim space in the file. Use NR_RegPack() * * Cannot be used to delete keys with child keys * * Parameters: * hReg - handle of open registry * key - starting node RKEY, typically one of the standard ones. * path - relative path of key to delete * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegDeleteKey( HREG hReg, /* handle of open registry */ RKEY key, /* root key */ char *path /* relative path of subkey to delete */ ); /* --------------------------------------------------------------------- * NR_RegDeleteKeyRaw - Delete the specified raw key * * Note that delete simply orphans blocks and makes no attempt * to reclaim space in the file. Use NR_RegPack() * * Parameters: * hReg - handle of open registry * key - RKEY or parent to the raw key you wish to delete * keyname - name of child key to delete * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegDeleteKeyRaw( HREG hReg, /* handle of open registry */ RKEY key, /* root key */ char *keyname /* name subkey to delete */ ); /* --------------------------------------------------------------------- * NR_RegGetKey - Get the RKEY value of a node from its path * * Parameters: * hReg - handle of open registry * key - starting node RKEY, typically one of the standard ones. * path - relative path of key to find. (a blank path just gives you * the starting key--useful for verification, VersionRegistry) * result - if successful the RKEY of the specified sub-key * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegGetKey( HREG hReg, /* handle of open registry */ RKEY key, /* root key */ const char *path, /* relative path of subkey to find */ RKEY *result /* returns RKEY of specified sub-key */ ); /* --------------------------------------------------------------------- * NR_RegGetKeyRaw - Get the RKEY value of a node from its keyname * * Parameters: * hReg - handle of open registry * key - starting node RKEY, typically one of the standard ones. * keyname - keyname of key to find. (a blank keyname just gives you * the starting key--useful for verification, VersionRegistry) * result - if successful the RKEY of the specified sub-key * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegGetKeyRaw( HREG hReg, /* handle of open registry */ RKEY key, /* root key */ char *keyname, /* name of key to get */ RKEY *result /* returns RKEY of specified sub-key */ ); /* --------------------------------------------------------------------- * NR_RegEnumSubkeys - Enumerate the subkey names for the specified key * * Returns REGERR_NOMORE at end of enumeration. * * Parameters: * hReg - handle of open registry * key - RKEY of key to enumerate--obtain with NR_RegGetKey() * eState - enumerations state, must contain NULL to start * buffer - location to store subkey names. Once an enumeration * is started user must not modify contents since values * are built using the previous contents. * bufsize - size of buffer for names * style - 0 returns direct child keys only, REGENUM_DESCEND * returns entire sub-tree * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegEnumSubkeys( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ REGENUM *state, /* enum state, must be NULL to start */ char *buffer, /* buffer for entry names */ uint32 bufsize, /* size of buffer */ uint32 style /* 0: children only; REGENUM_DESCEND: sub-tree */ ); /* --------------------------------------------------------------------- * Registry API -- Entry Management functions * --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- * NR_RegGetEntryInfo - Get some basic info about the entry data * * Parameters: * hReg - handle of open registry * key - RKEY of key that contains entry--obtain with NR_RegGetKey() * name - name of entry * info - return: Entry info object * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegGetEntryInfo( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ char *name, /* entry name */ REGINFO *info /* returned entry info */ ); /* --------------------------------------------------------------------- * NR_RegGetEntryString - Get the UTF string value associated with the * named entry of the specified key. * * Parameters: * hReg - handle of open registry * key - RKEY of key that contains entry--obtain with NR_RegGetKey() * name - name of entry * buffer - destination for string * bufsize - size of buffer * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegGetEntryString( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ char *name, /* entry name */ char *buffer, /* buffer to hold value (UTF String) */ uint32 bufsize /* length of buffer */ ); /* --------------------------------------------------------------------- * NR_RegGetEntry - Get the value data associated with the * named entry of the specified key. * * Parameters: * hReg - handle of open registry * key - RKEY of key that contains entry--obtain with NR_RegGetKey() * name - name of entry * buffer - destination for data * size - in: size of buffer * out: size of actual data (incl. \0 term. for strings) * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegGetEntry( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ char *name, /* entry name */ void *buffer, /* buffer to hold value */ uint32 *size /* in:length of buffer */ ); /* out: data length, >>includes<< null terminator*/ /* --------------------------------------------------------------------- * NR_RegSetEntryString - Store a UTF-8 string value associated with the * named entry of the specified key. Used for * both creation and update. * * Parameters: * hReg - handle of open registry * key - RKEY of key that contains entry--obtain with NR_RegGetKey() * name - name of entry * buffer - UTF-8 String to store * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegSetEntryString( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ char *name, /* entry name */ char *buffer /* UTF String value */ ); /* --------------------------------------------------------------------- * NR_RegSetEntry - Store value data associated with the named entry * of the specified key. Used for both creation and update. * * Parameters: * hReg - handle of open registry * key - RKEY of key that contains entry--obtain with NR_RegGetKey() * name - name of entry * type - type of data to be stored * buffer - data to store * size - length of data to store in bytes * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegSetEntry( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ char *name, /* entry name */ uint16 type, /* type of value data */ void *buffer, /* data buffer */ uint32 size /* data length in bytes; incl. null term for strings */ ); /* --------------------------------------------------------------------- * NR_RegDeleteEntry - Delete the named entry * * Parameters: * hReg - handle of open registry * key - RKEY of key that contains entry--obtain with NR_RegGetKey() * name - name of entry * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegDeleteEntry( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ char *name /* value name */ ); /* --------------------------------------------------------------------- * NR_RegEnumEntries - Enumerate the entry names for the specified key * * Returns REGERR_NOMORE at end of enumeration. * * Parameters: * hReg - handle of open registry * key - RKEY of key that contains entry--obtain with NR_RegGetKey() * eState - enumerations state, must contain NULL to start * buffer - location to store entry names * bufsize - size of buffer for names * --------------------------------------------------------------------- */ VR_INTERFACE(REGERR) NR_RegEnumEntries( HREG hReg, /* handle of open registry */ RKEY key, /* containing key */ REGENUM *state, /* enum state, must be NULL to start */ char *buffer, /* buffer for entry names */ uint32 bufsize, /* size of buffer */ REGINFO *info /* optional; returns info about entry */ ); VR_INTERFACE(void) NR_ShutdownRegistry(void); VR_INTERFACE(REGERR) NR_StartupRegistry(void); PR_END_EXTERN_C #endif /* _NSREG_H_ */ /* EOF: NSReg.h */