1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: dwreg.c 9043 2008-08-28 22:48:19Z giles $ */
15
/* MS Windows registry values */
19
#include <stdlib.h> /* for getenv */
21
#include "gscdefs.h" /* for gs_productfamily and gs_revision */
23
/* We store registry named values under the key
24
* "Software\\GPL Ghostscript"
25
* where "GPL Ghostscript" is actually gs_productfamily.
26
* Either HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER will be used.
29
win_registry_key(char *buf, int len)
31
const char *software = "Software";
32
if (strlen(software) + 1 + strlen(gs_productfamily) >= len)
35
strcpy(buf, software);
37
strcat(buf, gs_productfamily);
42
* Get a named registry value from HKCU.
43
* name, ptr, plen and return values are the same as in gp_getenv();
46
win_get_reg_value(const char *name, char *ptr, int *plen)
49
DWORD cbData, keytype;
52
BYTE *bptr = (BYTE *)ptr;
55
win_registry_key(key, sizeof(key));
56
if (RegOpenKeyEx(HKEY_CURRENT_USER, key, 0, KEY_READ, &hkey)
60
if (bptr == (char *)NULL)
61
bptr = &b; /* Registry API won't return ERROR_MORE_DATA */
63
rc = RegQueryValueEx(hkey, (char *)name, 0, &keytype, bptr, &cbData);
65
if (rc == ERROR_SUCCESS) {
67
return 0; /* found environment variable and copied it */
68
} else if (rc == ERROR_MORE_DATA) {
69
/* buffer wasn't large enough */
74
return 1; /* not found */
78
* Set a named registry value under HKCU.
79
* name = name of named value
80
* str = value of named value
81
* Returns 0 on success.
84
win_set_reg_value(const char *name, const char *value)
91
win_registry_key(key, sizeof(key));
92
rc = RegOpenKeyEx(HKEY_CURRENT_USER, key, 0, KEY_WRITE, &hkey);
93
if (rc != ERROR_SUCCESS)
94
rc = RegCreateKeyEx(HKEY_CURRENT_USER, key, 0, "", 0,
95
KEY_ALL_ACCESS, NULL, &hkey, &dwDisposition);
96
if (rc == ERROR_SUCCESS) {
97
rc = RegSetValueEx(hkey, name, 0, REG_SZ,
98
(CONST BYTE *)value, strlen(value)+1);
102
return rc == ERROR_SUCCESS ? 0 : -1;