rospack_backcompat.cpp
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2008, Willow Garage, Inc., Morgan Quigley
00003  *
00004  * Redistribution and use in source and binary forms, with or without
00005  * modification, are permitted provided that the following conditions are met:
00006  *   * Redistributions of source code must retain the above copyright notice,
00007  *     this list of conditions and the following disclaimer.
00008  *   * Redistributions in binary form must reproduce the above copyright
00009  *     notice, this list of conditions and the following disclaimer in the
00010  *     documentation and/or other materials provided with the distribution.
00011  *   * Neither the names of Stanford University or Willow Garage, Inc. nor the names of its
00012  *     contributors may be used to endorse or promote products derived from
00013  *     this software without specific prior written permission.
00014  *
00015  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00016  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00017  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00018  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00019  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00020  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00021  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00023  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00024  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00025  * POSSIBILITY OF SUCH DAMAGE.
00026  */
00027 
00028 #include "rospack/rospack_backcompat.h"
00029 #include "rospack/rospack.h"
00030 #include "rospack_cmdline.h"
00031 
00032 #include <boost/algorithm/string.hpp>
00033 #include <string.h>
00034 #include <stdio.h>
00035 #include <errno.h>
00036 
00037 namespace rospack
00038 {
00039 
00040 int
00041 ROSPack::run(int argc, char** argv)
00042 {
00043   // allow caching of results between calls (of same process)
00044   static rospack::Rospack rp;
00045   output_.clear();
00046   bool success = rospack::rospack_run(argc, argv, rp, output_);
00047   if(!success)
00048   {
00049     fprintf(stderr, "[librospack]: error while executing command\n");
00050     return 1;
00051   }
00052   return 0;
00053 }
00054 
00055 int
00056 ROSPack::run(const std::string& cmd)
00057 {
00058   // Callers of this method don't make 'rospack' argv[0].
00059   std::string full_cmd = std::string("rospack ") + cmd;
00060 
00061   int argc;
00062   char** argv;
00063   std::vector<std::string> full_cmd_split;
00064   boost::split(full_cmd_split, full_cmd,
00065                boost::is_any_of(" "),
00066                boost::token_compress_on);
00067   argc = full_cmd_split.size();
00068   argv = new char*[argc];
00069   int i = 0;
00070   for(std::vector<std::string>::const_iterator it = full_cmd_split.begin();
00071       it != full_cmd_split.end();
00072       ++it)
00073   {
00074     argv[i] = new char[it->size()+1];
00075     memset(argv[i], 0, it->size()+1);
00076     memcpy(argv[i], it->c_str(), it->size());
00077     i++;
00078   }
00079 
00080   int ret = run(argc, argv);
00081 
00082   for(int i=0; i<argc; i++)
00083     delete[] argv[i];
00084   delete[] argv;
00085 
00086   return ret;
00087 }
00088 
00089 } // namespace rospack


rospack
Author(s): Brian Gerkey, Morgan Quigley, Dirk Thomas
autogenerated on Tue Mar 7 2017 03:26:33