diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-12-13 17:39:38 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-12-13 17:39:38 +0000 |
commit | 58e9918083df89592a4321328ba944ef835861d1 (patch) | |
tree | 24d7b378d3d3a60281f2b0792a5833c8d4e20c0c /utils/base64.c | |
parent | 4aa1048ffd56fa80c32a5a3f87bed02bf73f324a (diff) | |
download | rspamd-58e9918083df89592a4321328ba944ef835861d1.tar.gz rspamd-58e9918083df89592a4321328ba944ef835861d1.zip |
[Minor] Add utility to benchmark base64
Diffstat (limited to 'utils/base64.c')
-rw-r--r-- | utils/base64.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/utils/base64.c b/utils/base64.c new file mode 100644 index 000000000..ea8bafda8 --- /dev/null +++ b/utils/base64.c @@ -0,0 +1,90 @@ +/*- + * Copyright 2016 Vsevolod Stakhov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "config.h" +#include "printf.h" +#include "util.h" +#include "cryptobox.h" +#include "unix-std.h" + +static gdouble total_time = 0; + + +static void +rspamd_process_file (const gchar *fname, gint decode) +{ + gint fd; + gpointer map; + struct stat st; + guint8 *dest; + gsize destlen; + + fd = open (fname, O_RDONLY); + + if (fd == -1) { + rspamd_fprintf (stderr, "cannot open %s: %s", fname, strerror (errno)); + exit (EXIT_FAILURE); + } + + if (fstat (fd, &st) == -1) { + rspamd_fprintf (stderr, "cannot stat %s: %s", fname, strerror (errno)); + exit (EXIT_FAILURE); + } + + map = mmap (NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); + close (fd); + + if (map == MAP_FAILED) { + rspamd_fprintf (stderr, "cannot mmap %s: %s", fname, strerror (errno)); + exit (EXIT_FAILURE); + } + + if (decode) { + destlen = st.st_size / 4 * 3 + 10; + dest = g_malloc (destlen); + rspamd_cryptobox_base64_decode (map, st.st_size, dest, &destlen); + } + else { + dest = rspamd_encode_base64 (map, st.st_size, 80, &destlen); + } + + rspamd_printf ("%*s", (gint)destlen, dest); + g_free (dest); + + munmap (map, st.st_size); +} + +int +main (int argc, char **argv) +{ + gint i, start = 1, decode = 0; + + if (argc > 2 && *argv[1] == '-') { + start = 2; + + if (argv[1][1] == 'd') { + decode = 1; + } + } + + for (i = start; i < argc; i ++) { + if (argv[i]) { + rspamd_process_file (argv[i], decode); + } + } + + return 0; +} |