diff options
| author | David M. Syzdek <david@syzdek.net> | 2022-03-17 16:00:57 -0800 |
|---|---|---|
| committer | David M. Syzdek <david@syzdek.net> | 2022-03-17 16:00:57 -0800 |
| commit | e61a0b72348d18330482b8da2ac6f01b07087aac (patch) | |
| tree | 9d3cbe06343f04ec9500692338e73f8b59844f64 /lib | |
| parent | 25d7f9c7463c45e5500dc4d784e59c4befac68ca (diff) | |
| download | tinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.tar.gz tinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.tar.bz2 tinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.tar.xz tinyrad-e61a0b72348d18330482b8da2ac6f01b07087aac.zip | |
libtinyrad: adding tinyrad_dict_defaults()
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libtinyrad/ldict.c | 70 | ||||
| -rw-r--r-- | lib/libtinyrad/ldict.h | 7 | ||||
| -rw-r--r-- | lib/libtinyrad/lmemory.c | 17 |
3 files changed, 55 insertions, 39 deletions
diff --git a/lib/libtinyrad/ldict.c b/lib/libtinyrad/ldict.c index c2b9f34..6a12fbe 100644 --- a/lib/libtinyrad/ldict.c +++ b/lib/libtinyrad/ldict.c | |||
| @@ -694,6 +694,47 @@ tinyrad_dict_add_vendor( | |||
| 694 | } | 694 | } |
| 695 | 695 | ||
| 696 | 696 | ||
| 697 | int | ||
| 698 | tinyrad_dict_defaults( | ||
| 699 | TinyRadDict * dict, | ||
| 700 | char *** msgsp, | ||
| 701 | int opts ) | ||
| 702 | { | ||
| 703 | int rc; | ||
| 704 | |||
| 705 | if (!(dict)) | ||
| 706 | return(TRAD_SUCCESS); | ||
| 707 | |||
| 708 | // adjust options | ||
| 709 | opts &= ~(dict->opts_neg); | ||
| 710 | opts |= dict->opts; | ||
| 711 | |||
| 712 | // load built-in dictionary | ||
| 713 | if ((opts & TRAD_BUILTIN_DICT)) | ||
| 714 | if ((rc = tinyrad_dict_builtin(dict, msgsp)) != TRAD_SUCCESS) | ||
| 715 | return(rc); | ||
| 716 | |||
| 717 | // load default dictionary file | ||
| 718 | if ((dict->default_dictfile)) | ||
| 719 | { | ||
| 720 | switch(rc = tinyrad_dict_parse(dict, dict->default_dictfile, NULL, 0)) | ||
| 721 | { | ||
| 722 | case TRAD_SUCCESS: | ||
| 723 | break; | ||
| 724 | |||
| 725 | case TRAD_ENOMEM: | ||
| 726 | case TRAD_EUNKNOWN: | ||
| 727 | return(rc); | ||
| 728 | |||
| 729 | default: | ||
| 730 | break; | ||
| 731 | }; | ||
| 732 | }; | ||
| 733 | |||
| 734 | return(TRAD_SUCCESS); | ||
| 735 | } | ||
| 736 | |||
| 737 | |||
| 697 | /// Initialize dicitionary file buffer | 738 | /// Initialize dicitionary file buffer |
| 698 | /// | 739 | /// |
| 699 | /// @param[in] dict dictionary reference | 740 | /// @param[in] dict dictionary reference |
| @@ -847,32 +888,11 @@ tinyrad_dict_initialize( | |||
| 847 | return(rc); | 888 | return(rc); |
| 848 | }; | 889 | }; |
| 849 | 890 | ||
| 850 | // load builtin dictionary | 891 | // load builtin dictionary and default dictionary file |
| 851 | if ((dict->opts & TRAD_BUILTIN_DICT) == TRAD_BUILTIN_DICT) | 892 | if ((rc = tinyrad_dict_defaults(dict, NULL, opts)) != TRAD_SUCCESS) |
| 852 | { | 893 | { |
| 853 | if ((rc = tinyrad_dict_builtin(dict, NULL)) != TRAD_SUCCESS) | 894 | tinyrad_dict_free(dict); |
| 854 | { | 895 | return(rc); |
| 855 | tinyrad_dict_free(dict); | ||
| 856 | return(rc); | ||
| 857 | }; | ||
| 858 | }; | ||
| 859 | |||
| 860 | // load default dictionary file | ||
| 861 | if ((dict->default_dictfile)) | ||
| 862 | { | ||
| 863 | switch(rc = tinyrad_dict_parse(dict, dict->default_dictfile, NULL, 0)) | ||
| 864 | { | ||
| 865 | case TRAD_SUCCESS: | ||
| 866 | break; | ||
| 867 | |||
| 868 | case TRAD_ENOMEM: | ||
| 869 | case TRAD_EUNKNOWN: | ||
| 870 | tinyrad_dict_free(dict); | ||
| 871 | return(rc); | ||
| 872 | |||
| 873 | default: | ||
| 874 | break; | ||
| 875 | }; | ||
| 876 | }; | 896 | }; |
| 877 | 897 | ||
| 878 | *dictp = tinyrad_obj_retain(&dict->obj); | 898 | *dictp = tinyrad_obj_retain(&dict->obj); |
diff --git a/lib/libtinyrad/ldict.h b/lib/libtinyrad/ldict.h index 3fd5da4..3bd6c1b 100644 --- a/lib/libtinyrad/ldict.h +++ b/lib/libtinyrad/ldict.h | |||
| @@ -147,6 +147,13 @@ tinyrad_dict_attr_oidname( | |||
| 147 | const TinyRadOID * oid ); | 147 | const TinyRadOID * oid ); |
| 148 | 148 | ||
| 149 | 149 | ||
| 150 | int | ||
| 151 | tinyrad_dict_defaults( | ||
| 152 | TinyRadDict * dict, | ||
| 153 | char *** msgsp, | ||
| 154 | int opts ); | ||
| 155 | |||
| 156 | |||
| 150 | TinyRadDictValue * | 157 | TinyRadDictValue * |
| 151 | tinyrad_dict_value_lookup( | 158 | tinyrad_dict_value_lookup( |
| 152 | TinyRadDict * dict, | 159 | TinyRadDict * dict, |
diff --git a/lib/libtinyrad/lmemory.c b/lib/libtinyrad/lmemory.c index 421f01c..d160e91 100644 --- a/lib/libtinyrad/lmemory.c +++ b/lib/libtinyrad/lmemory.c | |||
| @@ -331,21 +331,10 @@ tinyrad_initialize( | |||
| 331 | // load default dictionary file and make read-only | 331 | // load default dictionary file and make read-only |
| 332 | if (!(dict)) | 332 | if (!(dict)) |
| 333 | { | 333 | { |
| 334 | if ((tr->dict->default_dictfile)) | 334 | if ((rc = tinyrad_dict_defaults(tr->dict, NULL, (TRAD_BUILTIN_DICT|opts))) != TRAD_SUCCESS) |
| 335 | { | 335 | { |
| 336 | switch(rc = tinyrad_dict_parse(tr->dict, tr->dict->default_dictfile, NULL, 0)) | 336 | tinyrad_tiyrad_free(tr); |
| 337 | { | 337 | return(rc); |
| 338 | case TRAD_SUCCESS: | ||
| 339 | break; | ||
| 340 | |||
| 341 | case TRAD_ENOMEM: | ||
| 342 | case TRAD_EUNKNOWN: | ||
| 343 | tinyrad_tiyrad_free(tr); | ||
| 344 | return(rc); | ||
| 345 | |||
| 346 | default: | ||
| 347 | break; | ||
| 348 | }; | ||
| 349 | }; | 338 | }; |
| 350 | opt = TRAD_YES; | 339 | opt = TRAD_YES; |
| 351 | tinyrad_dict_set_option(tr->dict, TRAD_DICT_OPT_READONLY, &opt); | 340 | tinyrad_dict_set_option(tr->dict, TRAD_DICT_OPT_READONLY, &opt); |
