summaryrefslogtreecommitdiff
path: root/nameblocker.sp
diff options
context:
space:
mode:
Diffstat (limited to 'nameblocker.sp')
-rw-r--r--nameblocker.sp52
1 files changed, 39 insertions, 13 deletions
diff --git a/nameblocker.sp b/nameblocker.sp
index 9611efa..af544a1 100644
--- a/nameblocker.sp
+++ b/nameblocker.sp
@@ -366,7 +366,7 @@ int __modPattern__replace(int index, char[] pattern, int patternlen, int client)
366 char oldpattern[PATTERN_MAX_LEN]; 366 char oldpattern[PATTERN_MAX_LEN];
367 patternlist.GetString(index, oldpattern, sizeof(oldpattern), ByteCountToCells(PATTERN_MAX_LEN)); 367 patternlist.GetString(index, oldpattern, sizeof(oldpattern), ByteCountToCells(PATTERN_MAX_LEN));
368 368
369 char steamid64[STEAMID64LENGTH]; 369 char steamid64[STEAMID64LENGTH + 1];
370 if(GetClientAuthId(client, AuthId_SteamID64, steamid64, sizeof(steamid64))) {} // TODO: Error handling 370 if(GetClientAuthId(client, AuthId_SteamID64, steamid64, sizeof(steamid64))) {} // TODO: Error handling
371 371
372 SQL_LockDatabase(db); 372 SQL_LockDatabase(db);
@@ -397,23 +397,58 @@ int modPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=-1, i
397} 397}
398 398
399int aModPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=0) { 399int aModPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=0) {
400 LogError("aModPattern not implemented"); return -1;
401
402 if(mode <= MM_UNDEF || mode >= MM_TOOBIG || index < 0 || index > patternlist.Length) return -1; 400 if(mode <= MM_UNDEF || mode >= MM_TOOBIG || index < 0 || index > patternlist.Length) return -1;
403 401
402 Regex res;
404 if(mode > MM_DELETE) { 403 if(mode > MM_DELETE) {
405 if(IsNullString(pattern) || patternlen < 0 || patternlen > PATTERN_MAX_LEN) return -1; 404 if(IsNullString(pattern) || patternlen < 0 || patternlen > PATTERN_MAX_LEN) return -1;
406 405
407 char errstr[512]; RegexError reerr; 406 char errstr[512]; RegexError reerr;
408 Regex res = CompileRegex(pattern, gcvarRegexCompFlags.IntValue, errstr, sizeof(errstr), reerr); 407 res = CompileRegex(pattern, gcvarRegexCompFlags.IntValue, errstr, sizeof(errstr), reerr);
409 if(res == null) { 408 if(res == null) {
410 LogError("Error: Could not compile regex pattern \"%s\": %s (%d)", pattern, errstr, reerr); 409 LogError("Error: Could not compile regex pattern \"%s\": %s (%d)", pattern, errstr, reerr);
411 return -1; 410 return -1;
412 } 411 }
413 } 412 }
414 413
414 switch(mode) {
415 case MM_DELETE: {
416 regexlist.Erase(index);
417 patternlist.Erase(index);
418
419 }
420
421 case MM_INSERT: {
422 if(index == regexlist.Length) {
423 regexlist.Push(res);
424 patternlist.Push(pattern);
425 return 0;
426 }
427
428 regexlist.ShiftUp(index);
429 patternlist.ShiftUp(index);
430 regexlist.Set(index, res);
431 patternlist.Set(index, pattern);
432 }
433
434 case MM_REPLACE: {
435 if(index == regexlist.Length) {
436 regexlist.Push(res);
437 patternlist.Push(pattern);
438 return 0;
439 }
440
441 CloseHandle(view_as<Handle>(regexlist.Get(index, ByteCountToCells(HANDLE_SIZE))));
442 patternlist.Set(index, pattern, ByteCountToCells(PATTERN_MAX_LEN));
443 regexlist.Set(index, res, ByteCountToCells(HANDLE_SIZE));
444 }
415 445
416 446
447 default: {
448 logAndFail("Got impossible state");
449 }
450 }
451
417 return 0; 452 return 0;
418} 453}
419 454
@@ -435,15 +470,6 @@ int aModPattern(MOD_MODE mode, int index, char[] pattern="", int patternlen=0) {
435// return 0; 470// return 0;
436// } 471// }
437 472
438// int aRemovePattern(int index) {
439// if(index < 0 || index >= regexlist.Length) return -1;
440
441// regexlist.Erase(index);
442// patternlist.Erase(index);
443
444// return 0;
445// }
446
447 473
448 474
449// Check's a user's name against the regex list. Returns -1 on error, 0 if skipped, 1 on hit 475// Check's a user's name against the regex list. Returns -1 on error, 0 if skipped, 1 on hit