winevt_c 0.7.4 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/winevt/winevt_c.h +11 -1
- data/ext/winevt/winevt_locale.c +68 -0
- data/ext/winevt/winevt_query.c +54 -3
- data/ext/winevt/winevt_subscribe.c +56 -3
- data/ext/winevt/winevt_utils.cpp +2 -2
- data/lib/winevt/version.rb +1 -1
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1971f2d9fdcbd76e480acada73e61689c28eda9499c3c4e19170a8465d62cfe4
         | 
| 4 | 
            +
              data.tar.gz: a54692008698865f129c84ac206cd5bffc08daa49fee5012d34679d99fdc6080
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a0091ec0d64ba252b39dc927504049c88b648f5c4bec0ce43dd4d00967bf8c0475e872da2286f7e757a9f16889209373c5e30998c534704105a2d973671a49d7
         | 
| 7 | 
            +
              data.tar.gz: 65480a5c5d43e484d5755ed1f1935f41bc26c507769563f6c5a181eabf986cf7d7bad376da798150f1215063cc226477efac6f6e3d4007a96e213bbeba1ae874
         | 
    
        data/ext/winevt/winevt_c.h
    CHANGED
    
    | @@ -22,6 +22,11 @@ | |
| 22 22 | 
             
            #define EventBookMark(object) ((struct WinevtBookmark*)DATA_PTR(object))
         | 
| 23 23 | 
             
            #define EventChannel(object) ((struct WinevtChannel*)DATA_PTR(object))
         | 
| 24 24 |  | 
| 25 | 
            +
            typedef struct {
         | 
| 26 | 
            +
                LANGID langID;
         | 
| 27 | 
            +
                CHAR* langCode;
         | 
| 28 | 
            +
            } LocaleInfo;
         | 
| 29 | 
            +
             | 
| 25 30 | 
             
            #ifdef __cplusplus
         | 
| 26 31 | 
             
            extern "C" {
         | 
| 27 32 | 
             
            #endif /* __cplusplus */
         | 
| @@ -32,9 +37,10 @@ VALUE wstr_to_rb_str(UINT cp, const WCHAR* wstr, int clen); | |
| 32 37 | 
             
            #endif /* __cplusplus */
         | 
| 33 38 | 
             
            void  raise_system_error(VALUE error, DWORD errorCode);
         | 
| 34 39 | 
             
            VALUE render_to_rb_str(EVT_HANDLE handle, DWORD flags);
         | 
| 35 | 
            -
            WCHAR* get_description(EVT_HANDLE handle);
         | 
| 40 | 
            +
            WCHAR* get_description(EVT_HANDLE handle, LANGID langID);
         | 
| 36 41 | 
             
            VALUE get_values(EVT_HANDLE handle);
         | 
| 37 42 | 
             
            VALUE render_system_event(EVT_HANDLE handle, BOOL preserve_qualifiers);
         | 
| 43 | 
            +
            LocaleInfo* get_locale_from_rb_str(VALUE rb_locale_str);
         | 
| 38 44 |  | 
| 39 45 | 
             
            #ifdef __cplusplus
         | 
| 40 46 | 
             
            }
         | 
| @@ -47,6 +53,8 @@ extern VALUE rb_cBookmark; | |
| 47 53 | 
             
            extern VALUE rb_cSubscribe;
         | 
| 48 54 | 
             
            extern VALUE rb_eWinevtQueryError;
         | 
| 49 55 |  | 
| 56 | 
            +
            extern LocaleInfo default_locale;
         | 
| 57 | 
            +
             | 
| 50 58 | 
             
            struct WinevtChannel
         | 
| 51 59 | 
             
            {
         | 
| 52 60 | 
             
              EVT_HANDLE channels;
         | 
| @@ -70,6 +78,7 @@ struct WinevtQuery | |
| 70 78 | 
             
              LONG timeout;
         | 
| 71 79 | 
             
              BOOL renderAsXML;
         | 
| 72 80 | 
             
              BOOL preserveQualifiers;
         | 
| 81 | 
            +
              LocaleInfo *localeInfo;
         | 
| 73 82 | 
             
            };
         | 
| 74 83 |  | 
| 75 84 | 
             
            #define SUBSCRIBE_ARRAY_SIZE 10
         | 
| @@ -89,6 +98,7 @@ struct WinevtSubscribe | |
| 89 98 | 
             
              DWORD currentRate;
         | 
| 90 99 | 
             
              BOOL renderAsXML;
         | 
| 91 100 | 
             
              BOOL preserveQualifiers;
         | 
| 101 | 
            +
              LocaleInfo* localeInfo;
         | 
| 92 102 | 
             
            };
         | 
| 93 103 |  | 
| 94 104 | 
             
            void Init_winevt_query(VALUE rb_cEventLog);
         | 
| @@ -0,0 +1,68 @@ | |
| 1 | 
            +
            #include <winevt_c.h>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            static LocaleInfo localeInfoTable [] = {
         | 
| 4 | 
            +
                { MAKELANGID(LANG_BULGARIAN,  SUBLANG_DEFAULT),              "bg_BG"},
         | 
| 5 | 
            +
                { MAKELANGID(LANG_CHINESE,    SUBLANG_CHINESE_SIMPLIFIED),   "zh_CN"},
         | 
| 6 | 
            +
                { MAKELANGID(LANG_CHINESE,    SUBLANG_CHINESE_TRADITIONAL),  "zh_TW"},
         | 
| 7 | 
            +
                { MAKELANGID(LANG_CHINESE,    SUBLANG_CHINESE_HONGKONG),     "zh_HK"},
         | 
| 8 | 
            +
                { MAKELANGID(LANG_CHINESE,    SUBLANG_CHINESE_SINGAPORE),    "zh_SG"},
         | 
| 9 | 
            +
                { MAKELANGID(LANG_CROATIAN,   SUBLANG_DEFAULT),              "hr_HR"},
         | 
| 10 | 
            +
                { MAKELANGID(LANG_CZECH,      SUBLANG_DEFAULT),              "cs_CZ"},
         | 
| 11 | 
            +
                { MAKELANGID(LANG_DANISH,     SUBLANG_DEFAULT),              "da_DK"},
         | 
| 12 | 
            +
                { MAKELANGID(LANG_DUTCH,      SUBLANG_DUTCH),                "nl_NL"},
         | 
| 13 | 
            +
                { MAKELANGID(LANG_DUTCH,      SUBLANG_DUTCH_BELGIAN),        "nl_BE"},
         | 
| 14 | 
            +
                { MAKELANGID(LANG_ENGLISH,    SUBLANG_DEFAULT),              "en_US"},
         | 
| 15 | 
            +
                { MAKELANGID(LANG_ENGLISH,    SUBLANG_ENGLISH_UK),           "en_GB"},
         | 
| 16 | 
            +
                { MAKELANGID(LANG_ENGLISH,    SUBLANG_ENGLISH_AUS),          "en_AU"},
         | 
| 17 | 
            +
                { MAKELANGID(LANG_ENGLISH,    SUBLANG_ENGLISH_CAN),          "en_CA"},
         | 
| 18 | 
            +
                { MAKELANGID(LANG_ENGLISH,    SUBLANG_ENGLISH_NZ),           "en_NZ"},
         | 
| 19 | 
            +
                { MAKELANGID(LANG_ENGLISH,    SUBLANG_ENGLISH_EIRE),         "en_IE"},
         | 
| 20 | 
            +
                { MAKELANGID(LANG_FINNISH,    SUBLANG_DEFAULT),              "fi_FI"},
         | 
| 21 | 
            +
                { MAKELANGID(LANG_FRENCH,     SUBLANG_FRENCH),               "fr_FR"},
         | 
| 22 | 
            +
                { MAKELANGID(LANG_FRENCH,     SUBLANG_FRENCH_BELGIAN),       "fr_BE"},
         | 
| 23 | 
            +
                { MAKELANGID(LANG_FRENCH,     SUBLANG_FRENCH_CANADIAN),      "fr_CA"},
         | 
| 24 | 
            +
                { MAKELANGID(LANG_FRENCH,     SUBLANG_FRENCH_SWISS),         "fr_CH"},
         | 
| 25 | 
            +
                { MAKELANGID(LANG_GERMAN,     SUBLANG_GERMAN),               "de_DE"},
         | 
| 26 | 
            +
                { MAKELANGID(LANG_GERMAN,     SUBLANG_GERMAN_SWISS),         "de_CH"},
         | 
| 27 | 
            +
                { MAKELANGID(LANG_GERMAN,     SUBLANG_GERMAN_AUSTRIAN),      "de_AT"},
         | 
| 28 | 
            +
                { MAKELANGID(LANG_GREEK,      SUBLANG_DEFAULT),              "el_GR"},
         | 
| 29 | 
            +
                { MAKELANGID(LANG_HUNGARIAN,  SUBLANG_DEFAULT),              "hu_HU"},
         | 
| 30 | 
            +
                { MAKELANGID(LANG_ICELANDIC,  SUBLANG_DEFAULT),              "is_IS"},
         | 
| 31 | 
            +
                { MAKELANGID(LANG_ITALIAN,    SUBLANG_ITALIAN),              "it_IT"},
         | 
| 32 | 
            +
                { MAKELANGID(LANG_ITALIAN,    SUBLANG_ITALIAN_SWISS),        "it_CH"},
         | 
| 33 | 
            +
                { MAKELANGID(LANG_JAPANESE,   SUBLANG_DEFAULT),              "ja_JP"},
         | 
| 34 | 
            +
                { MAKELANGID(LANG_KOREAN,     SUBLANG_DEFAULT),              "ko_KO"},
         | 
| 35 | 
            +
                { MAKELANGID(LANG_NORWEGIAN,  SUBLANG_NORWEGIAN_BOKMAL),     "no_NO"},
         | 
| 36 | 
            +
                { MAKELANGID(LANG_NORWEGIAN,  SUBLANG_NORWEGIAN_BOKMAL),     "nb_NO"},
         | 
| 37 | 
            +
                { MAKELANGID(LANG_NORWEGIAN,  SUBLANG_NORWEGIAN_NYNORSK),    "nn_NO"},
         | 
| 38 | 
            +
                { MAKELANGID(LANG_POLISH,     SUBLANG_DEFAULT),              "pl_PL"},
         | 
| 39 | 
            +
                { MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE),           "pt_PT"},
         | 
| 40 | 
            +
                { MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN), "pt_BR"},
         | 
| 41 | 
            +
                { MAKELANGID(LANG_ROMANIAN,   SUBLANG_DEFAULT),              "ro_RO"},
         | 
| 42 | 
            +
                { MAKELANGID(LANG_RUSSIAN,    SUBLANG_DEFAULT),              "ru_RU"},
         | 
| 43 | 
            +
                { MAKELANGID(LANG_SLOVAK,     SUBLANG_DEFAULT),              "sk_SK"},
         | 
| 44 | 
            +
                { MAKELANGID(LANG_SLOVENIAN,  SUBLANG_DEFAULT),              "sl_SI"},
         | 
| 45 | 
            +
                { MAKELANGID(LANG_SPANISH,    SUBLANG_SPANISH),              "es_ES"},
         | 
| 46 | 
            +
                { MAKELANGID(LANG_SPANISH,    SUBLANG_SPANISH),              "es_ES_T"},
         | 
| 47 | 
            +
                { MAKELANGID(LANG_SPANISH,    SUBLANG_SPANISH_MEXICAN),      "es_MX"},
         | 
| 48 | 
            +
                { MAKELANGID(LANG_SPANISH,    SUBLANG_SPANISH_MODERN),       "es_ES_M"},
         | 
| 49 | 
            +
                { MAKELANGID(LANG_SWEDISH,    SUBLANG_DEFAULT),              "sv_SE"},
         | 
| 50 | 
            +
                { MAKELANGID(LANG_TURKISH,    SUBLANG_DEFAULT),              "tr_TR"},
         | 
| 51 | 
            +
                { 0, NULL}
         | 
| 52 | 
            +
            };
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            LocaleInfo default_locale = {MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), "neutral"};
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            LocaleInfo*
         | 
| 57 | 
            +
            get_locale_from_rb_str(VALUE rb_locale_str)
         | 
| 58 | 
            +
            {
         | 
| 59 | 
            +
              CHAR* locale_str = StringValuePtr(rb_locale_str);
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              for (int i = 0; localeInfoTable[i].langCode != NULL; i++) {
         | 
| 62 | 
            +
                if (stricmp(localeInfoTable[i].langCode, locale_str) == 0) {
         | 
| 63 | 
            +
                  return &localeInfoTable[i];
         | 
| 64 | 
            +
                }
         | 
| 65 | 
            +
              }
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              rb_raise(rb_eArgError, "Unknown locale: %s", locale_str);
         | 
| 68 | 
            +
            }
         | 
    
        data/ext/winevt/winevt_query.c
    CHANGED
    
    | @@ -96,6 +96,7 @@ rb_winevt_query_initialize(VALUE self, VALUE channel, VALUE xpath) | |
| 96 96 | 
             
              winevtQuery->timeout = 0L;
         | 
| 97 97 | 
             
              winevtQuery->renderAsXML = TRUE;
         | 
| 98 98 | 
             
              winevtQuery->preserveQualifiers = FALSE;
         | 
| 99 | 
            +
              winevtQuery->localeInfo = &default_locale;
         | 
| 99 100 |  | 
| 100 101 | 
             
              ALLOCV_END(wchannelBuf);
         | 
| 101 102 | 
             
              ALLOCV_END(wpathBuf);
         | 
| @@ -219,12 +220,12 @@ rb_winevt_query_render(VALUE self, EVT_HANDLE event) | |
| 219 220 | 
             
            }
         | 
| 220 221 |  | 
| 221 222 | 
             
            static VALUE
         | 
| 222 | 
            -
            rb_winevt_query_message(EVT_HANDLE event)
         | 
| 223 | 
            +
            rb_winevt_query_message(EVT_HANDLE event, LocaleInfo* localeInfo)
         | 
| 223 224 | 
             
            {
         | 
| 224 225 | 
             
              WCHAR* wResult;
         | 
| 225 226 | 
             
              VALUE utf8str;
         | 
| 226 227 |  | 
| 227 | 
            -
              wResult = get_description(event);
         | 
| 228 | 
            +
              wResult = get_description(event, localeInfo->langID);
         | 
| 228 229 | 
             
              utf8str = wstr_to_rb_str(CP_UTF8, wResult, -1);
         | 
| 229 230 | 
             
              free(wResult);
         | 
| 230 231 |  | 
| @@ -336,7 +337,7 @@ rb_winevt_query_each_yield(VALUE self) | |
| 336 337 | 
             
              for (int i = 0; i < winevtQuery->count; i++) {
         | 
| 337 338 | 
             
                rb_yield_values(3,
         | 
| 338 339 | 
             
                                rb_winevt_query_render(self, winevtQuery->hEvents[i]),
         | 
| 339 | 
            -
                                rb_winevt_query_message(winevtQuery->hEvents[i]),
         | 
| 340 | 
            +
                                rb_winevt_query_message(winevtQuery->hEvents[i], winevtQuery->localeInfo),
         | 
| 340 341 | 
             
                                rb_winevt_query_string_inserts(winevtQuery->hEvents[i]));
         | 
| 341 342 | 
             
              }
         | 
| 342 343 | 
             
              return Qnil;
         | 
| @@ -432,6 +433,48 @@ rb_winevt_query_get_preserve_qualifiers_p(VALUE self) | |
| 432 433 | 
             
              return winevtQuery->preserveQualifiers ? Qtrue : Qfalse;
         | 
| 433 434 | 
             
            }
         | 
| 434 435 |  | 
| 436 | 
            +
            /*
         | 
| 437 | 
            +
             * This method specifies locale with [String].
         | 
| 438 | 
            +
             *
         | 
| 439 | 
            +
             * @since 0.8.0
         | 
| 440 | 
            +
             * @param rb_locale_str [String]
         | 
| 441 | 
            +
             */
         | 
| 442 | 
            +
            static VALUE
         | 
| 443 | 
            +
            rb_winevt_query_set_locale(VALUE self, VALUE rb_locale_str)
         | 
| 444 | 
            +
            {
         | 
| 445 | 
            +
              struct WinevtQuery* winevtQuery;
         | 
| 446 | 
            +
              LocaleInfo* locale_info = &default_locale;
         | 
| 447 | 
            +
             | 
| 448 | 
            +
              TypedData_Get_Struct(
         | 
| 449 | 
            +
                self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
         | 
| 450 | 
            +
             | 
| 451 | 
            +
              locale_info = get_locale_from_rb_str(rb_locale_str);
         | 
| 452 | 
            +
             | 
| 453 | 
            +
              winevtQuery->localeInfo = locale_info;
         | 
| 454 | 
            +
             | 
| 455 | 
            +
              return Qnil;
         | 
| 456 | 
            +
            }
         | 
| 457 | 
            +
             | 
| 458 | 
            +
            /*
         | 
| 459 | 
            +
             * This method obtains specified locale with [String].
         | 
| 460 | 
            +
             *
         | 
| 461 | 
            +
             * @since 0.8.0
         | 
| 462 | 
            +
             */
         | 
| 463 | 
            +
            static VALUE
         | 
| 464 | 
            +
            rb_winevt_query_get_locale(VALUE self)
         | 
| 465 | 
            +
            {
         | 
| 466 | 
            +
              struct WinevtQuery* winevtQuery;
         | 
| 467 | 
            +
             | 
| 468 | 
            +
              TypedData_Get_Struct(
         | 
| 469 | 
            +
                self, struct WinevtQuery, &rb_winevt_query_type, winevtQuery);
         | 
| 470 | 
            +
             | 
| 471 | 
            +
              if (winevtQuery->localeInfo->langCode) {
         | 
| 472 | 
            +
                return rb_str_new2(winevtQuery->localeInfo->langCode);
         | 
| 473 | 
            +
              } else {
         | 
| 474 | 
            +
                return rb_str_new2(default_locale.langCode);
         | 
| 475 | 
            +
              }
         | 
| 476 | 
            +
            }
         | 
| 477 | 
            +
             | 
| 435 478 | 
             
            void
         | 
| 436 479 | 
             
            Init_winevt_query(VALUE rb_cEventLog)
         | 
| 437 480 | 
             
            {
         | 
| @@ -497,4 +540,12 @@ Init_winevt_query(VALUE rb_cEventLog) | |
| 497 540 | 
             
               * @since 0.7.3
         | 
| 498 541 | 
             
               */
         | 
| 499 542 | 
             
              rb_define_method(rb_cQuery, "preserve_qualifiers=", rb_winevt_query_set_preserve_qualifiers, 1);
         | 
| 543 | 
            +
              /*
         | 
| 544 | 
            +
               * @since 0.8.0
         | 
| 545 | 
            +
               */
         | 
| 546 | 
            +
              rb_define_method(rb_cQuery, "locale", rb_winevt_query_get_locale, 0);
         | 
| 547 | 
            +
              /*
         | 
| 548 | 
            +
               * @since 0.8.0
         | 
| 549 | 
            +
               */
         | 
| 550 | 
            +
              rb_define_method(rb_cQuery, "locale=", rb_winevt_query_set_locale, 1);
         | 
| 500 551 | 
             
            }
         | 
| @@ -90,6 +90,7 @@ rb_winevt_subscribe_initialize(VALUE self) | |
| 90 90 | 
             
              winevtSubscribe->renderAsXML = TRUE;
         | 
| 91 91 | 
             
              winevtSubscribe->readExistingEvents = TRUE;
         | 
| 92 92 | 
             
              winevtSubscribe->preserveQualifiers = FALSE;
         | 
| 93 | 
            +
              winevtSubscribe->localeInfo = &default_locale;
         | 
| 93 94 |  | 
| 94 95 | 
             
              return Qnil;
         | 
| 95 96 | 
             
            }
         | 
| @@ -345,12 +346,12 @@ rb_winevt_subscribe_render(VALUE self, EVT_HANDLE event) | |
| 345 346 | 
             
            }
         | 
| 346 347 |  | 
| 347 348 | 
             
            static VALUE
         | 
| 348 | 
            -
            rb_winevt_subscribe_message(EVT_HANDLE event)
         | 
| 349 | 
            +
            rb_winevt_subscribe_message(EVT_HANDLE event, LocaleInfo* localeInfo)
         | 
| 349 350 | 
             
            {
         | 
| 350 351 | 
             
              WCHAR* wResult;
         | 
| 351 352 | 
             
              VALUE utf8str;
         | 
| 352 353 |  | 
| 353 | 
            -
              wResult = get_description(event);
         | 
| 354 | 
            +
              wResult = get_description(event, localeInfo->langID);
         | 
| 354 355 | 
             
              utf8str = wstr_to_rb_str(CP_UTF8, wResult, -1);
         | 
| 355 356 | 
             
              free(wResult);
         | 
| 356 357 |  | 
| @@ -393,7 +394,7 @@ rb_winevt_subscribe_each_yield(VALUE self) | |
| 393 394 | 
             
              for (int i = 0; i < winevtSubscribe->count; i++) {
         | 
| 394 395 | 
             
                rb_yield_values(3,
         | 
| 395 396 | 
             
                                rb_winevt_subscribe_render(self, winevtSubscribe->hEvents[i]),
         | 
| 396 | 
            -
                                rb_winevt_subscribe_message(winevtSubscribe->hEvents[i]),
         | 
| 397 | 
            +
                                rb_winevt_subscribe_message(winevtSubscribe->hEvents[i], winevtSubscribe->localeInfo),
         | 
| 397 398 | 
             
                                rb_winevt_subscribe_string_inserts(winevtSubscribe->hEvents[i]));
         | 
| 398 399 | 
             
              }
         | 
| 399 400 |  | 
| @@ -554,6 +555,48 @@ rb_winevt_subscribe_get_preserve_qualifiers_p(VALUE self) | |
| 554 555 | 
             
              return winevtSubscribe->preserveQualifiers ? Qtrue : Qfalse;
         | 
| 555 556 | 
             
            }
         | 
| 556 557 |  | 
| 558 | 
            +
            /*
         | 
| 559 | 
            +
             * This method specifies locale with [String].
         | 
| 560 | 
            +
             *
         | 
| 561 | 
            +
             * @since 0.8.0
         | 
| 562 | 
            +
             * @param rb_locale_str [String]
         | 
| 563 | 
            +
             */
         | 
| 564 | 
            +
            static VALUE
         | 
| 565 | 
            +
            rb_winevt_subscribe_set_locale(VALUE self, VALUE rb_locale_str)
         | 
| 566 | 
            +
            {
         | 
| 567 | 
            +
              struct WinevtSubscribe* winevtSubscribe;
         | 
| 568 | 
            +
              LocaleInfo* locale_info = &default_locale;
         | 
| 569 | 
            +
             | 
| 570 | 
            +
              TypedData_Get_Struct(
         | 
| 571 | 
            +
                self, struct WinevtSubscribe, &rb_winevt_subscribe_type, winevtSubscribe);
         | 
| 572 | 
            +
             | 
| 573 | 
            +
              locale_info = get_locale_from_rb_str(rb_locale_str);
         | 
| 574 | 
            +
             | 
| 575 | 
            +
              winevtSubscribe->localeInfo = locale_info;
         | 
| 576 | 
            +
             | 
| 577 | 
            +
              return Qnil;
         | 
| 578 | 
            +
            }
         | 
| 579 | 
            +
             | 
| 580 | 
            +
            /*
         | 
| 581 | 
            +
             * This method obtains specified locale with [String].
         | 
| 582 | 
            +
             *
         | 
| 583 | 
            +
             * @since 0.8.0
         | 
| 584 | 
            +
             */
         | 
| 585 | 
            +
            static VALUE
         | 
| 586 | 
            +
            rb_winevt_subscribe_get_locale(VALUE self)
         | 
| 587 | 
            +
            {
         | 
| 588 | 
            +
              struct WinevtSubscribe* winevtSubscribe;
         | 
| 589 | 
            +
             | 
| 590 | 
            +
              TypedData_Get_Struct(
         | 
| 591 | 
            +
                self, struct WinevtSubscribe, &rb_winevt_subscribe_type, winevtSubscribe);
         | 
| 592 | 
            +
             | 
| 593 | 
            +
              if (winevtSubscribe->localeInfo->langCode) {
         | 
| 594 | 
            +
                return rb_str_new2(winevtSubscribe->localeInfo->langCode);
         | 
| 595 | 
            +
              } else {
         | 
| 596 | 
            +
                return rb_str_new2(default_locale.langCode);
         | 
| 597 | 
            +
              }
         | 
| 598 | 
            +
            }
         | 
| 599 | 
            +
             | 
| 557 600 | 
             
            void
         | 
| 558 601 | 
             
            Init_winevt_subscribe(VALUE rb_cEventLog)
         | 
| 559 602 | 
             
            {
         | 
| @@ -596,4 +639,14 @@ Init_winevt_subscribe(VALUE rb_cEventLog) | |
| 596 639 | 
             
               */
         | 
| 597 640 | 
             
              rb_define_method(
         | 
| 598 641 | 
             
                rb_cSubscribe, "preserve_qualifiers=", rb_winevt_subscribe_set_preserve_qualifiers, 1);
         | 
| 642 | 
            +
              /*
         | 
| 643 | 
            +
               * @since 0.8.0
         | 
| 644 | 
            +
               */
         | 
| 645 | 
            +
              rb_define_method(
         | 
| 646 | 
            +
                rb_cSubscribe, "locale", rb_winevt_subscribe_get_locale, 0);
         | 
| 647 | 
            +
              /*
         | 
| 648 | 
            +
               * @since 0.8.0
         | 
| 649 | 
            +
               */
         | 
| 650 | 
            +
              rb_define_method(
         | 
| 651 | 
            +
                rb_cSubscribe, "locale=", rb_winevt_subscribe_set_locale, 1);
         | 
| 599 652 | 
             
            }
         | 
    
        data/ext/winevt/winevt_utils.cpp
    CHANGED
    
    | @@ -433,7 +433,7 @@ cleanup: | |
| 433 433 | 
             
            }
         | 
| 434 434 |  | 
| 435 435 | 
             
            WCHAR*
         | 
| 436 | 
            -
            get_description(EVT_HANDLE handle)
         | 
| 436 | 
            +
            get_description(EVT_HANDLE handle, LANGID langID)
         | 
| 437 437 | 
             
            {
         | 
| 438 438 | 
             
            #define BUFSIZE 4096
         | 
| 439 439 | 
             
              std::vector<WCHAR> buffer(BUFSIZE);
         | 
| @@ -473,7 +473,7 @@ get_description(EVT_HANDLE handle) | |
| 473 473 | 
             
                nullptr,
         | 
| 474 474 | 
             
                values[0].StringVal,
         | 
| 475 475 | 
             
                nullptr,
         | 
| 476 | 
            -
                MAKELCID( | 
| 476 | 
            +
                MAKELCID(langID, SORT_DEFAULT),
         | 
| 477 477 | 
             
                0);
         | 
| 478 478 | 
             
              if (hMetadata == nullptr) {
         | 
| 479 479 | 
             
                // When winevt_c cannot open metadata, then give up to obtain
         | 
    
        data/lib/winevt/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: winevt_c
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.8.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Hiroshi Hatake
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020-05- | 
| 11 | 
            +
            date: 2020-05-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -128,6 +128,7 @@ files: | |
| 128 128 | 
             
            - ext/winevt/winevt_bookmark.c
         | 
| 129 129 | 
             
            - ext/winevt/winevt_c.h
         | 
| 130 130 | 
             
            - ext/winevt/winevt_channel.c
         | 
| 131 | 
            +
            - ext/winevt/winevt_locale.c
         | 
| 131 132 | 
             
            - ext/winevt/winevt_query.c
         | 
| 132 133 | 
             
            - ext/winevt/winevt_subscribe.c
         | 
| 133 134 | 
             
            - ext/winevt/winevt_utils.cpp
         |