void init_modules(void) { /* FIXME: This can cause undefined symbol errors : * smb_register_vfs() isn't available in nmbd, for example */ if(lp_preload_modules()) smb_load_modules(lp_preload_modules()); }
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" }, POPT_COMMON_SAMBA POPT_TABLEEND }; setlinebuf(stdout); pc = poptGetContext("smbiconv", argc, (const char **) argv, long_options, 0); poptSetOtherOptionHelp(pc, "[FILE] ..."); while(poptGetNextOpt(pc) != -1); /* the following functions are part of the Samba debugging facilities. See lib/debug.c */ setup_logging("smbiconv", True); 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(to, from); if((int)cd == -1) { DEBUG(0,("unable to find from or to encoding, exiting...\n")); 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; }