Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/utils/regtool.cc')
-rw-r--r--winsup/utils/regtool.cc524
1 files changed, 0 insertions, 524 deletions
diff --git a/winsup/utils/regtool.cc b/winsup/utils/regtool.cc
deleted file mode 100644
index 8ba9f8901..000000000
--- a/winsup/utils/regtool.cc
+++ /dev/null
@@ -1,524 +0,0 @@
-/* regtool.cc
-
- Copyright 2000 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <windows.h>
-
-enum {
- KT_AUTO, KT_INT, KT_STRING, KT_EXPAND, KT_MULTI
-} key_type = KT_AUTO;
-
-int verbose = 0;
-int quiet = 0;
-char **argv;
-
-HKEY key;
-char *value;
-
-const char *usage_msg[] =
-{
- "Regtool Copyright (c) 2000 Red Hat Inc",
- " regtool -h - print this message",
- " regtool [-v] list [key] - list subkeys and values",
- " regtool [-v] add [key\\subkey] - add new subkey",
- " regtool [-v] remove [key] - remove key",
- " regtool [-v|-q] check [key] - exit 0 if key exists, 1 if not",
- " regtool [-i|-s|-e|-m] set [key\\value] [data ...] - set value",
- " -i=integer -s=string -e=expand-string -m=multi-string",
- " regtool [-v] unset [key\\value] - removes value from key",
- " regtool [-q] get [key\\value] - prints value to stdout",
- " -q=quiet, no error msg, just return nonzero exit if key/value missing",
- " keys are like \\prefix\\key\\key\\key\\value, where prefix is any of:",
- " root HKCR HKEY_CLASSES_ROOT",
- " config HKCC HKEY_CURRENT_CONFIG",
- " user HKCU HKEY_CURRENT_USER",
- " machine HKLM HKEY_LOCAL_MACHINE",
- " users HKU HKEY_USERS",
- " example: \\user\\software\\Microsoft\\Clock\\iFormat",
- 0
-};
-
-void
-usage(void)
-{
- int i;
- for (i=0; usage_msg[i]; i++)
- fprintf(stderr, "%s\n", usage_msg[i]);
- exit(1);
-}
-
-void
-Fail(DWORD rv)
-{
- char *buf;
- if (!quiet)
- {
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
- | FORMAT_MESSAGE_FROM_SYSTEM,
- 0, rv, 0, (CHAR *)&buf, 0, 0);
- fprintf(stderr, "Error: %s\n", buf);
- }
- exit(1);
-}
-
-struct {
- const char *string;
- HKEY key;
-} wkprefixes[] = {
- { "root", HKEY_CLASSES_ROOT },
- { "HKCR", HKEY_CLASSES_ROOT },
- { "HKEY_CLASSES_ROOT", HKEY_CLASSES_ROOT },
- { "config", HKEY_CURRENT_CONFIG },
- { "HKCC", HKEY_CURRENT_CONFIG },
- { "HKEY_CURRENT_CONFIG", HKEY_CURRENT_CONFIG },
- { "user", HKEY_CURRENT_USER },
- { "HKCU", HKEY_CURRENT_USER },
- { "HKEY_CURRENT_USER", HKEY_CURRENT_USER },
- { "machine", HKEY_LOCAL_MACHINE },
- { "HKLM", HKEY_LOCAL_MACHINE },
- { "HKEY_LOCAL_MACHINE", HKEY_LOCAL_MACHINE },
- { "users", HKEY_USERS },
- { "HKU", HKEY_USERS },
- { "HKEY_USERS", HKEY_USERS },
- { 0, 0 }
-};
-
-void translate(char *key)
-{
-#define isodigit(c) (strchr("01234567", c))
-#define tooct(c) ((c)-'0')
-#define tohex(c) (strchr(_hs,tolower(c))-_hs)
- static char _hs[] = "0123456789abcdef";
-
- char *d = key;
- char *s = key;
- char c;
-
- while (*s)
- {
- if (*s == '\\')
- switch (*++s)
- {
- case 'a':
- *d++ = '\007';
- break;
- case 'b':
- *d++ = '\b';
- break;
- case 'e':
- *d++ = '\033';
- break;
- case 'f':
- *d++ = '\f';
- break;
- case 'n':
- *d++ = '\n';
- break;
- case 'r':
- *d++ = '\r';
- break;
- case 't':
- *d++ = '\t';
- break;
- case 'v':
- *d++ = '\v';
- break;
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- c = tooct(*s);
- if (isodigit(s[1]))
- {
- c = (c << 3) | tooct(*++s);
- if (isodigit(s[1]))
- c = (c << 3) | tooct(*++s);
- }
- *d++ = c;
- break;
- case 'x':
- if (isxdigit(s[1]))
- {
- c = tohex(*++s);
- if (isxdigit(s[1]))
- c = (c << 4) | tohex(*++s);
- }
- *d++ = c;
- break;
- default: /* before non-special char: just add the char */
- *d++ = *s;
- break;
- }
- else if (*s == '/')
- *d++ = '\\';
- else
- *d++ = *s;
- ++s;
- }
- *d = '\0';
-}
-
-void
-find_key(int howmanyparts, REGSAM access)
-{
- char *n = argv[0], *e, c;
- int i;
- if (*n == '/')
- translate(n);
- while (*n == '\\')
- n++;
- for (e=n; *e && *e != '\\'; e++);
- c = *e;
- *e = 0;
- for (i=0; wkprefixes[i].string; i++)
- if (strcmp(wkprefixes[i].string, n) == 0)
- break;
- if (!wkprefixes[i].string)
- {
- fprintf(stderr, "Unknown key prefix. Valid prefixes are:\n");
- for (i=0; wkprefixes[i].string; i++)
- fprintf(stderr, "\t%s\n", wkprefixes[i].string);
- exit(1);
- }
-
- n = e;
- *e = c;
- while (*n && *n == '\\')
- n++;
- e = n+strlen(n);
- if (howmanyparts > 1)
- {
- while (n < e && *e != '\\')
- e--;
- if (*e != '\\')
- {
- fprintf(stderr, "Invalid key\n");
- exit(1);
- }
- *e = 0;
- value = e+1;
- }
- if (n[0] == 0)
- {
- key = wkprefixes[i].key;
- return;
- }
- int rv = RegOpenKeyEx(wkprefixes[i].key, n, 0, access, &key);
- if (rv != ERROR_SUCCESS)
- Fail(rv);
- //printf("key `%s' value `%s'\n", n, value);
-}
-
-
-int
-cmd_list()
-{
- DWORD num_subkeys, maxsubkeylen, num_values, maxvalnamelen, maxvaluelen;
- DWORD maxclasslen;
- char *subkey_name, *value_name, *class_name;
- unsigned char *value_data, *vd;
- DWORD i, j, m, n, t;
- int v;
-
- find_key(1, KEY_READ);
- RegQueryInfoKey(key, 0, 0, 0, &num_subkeys, &maxsubkeylen, &maxclasslen,
- &num_values, &maxvalnamelen, &maxvaluelen, 0, 0);
-
- subkey_name = (char *)malloc(maxsubkeylen+1);
- class_name = (char *)malloc(maxclasslen+1);
- value_name = (char *)malloc(maxvalnamelen+1);
- value_data = (unsigned char *)malloc(maxvaluelen+1);
-
- for (i=0; i<num_subkeys; i++)
- {
- m = maxsubkeylen+1;
- n = maxclasslen+1;
- RegEnumKeyEx(key, i, subkey_name, &m, 0, class_name, &n, 0);
- if (verbose)
- printf("%s\\ (%s)\n", subkey_name, class_name);
- else
- printf("%s\n", subkey_name);
- }
-
- for (i=0; i<num_values; i++)
- {
- m = maxvalnamelen+1;
- n = maxvaluelen+1;
- RegEnumValue(key, i, value_name, &m, 0, &t, (BYTE *)value_data, &n);
- if (!verbose)
- printf("%s\n", value_name);
- else
- {
- printf("%s = ", value_name);
- switch (t)
- {
- case REG_BINARY:
- for (j=0; j<8 && j<n; j++)
- printf("%02x ", value_data[j]);
- printf("\n");
- break;
- case REG_DWORD:
- printf("0x%08lx (%lu)\n", *(DWORD *)value_data,
- *(DWORD *)value_data);
- break;
- case REG_DWORD_BIG_ENDIAN:
- v = ((value_data[0] << 24)
- | (value_data[1] << 16)
- | (value_data[2] << 8)
- | (value_data[3]));
- printf("0x%08x (%d)\n", v, v);
- break;
- case REG_EXPAND_SZ:
- case REG_SZ:
- printf("\"%s\"\n", value_data);
- break;
- case REG_MULTI_SZ:
- vd = value_data;
- while (vd && *vd)
- {
- printf("\"%s\"", vd);
- vd = vd+strlen((const char *)vd) + 1;
- if (*vd)
- printf(", ");
- }
- printf("\n");
- break;
- default:
- printf("? (type %d)\n", (int)t);
- }
- }
- }
- return 0;
-}
-
-int
-cmd_add()
-{
- find_key(2, KEY_ALL_ACCESS);
- HKEY newkey;
- DWORD newtype;
- int rv = RegCreateKeyEx(key, value, 0, (char *)"", REG_OPTION_NON_VOLATILE,
- KEY_ALL_ACCESS, 0, &newkey, &newtype);
- if (rv != ERROR_SUCCESS)
- Fail(rv);
-
- if (verbose)
- {
- if (newtype == REG_OPENED_EXISTING_KEY)
- printf("Key %s already exists\n", value);
- else
- printf("Key %s created\n", value);
- }
- return 0;
-}
-
-int
-cmd_remove()
-{
- find_key(2, KEY_ALL_ACCESS);
- DWORD rv = RegDeleteKey(key, value);
- if (rv != ERROR_SUCCESS)
- Fail(rv);
- if (verbose)
- printf("subkey %s deleted\n", value);
- return 0;
-}
-
-int
-cmd_check()
-{
- find_key(1, KEY_READ);
- if (verbose)
- printf("key %s exists\n", argv[0]);
- return 0;
-}
-
-int
-cmd_set()
-{
- int i, n;
- DWORD v, rv;
- char *a = argv[1], *data;
- find_key(2, KEY_ALL_ACCESS);
-
- if (key_type == KT_AUTO)
- {
- char *e;
- strtoul(a, &e, 0);
- if (a[0] == '%')
- key_type = KT_EXPAND;
- else if (a[0] && !*e)
- key_type = KT_INT;
- else if (argv[2])
- key_type = KT_MULTI;
- else
- key_type = KT_STRING;
- }
-
- switch (key_type)
- {
- case KT_INT:
- v = strtoul(a, 0, 0);
- rv = RegSetValueEx(key, value, 0, REG_DWORD, (const BYTE *)&v, sizeof(v));
- break;
- case KT_STRING:
- rv = RegSetValueEx(key, value, 0, REG_SZ, (const BYTE *)a, strlen(a));
- break;
- case KT_EXPAND:
- rv = RegSetValueEx(key, value, 0, REG_EXPAND_SZ, (const BYTE *)a, strlen(a));
- break;
- case KT_MULTI:
- for (i=1, n=1; argv[i]; i++)
- n += strlen(argv[i])+1;
- data = (char *)malloc(n);
- for (i=1, n=0; argv[i]; i++)
- {
- strcpy(data+n, argv[i]);
- n += strlen(argv[i])+1;
- }
- data[n] = 0;
- rv = RegSetValueEx(key, value, 0, REG_MULTI_SZ, (const BYTE *)data, n+1);
- break;
- case KT_AUTO:
- break;
- }
-
- if (rv != ERROR_SUCCESS)
- Fail(rv);
-
- return 0;
-}
-
-int
-cmd_unset()
-{
- find_key(2, KEY_ALL_ACCESS);
- DWORD rv = RegDeleteValue(key, value);
- if (rv != ERROR_SUCCESS)
- Fail(rv);
- if (verbose)
- printf("value %s deleted\n", value);
- return 0;
-}
-
-int
-cmd_get()
-{
- find_key(2, KEY_READ);
- DWORD vtype, dsize, rv;
- char *data, *vd;
- rv = RegQueryValueEx(key, value, 0, &vtype, 0, &dsize);
- if (rv != ERROR_SUCCESS)
- Fail(rv);
- dsize++;
- data = (char *)malloc(dsize);
- rv = RegQueryValueEx(key, value, 0, &vtype, (BYTE *)data, &dsize);
- if (rv != ERROR_SUCCESS)
- Fail(rv);
- switch (vtype)
- {
- case REG_BINARY:
- fwrite(data, dsize, 0, stdout);
- break;
- case REG_DWORD:
- printf("%lu\n", *(DWORD *)data);
- break;
- case REG_SZ:
- printf("%s\n", data);
- break;
- case REG_EXPAND_SZ:
- if (key_type == KT_EXPAND) // hack
- {
- char *buf;
- DWORD bufsize;
- bufsize = ExpandEnvironmentStrings(data, 0, 0);
- buf = (char *)malloc(bufsize+1);
- ExpandEnvironmentStrings(data, buf, bufsize+1);
- data = buf;
- }
- printf("%s\n", data);
- break;
- case REG_MULTI_SZ:
- vd = data;
- while (vd && *vd)
- {
- printf("%s\n", vd);
- vd = vd+strlen((const char *)vd) + 1;
- }
- break;
- }
- return 0;
-}
-
-struct {
- const char *name;
- int (*func)();
-} commands[] = {
- { "list", cmd_list },
- { "add", cmd_add },
- { "remove", cmd_remove },
- { "check", cmd_check },
- { "set", cmd_set },
- { "unset", cmd_unset },
- { "get", cmd_get },
- { 0, 0 }
-};
-
-int
-main(int argc, char **_argv)
-{
- while (1)
- {
- int g = getopt (argc, _argv, "hvqisem");
- if (g == -1)
- break;
- switch (g)
- {
- case 'v':
- verbose ++;
- break;
- case 'q':
- quiet ++;
- break;
-
- case 'i':
- key_type = KT_INT;
- break;
- case 's':
- key_type = KT_STRING;
- break;
- case 'e':
- key_type = KT_EXPAND;
- break;
- case 'm':
- key_type = KT_MULTI;
- break;
-
- case '?':
- case 'h':
- usage();
- }
- }
- if (_argv[optind] == NULL)
- usage();
-
- argv = _argv+optind;
- int i;
- for (i=0; commands[i].name; i++)
- if (strcmp(commands[i].name, argv[0]) == 0)
- {
- argv++;
- return commands[i].func();
- }
- usage();
-
- return 0;
-}