/[LeafOK_CVS]/lbbs/src/test_file_loader.c
ViewVC logotype

Contents of /lbbs/src/test_file_loader.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (show annotations)
Sun May 25 06:48:31 2025 UTC (9 months, 3 weeks ago) by sysadm
Branch: MAIN
Changes since 1.4: +41 -6 lines
Content type: text/x-csrc
Refact file_loader
Store shmid in dict as value, instead of p_shm

1 /***************************************************************************
2 file_loader.c - description
3 -------------------
4 Copyright : (C) 2004-2025 by Leaflet
5 Email : leaflet@leafok.com
6 ***************************************************************************/
7
8 /***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 3 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17 #include "file_loader.h"
18 #include "trie_dict.h"
19 #include "log.h"
20 #include <stdio.h>
21 #include <unistd.h>
22 #include <errno.h>
23 #include <sys/shm.h>
24
25 #define TRIE_DICT_SHM_FILE "~trie_dict_shm.dat"
26
27 const char *files[] = {
28 "../data/welcome.txt",
29 "../data/copyright.txt",
30 "../data/register.txt",
31 "../data/license.txt",
32 "../data/login_error.txt",
33 "../data/read_help.txt"};
34
35 int files_cnt = 6;
36
37 int main(int argc, char *argv[])
38 {
39 int ret;
40 int i;
41 const void *p_shm;
42 size_t data_len;
43 long line_total;
44 const void *p_data;
45 const long *p_line_offsets;
46 FILE *fp;
47
48 if (log_begin("../log/bbsd.log", "../log/error.log") < 0)
49 {
50 printf("Open log error\n");
51 return -1;
52 }
53
54 log_std_redirect(STDOUT_FILENO);
55 log_err_redirect(STDERR_FILENO);
56
57 if ((fp = fopen(TRIE_DICT_SHM_FILE, "w")) == NULL)
58 {
59 log_error("fopen(%s) error\n", TRIE_DICT_SHM_FILE);
60 return -1;
61 }
62 fclose(fp);
63
64 if (trie_dict_init(TRIE_DICT_SHM_FILE) < 0)
65 {
66 printf("trie_dict_init failed\n");
67 return -1;
68 }
69
70 ret = file_loader_init();
71 if (ret < 0)
72 {
73 printf("file_loader_init() error (%d)\n", ret);
74 return ret;
75 }
76
77 ret = file_loader_init();
78 if (ret == 0)
79 {
80 printf("Rerun file_loader_init() error\n");
81 }
82
83 printf("Testing #1\n");
84
85 for (i = 0; i < files_cnt; i++)
86 {
87 if (load_file(files[i]) < 0)
88 {
89 printf("Load file %s error\n", files[i]);
90 }
91 }
92
93 for (i = 0; i < files_cnt; i++)
94 {
95 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
96 {
97 printf("Get file shm %s error\n", files[i]);
98 }
99 else
100 {
101 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
102
103 for (int j = 0; j < line_total; j++)
104 {
105 printf("Line %d: %ld ~ %ld\n", j, p_line_offsets[j], p_line_offsets[j + 1]);
106 }
107
108 if (detach_file_shm(p_shm) < 0)
109 {
110 log_error("detach_file_shm(%s) error\n", files[i]);
111 }
112 }
113 }
114
115 printf("Testing #2\n");
116
117 for (i = 0; i < files_cnt; i++)
118 {
119 if (unload_file(files[i]) < 0)
120 {
121 printf("Unload file %s error\n", files[i]);
122 }
123 }
124
125 for (i = 0; i < files_cnt; i++)
126 {
127 if (load_file(files[i]) < 0)
128 {
129 printf("Load file %s error\n", files[i]);
130 }
131 }
132
133 printf("Testing #3\n");
134
135 for (i = 0; i < files_cnt; i++)
136 {
137 if (i % 2 == 0)
138 {
139 if (unload_file(files[i]) < 0)
140 {
141 printf("Unload file %s error\n", files[i]);
142 }
143 }
144 }
145
146 for (i = 0; i < files_cnt; i++)
147 {
148 if (i % 2 != 0)
149 {
150 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
151 {
152 printf("Get file shm %s error\n", files[i]);
153 }
154 else
155 {
156 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
157
158 if (detach_file_shm(p_shm) < 0)
159 {
160 log_error("detach_file_shm(%s) error\n", files[i]);
161 }
162 }
163 }
164 }
165
166 file_loader_cleanup();
167 file_loader_cleanup();
168
169 trie_dict_cleanup();
170
171 if (unlink(TRIE_DICT_SHM_FILE) < 0)
172 {
173 log_error("unlink(%s) error\n", TRIE_DICT_SHM_FILE);
174 return -1;
175 }
176
177 log_end();
178
179 return 0;
180 }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1