INT_PTR registerToken(WPARAM wParam, LPARAM lParam) { DWORD hash; int idx; TOKENREGISTEREX *newVr = (TOKENREGISTEREX*)lParam; if (newVr == NULL || newVr->szTokenString == NULL || newVr->cbSize <= 0) return -1; if (newVr->flags & TRF_TCHAR) { deRegisterToken(newVr->tszTokenString); hash = NameHashFunction(newVr->tszTokenString); } else { WCHAR *wtoken = mir_a2t(newVr->szTokenString); deRegisterToken(wtoken); hash = NameHashFunction(wtoken); mir_free(wtoken); } TokenRegisterEntry *tre = (TokenRegisterEntry*)mir_alloc(sizeof(TokenRegisterEntry)); if (tre == NULL) return -1; memcpy(&tre->tr, newVr, newVr->cbSize); tre->nameHash = hash; if (!mir_tstrcmp(newVr->tszTokenString, _T("alias"))) log_debugA("alias"); if (!(newVr->flags & TRF_PARSEFUNC) && newVr->szService != NULL) tre->tr.szService = mir_strdup(newVr->szService); if (newVr->flags & TRF_TCHAR) tre->tr.tszTokenString = mir_tstrdup(newVr->tszTokenString); else tre->tr.tszTokenString = mir_a2t(newVr->szTokenString); if (newVr->szHelpText != NULL) tre->tr.szHelpText = mir_strdup(newVr->szHelpText); if ((newVr->flags & TRF_CLEANUP) && !(newVr->flags & TRF_CLEANUPFUNC) && newVr->szCleanupService != NULL) tre->tr.szCleanupService = mir_strdup(newVr->szCleanupService); mir_cslock lck(csRegister); List_GetIndex((SortedList*)&tokens, tre, &idx); List_Insert((SortedList*)&tokens, tre, idx); return 0; }
static TCHAR *parseAddAlias(ARGUMENTSINFO *ai) { int res; char *szHelp, *szArgsA; if (ai->argc != 3) return NULL; TCHAR *cur = ai->targv[1]; while (isValidTokenChar(*cur)) cur++; ptrT alias(mir_tstrndup(ai->targv[1], cur - ai->targv[1])); int argc; TCHAR **argv; getArguments(cur, &argv, &argc); deRegisterToken(alias); addToAliasRegister(alias, argc, argv, ai->targv[2]); TCHAR *szArgs = NULL; for (int i = 0; i < argc; i++) { if (i == 0) szArgs = (TCHAR*)mir_calloc((_tcslen(argv[i]) + 2)*sizeof(TCHAR)); else szArgs = (TCHAR*)mir_realloc(szArgs, (_tcslen(szArgs) + _tcslen(argv[i]) + 2)*sizeof(TCHAR)); _tcscat(szArgs, argv[i]); if (i != argc - 1) _tcscat(szArgs, _T(",")); } if (szArgs != NULL && argc > 0) { szArgsA = mir_t2a(szArgs); size_t size = 32 + strlen(szArgsA); szHelp = (char *)mir_alloc(size); memset(szHelp, '\0', 32 + strlen(szArgsA)); mir_snprintf(szHelp, size, LPGEN("Alias")"\t(%s)\t"LPGEN("user defined"), szArgsA); res = registerIntToken(alias, parseTranslateAlias, TRF_FUNCTION | TRF_UNPARSEDARGS, szHelp); mir_free(szArgsA); } else { szHelp = (char*)mir_alloc(32); memset(szHelp, '\0', 32); mir_snprintf(szHelp, 32, LPGEN("Alias")"\t\t"LPGEN("user defined")); res = registerIntToken(alias, parseTranslateAlias, TRF_FIELD | TRF_UNPARSEDARGS, szHelp); } mir_free(szArgs); mir_free(szHelp); return (res == 0) ? mir_tstrdup(_T("")) : NULL; }