ooxml_crypt 0.1.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.
Files changed (264) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +58 -0
  5. data/Rakefile +12 -0
  6. data/bin/console +15 -0
  7. data/bin/setup +8 -0
  8. data/ext/ooxml_crypt/extconf.rb +18 -0
  9. data/ext/ooxml_crypt/ooxml_crypt.c +27 -0
  10. data/ext/ooxml_crypt/ooxml_crypt.h +7 -0
  11. data/lib/ooxml_crypt/version.rb +5 -0
  12. data/lib/ooxml_crypt.rb +75 -0
  13. data/vendor/cybozulib/.github/workflows/main.yml +12 -0
  14. data/vendor/cybozulib/.gitignore +5 -0
  15. data/vendor/cybozulib/CMakeLists.txt +6 -0
  16. data/vendor/cybozulib/COPYRIGHT +27 -0
  17. data/vendor/cybozulib/Makefile +26 -0
  18. data/vendor/cybozulib/bin/libeay32.dll +0 -0
  19. data/vendor/cybozulib/bin/libmecab.dll +0 -0
  20. data/vendor/cybozulib/bin/ssleay32.dll +0 -0
  21. data/vendor/cybozulib/common.mk +116 -0
  22. data/vendor/cybozulib/common.props +25 -0
  23. data/vendor/cybozulib/cybozulib.sln +286 -0
  24. data/vendor/cybozulib/debug.props +14 -0
  25. data/vendor/cybozulib/include/cybozu/array.hpp +197 -0
  26. data/vendor/cybozulib/include/cybozu/atoi.hpp +238 -0
  27. data/vendor/cybozulib/include/cybozu/atomic.hpp +146 -0
  28. data/vendor/cybozulib/include/cybozu/base64.hpp +210 -0
  29. data/vendor/cybozulib/include/cybozu/benchmark.hpp +212 -0
  30. data/vendor/cybozulib/include/cybozu/bfd.hpp +105 -0
  31. data/vendor/cybozulib/include/cybozu/bit_operation.hpp +139 -0
  32. data/vendor/cybozulib/include/cybozu/bitvector.hpp +358 -0
  33. data/vendor/cybozulib/include/cybozu/condition_variable.hpp +113 -0
  34. data/vendor/cybozulib/include/cybozu/condition_variable_cs.hpp +74 -0
  35. data/vendor/cybozulib/include/cybozu/config.hpp +392 -0
  36. data/vendor/cybozulib/include/cybozu/critical_section.hpp +60 -0
  37. data/vendor/cybozulib/include/cybozu/crypto.hpp +321 -0
  38. data/vendor/cybozulib/include/cybozu/csucvector.hpp +624 -0
  39. data/vendor/cybozulib/include/cybozu/csv.hpp +294 -0
  40. data/vendor/cybozulib/include/cybozu/data_type.hpp +27 -0
  41. data/vendor/cybozulib/include/cybozu/endian.hpp +224 -0
  42. data/vendor/cybozulib/include/cybozu/env.hpp +63 -0
  43. data/vendor/cybozulib/include/cybozu/event.hpp +122 -0
  44. data/vendor/cybozulib/include/cybozu/exception.hpp +253 -0
  45. data/vendor/cybozulib/include/cybozu/file.hpp +626 -0
  46. data/vendor/cybozulib/include/cybozu/fmindex.hpp +291 -0
  47. data/vendor/cybozulib/include/cybozu/format.hpp +93 -0
  48. data/vendor/cybozulib/include/cybozu/frequency.hpp +264 -0
  49. data/vendor/cybozulib/include/cybozu/hash.hpp +67 -0
  50. data/vendor/cybozulib/include/cybozu/inttype.hpp +174 -0
  51. data/vendor/cybozulib/include/cybozu/itoa.hpp +336 -0
  52. data/vendor/cybozulib/include/cybozu/json.hpp +120 -0
  53. data/vendor/cybozulib/include/cybozu/line_stream.hpp +149 -0
  54. data/vendor/cybozulib/include/cybozu/link_libeay32.hpp +21 -0
  55. data/vendor/cybozulib/include/cybozu/link_mpir.hpp +18 -0
  56. data/vendor/cybozulib/include/cybozu/link_ssleay32.hpp +19 -0
  57. data/vendor/cybozulib/include/cybozu/log.hpp +237 -0
  58. data/vendor/cybozulib/include/cybozu/minixml.hpp +452 -0
  59. data/vendor/cybozulib/include/cybozu/mmap.hpp +143 -0
  60. data/vendor/cybozulib/include/cybozu/mutex.hpp +144 -0
  61. data/vendor/cybozulib/include/cybozu/nlp/mecab.hpp +96 -0
  62. data/vendor/cybozulib/include/cybozu/nlp/plsi.hpp +315 -0
  63. data/vendor/cybozulib/include/cybozu/nlp/random.hpp +74 -0
  64. data/vendor/cybozulib/include/cybozu/nlp/sparse.hpp +529 -0
  65. data/vendor/cybozulib/include/cybozu/nlp/svd.hpp +486 -0
  66. data/vendor/cybozulib/include/cybozu/nlp/tfidf.hpp +226 -0
  67. data/vendor/cybozulib/include/cybozu/nlp/top_score.hpp +75 -0
  68. data/vendor/cybozulib/include/cybozu/option.hpp +743 -0
  69. data/vendor/cybozulib/include/cybozu/parallel.hpp +88 -0
  70. data/vendor/cybozulib/include/cybozu/pcg.hpp +72 -0
  71. data/vendor/cybozulib/include/cybozu/process.hpp +324 -0
  72. data/vendor/cybozulib/include/cybozu/quit_signal_handler.hpp +66 -0
  73. data/vendor/cybozulib/include/cybozu/random_generator.hpp +144 -0
  74. data/vendor/cybozulib/include/cybozu/regex.hpp +463 -0
  75. data/vendor/cybozulib/include/cybozu/select8.hpp +279 -0
  76. data/vendor/cybozulib/include/cybozu/serializer.hpp +363 -0
  77. data/vendor/cybozulib/include/cybozu/sha1.hpp +209 -0
  78. data/vendor/cybozulib/include/cybozu/sha2.hpp +506 -0
  79. data/vendor/cybozulib/include/cybozu/siphash.hpp +105 -0
  80. data/vendor/cybozulib/include/cybozu/socket.hpp +785 -0
  81. data/vendor/cybozulib/include/cybozu/ssl.hpp +203 -0
  82. data/vendor/cybozulib/include/cybozu/stacktrace.hpp +291 -0
  83. data/vendor/cybozulib/include/cybozu/stream.hpp +269 -0
  84. data/vendor/cybozulib/include/cybozu/string.hpp +1746 -0
  85. data/vendor/cybozulib/include/cybozu/string_operation.hpp +365 -0
  86. data/vendor/cybozulib/include/cybozu/sucvector.hpp +378 -0
  87. data/vendor/cybozulib/include/cybozu/test.hpp +373 -0
  88. data/vendor/cybozulib/include/cybozu/thread.hpp +229 -0
  89. data/vendor/cybozulib/include/cybozu/time.hpp +281 -0
  90. data/vendor/cybozulib/include/cybozu/tls.hpp +115 -0
  91. data/vendor/cybozulib/include/cybozu/unordered_map.hpp +13 -0
  92. data/vendor/cybozulib/include/cybozu/unordered_set.hpp +13 -0
  93. data/vendor/cybozulib/include/cybozu/v128.hpp +376 -0
  94. data/vendor/cybozulib/include/cybozu/wavelet_matrix.hpp +345 -0
  95. data/vendor/cybozulib/include/cybozu/xorshift.hpp +189 -0
  96. data/vendor/cybozulib/include/cybozu/zlib.hpp +325 -0
  97. data/vendor/cybozulib/include/sais.hxx +364 -0
  98. data/vendor/cybozulib/misc/make_select8tbl.cpp +26 -0
  99. data/vendor/cybozulib/mk.bat +37 -0
  100. data/vendor/cybozulib/readme.md +29 -0
  101. data/vendor/cybozulib/release.props +12 -0
  102. data/vendor/cybozulib/sample/Makefile +30 -0
  103. data/vendor/cybozulib/sample/csucvector_smpl.cpp +42 -0
  104. data/vendor/cybozulib/sample/data/svd/org/test1.S +4 -0
  105. data/vendor/cybozulib/sample/data/svd/org/test1.U +4 -0
  106. data/vendor/cybozulib/sample/data/svd/org/test1.V +6 -0
  107. data/vendor/cybozulib/sample/data/svd/test1 +4 -0
  108. data/vendor/cybozulib/sample/data/svd/test2 +4 -0
  109. data/vendor/cybozulib/sample/desymbol.cpp +127 -0
  110. data/vendor/cybozulib/sample/exception_smpl.cpp +46 -0
  111. data/vendor/cybozulib/sample/fmindex_smpl.cpp +231 -0
  112. data/vendor/cybozulib/sample/log_smpl.cpp +19 -0
  113. data/vendor/cybozulib/sample/mecab_smpl.cpp +37 -0
  114. data/vendor/cybozulib/sample/option2_smpl.cpp +68 -0
  115. data/vendor/cybozulib/sample/option_smpl.cpp +42 -0
  116. data/vendor/cybozulib/sample/plsi_smpl.cpp +207 -0
  117. data/vendor/cybozulib/sample/proj/exception_smpl.vcproj +184 -0
  118. data/vendor/cybozulib/sample/proj/mecab_smpl.vcproj +184 -0
  119. data/vendor/cybozulib/sample/proj/ssl_smpl/ssl_smpl.vcxproj +85 -0
  120. data/vendor/cybozulib/sample/proj/ssl_smpl.vcproj +347 -0
  121. data/vendor/cybozulib/sample/proj/stacktrace_smpl/stacktrace_smpl.vcxproj +85 -0
  122. data/vendor/cybozulib/sample/proj/svd_smpl.vcproj +184 -0
  123. data/vendor/cybozulib/sample/quit_signal_handler.cpp +30 -0
  124. data/vendor/cybozulib/sample/serializer_smpl.cpp +196 -0
  125. data/vendor/cybozulib/sample/socket_smpl.cpp +82 -0
  126. data/vendor/cybozulib/sample/ssl_smpl.cpp +39 -0
  127. data/vendor/cybozulib/sample/stacktrace_smpl.cpp +52 -0
  128. data/vendor/cybozulib/sample/svd_bench_smpl.cpp +143 -0
  129. data/vendor/cybozulib/sample/svd_smpl.cpp +94 -0
  130. data/vendor/cybozulib/sample/wm_bench_smpl.cpp +182 -0
  131. data/vendor/cybozulib/sample/zlib_smpl.cpp +41 -0
  132. data/vendor/cybozulib/src/Makefile +8 -0
  133. data/vendor/cybozulib/src/base/Makefile +19 -0
  134. data/vendor/cybozulib/test/Makefile +12 -0
  135. data/vendor/cybozulib/test/base/Makefile +37 -0
  136. data/vendor/cybozulib/test/base/array_test.cpp +173 -0
  137. data/vendor/cybozulib/test/base/atoi_test.cpp +774 -0
  138. data/vendor/cybozulib/test/base/atomic_test.cpp +49 -0
  139. data/vendor/cybozulib/test/base/base64_test.cpp +113 -0
  140. data/vendor/cybozulib/test/base/bit_operation_test.cpp +134 -0
  141. data/vendor/cybozulib/test/base/bitvector_test.cpp +204 -0
  142. data/vendor/cybozulib/test/base/condition_variable_cs_test.cpp +92 -0
  143. data/vendor/cybozulib/test/base/condition_variable_test.cpp +88 -0
  144. data/vendor/cybozulib/test/base/config_test.cpp +236 -0
  145. data/vendor/cybozulib/test/base/crypto_test.cpp +122 -0
  146. data/vendor/cybozulib/test/base/csucvector_test.cpp +63 -0
  147. data/vendor/cybozulib/test/base/csv_test.cpp +182 -0
  148. data/vendor/cybozulib/test/base/data/a.xml +26 -0
  149. data/vendor/cybozulib/test/base/endian_test.cpp +56 -0
  150. data/vendor/cybozulib/test/base/env_test.cpp +22 -0
  151. data/vendor/cybozulib/test/base/event_test.cpp +41 -0
  152. data/vendor/cybozulib/test/base/file_test.cpp +233 -0
  153. data/vendor/cybozulib/test/base/fmindex_test.cpp +118 -0
  154. data/vendor/cybozulib/test/base/format_test.cpp +12 -0
  155. data/vendor/cybozulib/test/base/frequency_test.cpp +104 -0
  156. data/vendor/cybozulib/test/base/itoa_test.cpp +522 -0
  157. data/vendor/cybozulib/test/base/line_stream_test.cpp +208 -0
  158. data/vendor/cybozulib/test/base/mecab_test.cpp +41 -0
  159. data/vendor/cybozulib/test/base/minixml_test.cpp +103 -0
  160. data/vendor/cybozulib/test/base/mmap_test.cpp +15 -0
  161. data/vendor/cybozulib/test/base/option_test.cpp +487 -0
  162. data/vendor/cybozulib/test/base/parallel_test.cpp +48 -0
  163. data/vendor/cybozulib/test/base/proj/array_test/array_test.vcxproj +86 -0
  164. data/vendor/cybozulib/test/base/proj/atoi_test/atoi_test.vcxproj +86 -0
  165. data/vendor/cybozulib/test/base/proj/atomic_test/atomic_test.vcxproj +86 -0
  166. data/vendor/cybozulib/test/base/proj/base64_test/base64_test.vcxproj +86 -0
  167. data/vendor/cybozulib/test/base/proj/condition_variable_cs_test/condition_variable_cs_test.vcxproj +86 -0
  168. data/vendor/cybozulib/test/base/proj/condition_variable_test/condition_variable_test.vcxproj +86 -0
  169. data/vendor/cybozulib/test/base/proj/config_test/config_test.vcxproj +86 -0
  170. data/vendor/cybozulib/test/base/proj/csv_test/csv_test.vcxproj +86 -0
  171. data/vendor/cybozulib/test/base/proj/endian_test/endian_test.vcxproj +86 -0
  172. data/vendor/cybozulib/test/base/proj/env_test/env_test.vcxproj +86 -0
  173. data/vendor/cybozulib/test/base/proj/event_test/event_test.vcxproj +86 -0
  174. data/vendor/cybozulib/test/base/proj/file_test/file_test.vcxproj +86 -0
  175. data/vendor/cybozulib/test/base/proj/itoa_test/itoa_test.vcxproj +86 -0
  176. data/vendor/cybozulib/test/base/proj/mecab_test/mecab_test.vcxproj +88 -0
  177. data/vendor/cybozulib/test/base/proj/minixml_test/minixml_test.vcxproj +86 -0
  178. data/vendor/cybozulib/test/base/proj/mmap_test/mmap_test.vcxproj +86 -0
  179. data/vendor/cybozulib/test/base/proj/serializer_test/serializer_test.vcxproj +86 -0
  180. data/vendor/cybozulib/test/base/proj/sha1_test/sha1_test.vcxproj +86 -0
  181. data/vendor/cybozulib/test/base/proj/stream_test/stream_test.vcxproj +86 -0
  182. data/vendor/cybozulib/test/base/proj/string_operation_test/string_operation_test.vcxproj +86 -0
  183. data/vendor/cybozulib/test/base/proj/string_test/string_test.vcxproj +86 -0
  184. data/vendor/cybozulib/test/base/proj/thread_test/thread_test.vcxproj +86 -0
  185. data/vendor/cybozulib/test/base/proj/time_test/time_test.vcxproj +86 -0
  186. data/vendor/cybozulib/test/base/proj/tls_test/tls_test.vcxproj +86 -0
  187. data/vendor/cybozulib/test/base/proj/zlib_test/zlib_test.vcxproj +86 -0
  188. data/vendor/cybozulib/test/base/random_generator_test.cpp +28 -0
  189. data/vendor/cybozulib/test/base/regex_test.cpp +74 -0
  190. data/vendor/cybozulib/test/base/serializer_test.cpp +483 -0
  191. data/vendor/cybozulib/test/base/sha1_test.cpp +61 -0
  192. data/vendor/cybozulib/test/base/sha2_test.cpp +191 -0
  193. data/vendor/cybozulib/test/base/siphash_test.cpp +33 -0
  194. data/vendor/cybozulib/test/base/socket_test.cpp +76 -0
  195. data/vendor/cybozulib/test/base/stream_test.cpp +101 -0
  196. data/vendor/cybozulib/test/base/string_operation_test.cpp +340 -0
  197. data/vendor/cybozulib/test/base/string_test.cpp +1705 -0
  198. data/vendor/cybozulib/test/base/sucvector_test.cpp +312 -0
  199. data/vendor/cybozulib/test/base/thread_test.cpp +62 -0
  200. data/vendor/cybozulib/test/base/time_test.cpp +164 -0
  201. data/vendor/cybozulib/test/base/tls_test.cpp +50 -0
  202. data/vendor/cybozulib/test/base/wavelet_matrix_test.cpp +145 -0
  203. data/vendor/cybozulib/test/base/zlib_test.cpp +371 -0
  204. data/vendor/cybozulib/test/nlp/Makefile +27 -0
  205. data/vendor/cybozulib/test/nlp/proj/random_test.vcproj +184 -0
  206. data/vendor/cybozulib/test/nlp/proj/sparse_test.vcproj +184 -0
  207. data/vendor/cybozulib/test/nlp/proj/svd_test.vcproj +184 -0
  208. data/vendor/cybozulib/test/nlp/random_test.cpp +62 -0
  209. data/vendor/cybozulib/test/nlp/sparse_test.cpp +347 -0
  210. data/vendor/cybozulib/test/nlp/svd_test.cpp +234 -0
  211. data/vendor/cybozulib/test/nlp/top_score_test.cpp +40 -0
  212. data/vendor/cybozulib/tool/create_vcproj.py +186 -0
  213. data/vendor/cybozulib/tool/vcproj_tmpl.py +185 -0
  214. data/vendor/msoffice/COPYRIGHT +27 -0
  215. data/vendor/msoffice/Makefile +29 -0
  216. data/vendor/msoffice/bin/64/msoc.dll +0 -0
  217. data/vendor/msoffice/bin/64/msocsample.exe +0 -0
  218. data/vendor/msoffice/bin/64/msoffice-crypt.exe +0 -0
  219. data/vendor/msoffice/bin/msoc.dll +0 -0
  220. data/vendor/msoffice/bin/msocsample.exe +0 -0
  221. data/vendor/msoffice/bin/msoffice-crypt.exe +0 -0
  222. data/vendor/msoffice/common.mk +71 -0
  223. data/vendor/msoffice/common.props +26 -0
  224. data/vendor/msoffice/debug.props +14 -0
  225. data/vendor/msoffice/include/attack.hpp +211 -0
  226. data/vendor/msoffice/include/cfb.hpp +777 -0
  227. data/vendor/msoffice/include/crypto_util.hpp +450 -0
  228. data/vendor/msoffice/include/custom_sha1.hpp +342 -0
  229. data/vendor/msoffice/include/decode.hpp +240 -0
  230. data/vendor/msoffice/include/encode.hpp +221 -0
  231. data/vendor/msoffice/include/make_dataspace.hpp +316 -0
  232. data/vendor/msoffice/include/msoc.h +129 -0
  233. data/vendor/msoffice/include/resource.hpp +7 -0
  234. data/vendor/msoffice/include/standard_encryption.hpp +145 -0
  235. data/vendor/msoffice/include/uint32vec.hpp +179 -0
  236. data/vendor/msoffice/include/util.hpp +212 -0
  237. data/vendor/msoffice/lib/.emptydir +0 -0
  238. data/vendor/msoffice/misc/decrypt-xls.vbs +46 -0
  239. data/vendor/msoffice/mk.bat +1 -0
  240. data/vendor/msoffice/mkdll.bat +3 -0
  241. data/vendor/msoffice/msoc.def +13 -0
  242. data/vendor/msoffice/msocsample.py +178 -0
  243. data/vendor/msoffice/msoffice12.sln +31 -0
  244. data/vendor/msoffice/readme.md +110 -0
  245. data/vendor/msoffice/release.props +28 -0
  246. data/vendor/msoffice/src/Makefile +19 -0
  247. data/vendor/msoffice/src/attack.cpp +124 -0
  248. data/vendor/msoffice/src/cfb_test.cpp +77 -0
  249. data/vendor/msoffice/src/minisample.c +54 -0
  250. data/vendor/msoffice/src/msocdll.cpp +276 -0
  251. data/vendor/msoffice/src/msocsample.c +136 -0
  252. data/vendor/msoffice/src/msoffice-crypt.cpp +219 -0
  253. data/vendor/msoffice/src/proj/attack/attack.vcxproj +88 -0
  254. data/vendor/msoffice/src/proj/main/msoffice-crypt.vcxproj +88 -0
  255. data/vendor/msoffice/src/sha1.cpp +234 -0
  256. data/vendor/msoffice/test/Makefile +20 -0
  257. data/vendor/msoffice/test/cfb_test.cpp +74 -0
  258. data/vendor/msoffice/test/hash_test.cpp +59 -0
  259. data/vendor/msoffice/test/proj/cfb/cfb_test.vcxproj +90 -0
  260. data/vendor/msoffice/test/proj/hash/hash_test.vcxproj +90 -0
  261. data/vendor/msoffice/test/sampl.bat +8 -0
  262. data/vendor/msoffice/test_all.py +46 -0
  263. data/vendor/update +4 -0
  264. metadata +351 -0
@@ -0,0 +1,149 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief line stream class
5
+ */
6
+ #include <string>
7
+ #include <memory.h>
8
+ #include <iosfwd>
9
+ #include <cybozu/file.hpp>
10
+
11
+ namespace cybozu {
12
+
13
+ namespace line_stream {
14
+
15
+ #define CYBOZU_STREAM_CRLF "\x0d\x0a"
16
+
17
+ const char CR = '\x0d';
18
+ const char LF = '\x0a';
19
+ const char CRLF[] = CYBOZU_STREAM_CRLF;
20
+
21
+ } // line_stream
22
+
23
+ /**
24
+ construct lines from reader
25
+ accept 0x0d 0xa and 0x0a and remove them
26
+ next() returns one line without CRLF
27
+ throw exception if line.size() > maxLineSize (line.size() does not include CRLF)
28
+
29
+ Remark:next() may return the last data without CRLF
30
+
31
+ Reader must have size_t readSome(char *buf, size_t size); method
32
+
33
+ How to use this
34
+
35
+ LinstStreamT<Reader> lineStream(reader);
36
+ for (;;) {
37
+ std::string line;
38
+ if (!lineStream.next(line)) break;
39
+ }
40
+ */
41
+ template<class Reader>
42
+ class LineStreamT {
43
+ Reader& reader_;
44
+ size_t maxLineSize_;
45
+ std::string buf_;
46
+ size_t bufSize_;
47
+ const char *next_;
48
+ bool eof_;
49
+ LineStreamT(const LineStreamT&);
50
+ void operator=(const LineStreamT&);
51
+ void verifySize(const char *begin, const char *end) const
52
+ {
53
+ if (static_cast<uintptr_t>(end - begin) > maxLineSize_) {
54
+ throw cybozu::Exception("LineStreamT:next:line is too long") << cybozu::exception::makeString(begin, 10);
55
+ }
56
+ }
57
+ public:
58
+ explicit LineStreamT(Reader& reader, size_t maxLineSize = 1024 * 2)
59
+ : reader_(reader)
60
+ , maxLineSize_(maxLineSize)
61
+ , buf_(maxLineSize * 2, 0)
62
+ , bufSize_(0)
63
+ , next_(buf_.data())
64
+ , eof_(false)
65
+ {
66
+ }
67
+ /**
68
+ get line without CRLF
69
+ @param begin [out] begin of line
70
+ @param end [out] end of line
71
+ @retval true if sucess
72
+ @retval false if not data
73
+ */
74
+ bool next(const char **begin, const char **end)
75
+ {
76
+ if (eof_) return false;
77
+ for (;;) {
78
+ const size_t remainSize = &buf_[bufSize_] - next_;
79
+ if (remainSize > 0) {
80
+ const char *endl = static_cast<const char *>(memchr(next_, cybozu::line_stream::LF, remainSize));
81
+ if (endl) {
82
+ if (endl > next_ && endl[-1] == cybozu::line_stream::CR) {
83
+ *end = endl - 1;
84
+ } else {
85
+ *end = endl;
86
+ }
87
+ *begin = next_;
88
+ verifySize(*begin, *end);
89
+ next_ = endl + 1;
90
+ return true;
91
+ }
92
+ // move next_ to top of buf_
93
+ for (size_t i = 0; i < remainSize; i++) {
94
+ buf_[i] = next_[i];
95
+ }
96
+ bufSize_ = remainSize;
97
+ } else {
98
+ bufSize_ = 0;
99
+ }
100
+ next_ = buf_.data();
101
+ size_t readSize = reader_.readSome(&buf_[bufSize_], buf_.size() - bufSize_);
102
+ if (readSize == 0) {
103
+ eof_ = true;
104
+ if (bufSize_ == 0) return false;
105
+ if (bufSize_ > maxLineSize_) {
106
+ throw cybozu::Exception("LineStreamT:next:no CRLF");
107
+ }
108
+ // take all remain buffer
109
+ *begin= buf_.data();
110
+ *end = &buf_[bufSize_];
111
+ verifySize(*begin, *end);
112
+ return true;
113
+ }
114
+ bufSize_ += readSize;
115
+ }
116
+ }
117
+ /**
118
+ get line
119
+ */
120
+ bool next(std::string& line)
121
+ {
122
+ const char *begin;
123
+ const char *end;
124
+ if (next(&begin, &end)) {
125
+ line.assign(begin, end);
126
+ return true;
127
+ }
128
+ return false;
129
+ }
130
+ /*
131
+ get remaining raw data
132
+ */
133
+ void getRemain(std::string& remain) const
134
+ {
135
+ if (eof_) {
136
+ remain.clear();
137
+ } else {
138
+ remain.assign(next_, &buf_[bufSize_]);
139
+ }
140
+ }
141
+ std::string getRemain() const
142
+ {
143
+ std::string remain;
144
+ getRemain(remain);
145
+ return remain;
146
+ }
147
+ };
148
+
149
+ } // cybozu
@@ -0,0 +1,21 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief link libeay32.lib of openssl
5
+ @author MITSUNARI Shigeo(@herumi)
6
+ */
7
+ #if defined(_WIN32) && defined(_MT)
8
+ #if _MSC_VER >= 1900 // VC2015
9
+ #ifdef _WIN64
10
+ #pragma comment(lib, "mt/14/libeay32.lib")
11
+ #else
12
+ #pragma comment(lib, "mt/14/32/libeay32.lib")
13
+ #endif
14
+ // #elif _MSC_VER == 1800 // VC2013
15
+ #else
16
+ #pragma comment(lib, "mt/12/libeay32.lib")
17
+ #endif
18
+ #pragma comment(lib, "advapi32.lib")
19
+ #pragma comment(lib, "gdi32.lib")
20
+ #pragma comment(lib, "user32.lib")
21
+ #endif
@@ -0,0 +1,18 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief link mpir/mpirxx of mpir
5
+ @author MITSUNARI Shigeo(@herumi)
6
+ */
7
+ #if defined(_WIN32) && defined(_MT)
8
+ #if _MSC_VER >= 1900 // VC2015, VC2017(1910)
9
+ #pragma comment(lib, "mt/14/mpir.lib")
10
+ #pragma comment(lib, "mt/14/mpirxx.lib")
11
+ #elif _MSC_VER == 1800 // VC2013
12
+ #pragma comment(lib, "mt/12/mpir.lib")
13
+ #pragma comment(lib, "mt/12/mpirxx.lib")
14
+ #elif _MSC_VER == 1700 // VC2012
15
+ #pragma comment(lib, "mt/11/mpir.lib")
16
+ #pragma comment(lib, "mt/11/mpirxx.lib")
17
+ #endif
18
+ #endif
@@ -0,0 +1,19 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief link ssleay32.lib of openssl
5
+ @author MITSUNARI Shigeo(@herumi)
6
+ */
7
+ #if defined(_WIN32) && defined(_MT)
8
+ #if _MSC_VER >= 1900 // VC2015
9
+ #ifdef _WIN64
10
+ #pragma comment(lib, "mt/14/ssleay32.lib")
11
+ #else
12
+ #pragma comment(lib, "mt/14/32/ssleay32.lib")
13
+ #endif
14
+ // #elif _MSC_VER == 1800 // VC2013
15
+ #else
16
+ #pragma comment(lib, "mt/12/ssleay32.lib")
17
+ #endif
18
+ #pragma comment(lib, "user32.lib")
19
+ #endif
@@ -0,0 +1,237 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief logger
5
+
6
+ @author MITSUNARI Shigeo(@herumi)
7
+ */
8
+ #include <cybozu/format.hpp>
9
+ #include <cybozu/time.hpp>
10
+ #ifdef _WIN32
11
+ #else
12
+ #include <syslog.h>
13
+ #endif
14
+
15
+ namespace cybozu {
16
+
17
+ enum LogPriority {
18
+ LogDebug = 0,
19
+ LogInfo = 1,
20
+ LogWarning = 2,
21
+ LogError = 3
22
+ };
23
+
24
+ namespace log_local {
25
+
26
+ class Logger {
27
+ int priority_;
28
+ FILE *fp_;
29
+ bool doClose_;
30
+ bool useSyslog_;
31
+ bool useMsec_;
32
+ public:
33
+ Logger()
34
+ : priority_(cybozu::LogInfo)
35
+ , fp_(stderr)
36
+ , doClose_(false)
37
+ , useSyslog_(true)
38
+ , useMsec_(false)
39
+ {
40
+ }
41
+ ~Logger() CYBOZU_NOEXCEPT
42
+ {
43
+ closeFile();
44
+ }
45
+ void put(LogPriority priority, const std::string& str)
46
+ {
47
+ if (priority < priority_) return;
48
+ if (fp_) {
49
+ cybozu::Time cur(true);
50
+ if (fprintf(fp_, "%s %s\n", cur.toString(useMsec_).c_str(), str.c_str()) < 0) {
51
+ fprintf(stderr, "ERR:cybozu:Logger:put:fprintf:%s\n", str.c_str());
52
+ }
53
+ if (fflush(fp_) < 0) {
54
+ fprintf(stderr, "ERR:cybozu:Logger:put:fflush:%s\n", str.c_str());
55
+ }
56
+ }
57
+ if (useSyslog_) {
58
+ #ifdef __linux__
59
+ int pri = LOG_CRIT;
60
+ if (priority == LogDebug) {
61
+ pri = LOG_DEBUG;
62
+ } else if (priority == LogInfo) {
63
+ pri = LOG_INFO;
64
+ } else if (priority == LogWarning) {
65
+ pri = LOG_WARNING;
66
+ }
67
+ ::syslog(pri, "%s\n", str.c_str());
68
+ #endif
69
+ }
70
+ }
71
+ void put(LogPriority priority, const char *format, va_list args)
72
+ {
73
+ if (priority < priority_) return;
74
+ std::string str;
75
+ cybozu::vformat(str, format, args);
76
+ put(priority, str);
77
+ }
78
+
79
+ static Logger& getInstance()
80
+ {
81
+ static Logger logger;
82
+ return logger;
83
+ }
84
+ /*
85
+ @note : not thread safe
86
+ @param path [in] open path for log
87
+ */
88
+ void openFile(const std::string& path)
89
+ {
90
+ FILE *fp = 0;
91
+ #ifdef _MSC_VER
92
+ if (fopen_s(&fp, path.c_str(), "a+b")) fp = 0;
93
+ #else
94
+ fp = fopen(path.c_str(), "a+b");
95
+ #endif
96
+ if (fp == 0) throw cybozu::Exception("cybozu:Logger:openFile") << path;
97
+ if (!closeFile()) throw cybozu::Exception("cybozu:Logger:openFile:fail to closeFile");
98
+ fp_ = fp;
99
+ doClose_ = true;
100
+ useSyslog_ = false;
101
+ }
102
+ /*
103
+ set FILE pointer
104
+ @param fp [in] write log to fp if fp != NULL
105
+ @note Logger does not close the pointer
106
+ */
107
+ void set(FILE *fp)
108
+ {
109
+ if (!closeFile()) throw cybozu::Exception("cybozu:Logger:set:fail to closeFile");
110
+ fp_ = fp;
111
+ doClose_ = false;
112
+ useSyslog_ = false;
113
+ }
114
+ /*
115
+ use syslog if useSyslog is true
116
+ */
117
+ void useSyslog(bool useSyslog)
118
+ {
119
+ useSyslog_ = useSyslog;
120
+ }
121
+ bool closeFile() CYBOZU_NOEXCEPT
122
+ {
123
+ if (!doClose_ || fp_ == 0) return true;
124
+ if (fp_ == stdout || fp_ == stderr) {
125
+ fp_ = NULL;
126
+ return true;
127
+ }
128
+ bool isOK = fclose(fp_) == 0;
129
+ fp_ = NULL;
130
+ return isOK;
131
+ }
132
+ void setPriority(LogPriority priority)
133
+ {
134
+ priority_ = priority;
135
+ }
136
+ void setUseMsec(bool useMsec)
137
+ {
138
+ useMsec_ = useMsec;
139
+ }
140
+ };
141
+
142
+ } // cybozu::log_local
143
+
144
+ /*
145
+ write log to path(default is stderr, syslog)
146
+ @param path [in] open path for log
147
+ @note this function is not thread safe
148
+ */
149
+ inline void OpenLogFile(const std::string& path)
150
+ {
151
+ return log_local::Logger::getInstance().openFile(path);
152
+ }
153
+
154
+ /*
155
+ set FILE pointer
156
+ @param fp [in] write log to fp if fp != NULL
157
+ @note Logger does not close the pointer
158
+ @note this function is not thread safe
159
+ */
160
+ inline void SetLogFILE(FILE *fp)
161
+ {
162
+ return log_local::Logger::getInstance().set(fp);
163
+ }
164
+
165
+ /*
166
+ use syslog if useSyslog is true
167
+ */
168
+ inline void useSyslog(bool useSyslog)
169
+ {
170
+ log_local::Logger::getInstance().useSyslog(useSyslog);
171
+ }
172
+ /*
173
+ set priority(default cybozu::LogInfo)
174
+ does not show the message of which is less or equal to the priority
175
+ */
176
+ inline void SetLogPriority(LogPriority priority)
177
+ {
178
+ log_local::Logger::getInstance().setPriority(priority);
179
+ }
180
+ /*
181
+ set useMsec
182
+ */
183
+ inline void SetLogUseMsec(bool useMsec = true)
184
+ {
185
+ log_local::Logger::getInstance().setUseMsec(useMsec);
186
+ }
187
+ /*
188
+ write log like printf
189
+ Linux : default is syslog
190
+ Windows : default is file(use openFile)
191
+ */
192
+ #ifdef __GNUC__
193
+ inline void PutLog(LogPriority priority, const char *format, ...) CYBOZU_NOEXCEPT __attribute__((format(printf, 2, 3)));
194
+ #endif
195
+ inline void PutLog(LogPriority priority, const char *format, ...) CYBOZU_NOEXCEPT
196
+ try
197
+ {
198
+ va_list args;
199
+ va_start(args, format);
200
+ log_local::Logger::getInstance().put(priority, format, args);
201
+ va_end(args);
202
+ } catch (std::exception& e) {
203
+ fprintf(stderr, "faital error in cybozu::PutLog %s\n", e.what());
204
+ } catch (...) {
205
+ fprintf(stderr, "faital error in cybozu::PutLog\n");
206
+ }
207
+
208
+ } // cybozu
209
+
210
+ namespace cybozu {
211
+ /*
212
+ write log like std::cout
213
+ Linux : default is syslog
214
+ Windows : default is file(use openFile)
215
+ */
216
+ class Log {
217
+ LogPriority pri_;
218
+ std::ostringstream os_;
219
+ Log(const Log&);
220
+ void operator=(const Log&);
221
+ public:
222
+ explicit Log(LogPriority priority = cybozu::LogInfo) : pri_(priority) { }
223
+ ~Log() CYBOZU_NOEXCEPT
224
+ {
225
+ try {
226
+ log_local::Logger::getInstance().put(pri_, os_.str());
227
+ } catch (std::exception& e) {
228
+ fprintf(stderr, "faital error in cybozu::Log %s\n", e.what());
229
+ } catch (...) {
230
+ fprintf(stderr, "faital error in cybozu::Log\n");
231
+ }
232
+ }
233
+ template<class T>
234
+ Log& operator<<(const T& t) { os_ << t; return *this; }
235
+ };
236
+
237
+ } // cybozu