Fix license
[platform/core/uifw/anthy.git] / src-diclib / file_dic.c
1 #include <stdio.h>
2 #include <string.h>
3
4 #include <anthy/diclib.h>
5 #include <anthy/filemap.h>
6 #include <anthy/alloc.h>
7 #include <anthy/conf.h>
8 #include <anthy/logger.h>
9 #include "diclib_inner.h"
10
11 /**
12    Ê£¿ô¥»¥¯¥·¥ç¥ó¤¬¥ê¥ó¥¯¤µ¤ì¤¿¼­½ñ
13  */
14 struct file_dic
15 {
16   struct filemapping *mapping;
17 };
18
19 static struct file_dic fdic;
20
21 void*
22 anthy_file_dic_get_section(const char* section_name)
23 {
24   int i;
25   char* head = anthy_mmap_address(fdic.mapping);
26   int* p = (int*)head;
27   int entry_num = anthy_dic_ntohl(*p++);
28   
29   for (i = 0; i < entry_num; ++i) {
30     int hash_offset = anthy_dic_ntohl(*p++);
31     int key_len =  anthy_dic_ntohl(*p++);
32     int contents_offset = anthy_dic_ntohl(*p++);
33     if (strncmp(section_name, head + hash_offset, key_len) == 0) {
34       return (void*)(head + contents_offset);
35     }
36   }
37   return NULL;
38 }
39
40 int
41 anthy_init_file_dic(void)
42 {
43   const char *fn;
44   fn = anthy_conf_get_str("DIC_FILE");
45   if (!fn) {
46     anthy_log(0, "dictionary is not specified.\n");
47     return -1;
48   }
49
50   /* ¼­½ñ¤ò¥á¥â¥ê¾å¤Ëmap¤¹¤ë */
51   fdic.mapping = anthy_mmap(fn, 0);
52   if (!fdic.mapping) {
53     anthy_log(0, "failed to init file dic.\n");
54     return -1;
55   }
56
57   return 0;
58 }
59
60 void
61 anthy_quit_file_dic(void)
62 {
63   anthy_munmap(fdic.mapping);  
64 }
65