summaryrefslogtreecommitdiff
path: root/source4/torture
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/smbiconv.c236
1 files changed, 0 insertions, 236 deletions
diff --git a/source4/torture/smbiconv.c b/source4/torture/smbiconv.c
deleted file mode 100644
index 45166083b7..0000000000
--- a/source4/torture/smbiconv.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- Charset module tester
-
- Copyright (C) Jelmer Vernooij 2003
- Based on iconv/icon_prog.c from the GNU C Library,
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-static int process_block (smb_iconv_t cd, const char *addr, size_t len, FILE *output)
-{
-#define OUTBUF_SIZE 32768
- const char *start = addr;
- char outbuf[OUTBUF_SIZE];
- char *outptr;
- size_t outlen;
- size_t n;
-
- while (len > 0)
- {
- outptr = outbuf;
- outlen = OUTBUF_SIZE;
- n = smb_iconv (cd, &addr, &len, &outptr, &outlen);
-
- if (outptr != outbuf)
- {
- /* We have something to write out. */
- int errno_save = errno;
-
- if (fwrite (outbuf, 1, outptr - outbuf, output)
- < (size_t) (outptr - outbuf)
- || ferror (output))
- {
- /* Error occurred while printing the result. */
- DEBUG (0, ("conversion stopped due to problem in writing the output"));
- return -1;
- }
-
- errno = errno_save;
- }
-
- if (errno != E2BIG)
- {
- /* iconv() ran into a problem. */
- switch (errno)
- {
- case EILSEQ:
- DEBUG(0,("illegal input sequence at position %ld",
- (long) (addr - start)));
- break;
- case EINVAL:
- DEBUG(0, ("\
-incomplete character or shift sequence at end of buffer"));
- break;
- case EBADF:
- DEBUG(0, ("internal error (illegal descriptor)"));
- break;
- default:
- DEBUG(0, ("unknown iconv() error %d", errno));
- break;
- }
-
- return -1;
- }
- }
-
- return 0;
-}
-
-
-static int process_fd (iconv_t cd, int fd, FILE *output)
-{
- /* we have a problem with reading from a descriptor since we must not
- provide the iconv() function an incomplete character or shift
- sequence at the end of the buffer. Since we have to deal with
- arbitrary encodings we must read the whole text in a buffer and
- process it in one step. */
- static char *inbuf = NULL;
- static size_t maxlen = 0;
- char *inptr = NULL;
- size_t actlen = 0;
-
- while (actlen < maxlen)
- {
- ssize_t n = read (fd, inptr, maxlen - actlen);
-
- if (n == 0)
- /* No more text to read. */
- break;
-
- if (n == -1)
- {
- /* Error while reading. */
- DEBUG(0, ("error while reading the input"));
- return -1;
- }
-
- inptr += n;
- actlen += n;
- }
-
- if (actlen == maxlen)
- while (1)
- {
- ssize_t n;
- char *new_inbuf;
-
- /* Increase the buffer. */
- new_inbuf = (char *) realloc (inbuf, maxlen + 32768);
- if (new_inbuf == NULL)
- {
- DEBUG(0, ("unable to allocate buffer for input"));
- return -1;
- }
- inbuf = new_inbuf;
- maxlen += 32768;
- inptr = inbuf + actlen;
-
- do
- {
- n = read (fd, inptr, maxlen - actlen);
-
- if (n == 0)
- /* No more text to read. */
- break;
-
- if (n == -1)
- {
- /* Error while reading. */
- DEBUG(0, ("error while reading the input"));
- return -1;
- }
-
- inptr += n;
- actlen += n;
- }
- while (actlen < maxlen);
-
- if (n == 0)
- /* Break again so we leave both loops. */
- break;
- }
-
- /* Now we have all the input in the buffer. Process it in one run. */
- return process_block (cd, inbuf, actlen, output);
-}
-
-/* Main function */
-
-int main(int argc, char *argv[])
-{
- const char *file = NULL;
- char *from = "";
- char *to = "";
- char *output = NULL;
- const char *preload_modules[] = {NULL, NULL};
- FILE *out = stdout;
- int fd;
- smb_iconv_t cd;
-
- /* make sure the vars that get altered (4th field) are in
- a fixed location or certain compilers complain */
- poptContext pc;
- struct poptOption long_options[] = {
- POPT_AUTOHELP
- { "from-code", 'f', POPT_ARG_STRING, &from, 0, "Encoding of original text" },
- { "to-code", 't', POPT_ARG_STRING, &to, 0, "Encoding for output" },
- { "output", 'o', POPT_ARG_STRING, &output, 0, "Write output to this file" },
- { "preload-modules", 'p', POPT_ARG_STRING, &preload_modules[0], 0, "Modules to load" },
- { NULL }
- };
-
- setlinebuf(stdout);
-
- pc = poptGetContext("smbiconv", argc, (const char **) argv,
- long_options, 0);
-
- poptSetOtherOptionHelp(pc, "[FILE] ...");
-
- while(poptGetNextOpt(pc) != -1);
-
- if (preload_modules[0]) smb_load_modules(preload_modules);
-
- if(output) {
- out = fopen(output, "w");
-
- if(!out) {
- DEBUG(0, ("Can't open output file '%s': %s, exiting...\n", output, strerror(errno)));
- return 1;
- }
- }
-
- cd = smb_iconv_open_ex(tctx, to, from, lpcfg_parm_bool(tctx->lp_ctx, NULL, "iconv", "use_builtin_handlers", true));
- if((int)cd == -1) {
- DEBUG(0,("unable to find from or to encoding, exiting...\n"));
- if (out != stdout) fclose(out);
- return 1;
- }
-
- while((file = poptGetArg(pc))) {
- if(strcmp(file, "-") == 0) fd = 0;
- else {
- fd = open(file, O_RDONLY);
-
- if(!fd) {
- DEBUG(0, ("Can't open input file '%s': %s, ignoring...\n", file, strerror(errno)));
- continue;
- }
- }
-
- /* Loop thru all arguments */
- process_fd(cd, fd, out);
-
- close(fd);
- }
- poptFreeContext(pc);
-
- fclose(out);
-
- return 0;
-}