diff options
Diffstat (limited to '3rdParty/libb64/base64/base64.cc')
-rw-r--r-- | 3rdParty/libb64/base64/base64.cc | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/3rdParty/libb64/base64/base64.cc b/3rdParty/libb64/base64/base64.cc new file mode 100644 index 0000000..acab416 --- /dev/null +++ b/3rdParty/libb64/base64/base64.cc @@ -0,0 +1,94 @@ +/* +base64.cc - c++ source to a base64 reference encoder and decoder + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#include <b64/encode.h> +#include <b64/decode.h> + +#include <iostream> +#include <fstream> +#include <string> + +#include <stdlib.h> + +// Function which prints the usage of this executable +void usage() +{ + std::cerr<< \ + "base64: Encodes and Decodes files using base64\n" \ + "Usage: base64 [-e|-d] [input] [output]\n" \ + " Where [-e] will encode the input file into the output file,\n" \ + " [-d] will decode the input file into the output file, and\n" \ + " [input] and [output] are the input and output files, respectively.\n"; +} +// Function which prints the usage of this executable, plus a short message +void usage(const std::string& message) +{ + usage(); + std::cerr<<"Incorrect invocation of base64:\n"; + std::cerr<<message<<std::endl; +} + +int main(int argc, char** argv) +{ + // Quick check for valid arguments + if (argc == 1) + { + usage(); + exit(-1); + } + if (argc != 4) + { + usage("Wrong number of arguments!"); + exit(-1); + } + + // So far so good; try to open the input file + std::string input = argv[2]; + // Note that we have to open the input in binary mode. + // This is due to some operating systems not using binary mode by default. + // Since we will most likely be dealing with binary files when encoding, we + // have to be able to deal with zeros (and other invalid chars) in the input stream. + std::ifstream instream(input.c_str(), std::ios_base::in | std::ios_base::binary); + if (!instream.is_open()) + { + usage("Could not open input file!"); + exit(-1); + } + + // Now try to open the output file + std::string output = argv[3]; + // Again, note that we have to open the ouput in binary mode. + // Similiarly, we will most likely need to deal with zeros in the output stream when we + // are decoding, and the output stream has to be able to use these invalid text chars. + std::ofstream outstream(output.c_str(), std::ios_base::out | std::ios_base::binary); + if (!outstream.is_open()) + { + usage("Could not open output file!"); + exit(-1); + } + + // determine whether we need to encode or decode: + std::string choice = argv[1]; + if (choice == "-d") + { + base64::decoder D; + D.decode(instream, outstream); + } + else if (choice == "-e") + { + base64::encoder E; + E.encode(instream, outstream); + } + else + { + std::cout<<"["<<choice<<"]"<<std::endl; + usage("Please specify -d or -e as first argument!"); + } + + return 0; +} + |