Changeset 82c8788 in rtems-tools


Ignore:
Timestamp:
Apr 14, 2018, 4:15:07 AM (16 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
ec419a0
Parents:
b7c4753
Message:

rtemstoolkit/rtl-file: Remove a file on close if requested

Close #3395

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • linkers/rtems-ld.cpp

    rb7c4753 r82c8788  
    505505        else if (output_type == "rap")
    506506        {
    507           rld::outputter::application (output, entry, exit,
    508                                        dependents, cache, symbols,
    509                                        one_file);
     507          rld::outputter::rap_application (output, entry, exit,
     508                                           dependents, cache, symbols,
     509                                           one_file);
    510510          if (!outra.empty ())
    511511          {
  • linkers/rtems-ra.cpp

    rb7c4753 r82c8788  
    376376            /* Todo: include absolute name for rap_name */
    377377
    378             rld::outputter::application (rap_name, entry, exit,
    379                                          dependents, *cache, symbols,
    380                                          true);
     378            rld::outputter::rap_application (rap_name, entry, exit,
     379                                             dependents, *cache, symbols,
     380                                             true);
    381381          }
    382382
  • rtemstoolkit/rld-files.cpp

    rb7c4753 r82c8788  
    230230        fd_ (-1),
    231231        symbol_refs (0),
    232         writable (false)
     232        writable (false),
     233        remove (false)
    233234    {
    234235    }
     
    239240        fd_ (-1),
    240241        symbol_refs (0),
    241         writable (false)
     242        writable (false),
     243        remove (false)
    242244    {
    243245    }
     
    247249        fd_ (-1),
    248250        symbol_refs (0),
    249         writable (false)
     251        writable (false),
     252        remove (false)
    250253    {
    251254    }
     
    256259        std::cerr << "rtl:file:image: references when destructing";
    257260      if (fd_ >= 0)
     261      {
    258262        ::close (fd_);
     263        if (writable && remove)
     264        {
     265          if (rld::verbose () >= RLD_VERBOSE_INFO)
     266            std::cout << "image::close: removing " << name ().full ()
     267                        << std::endl;
     268          ::unlink (name_.path ().c_str ());
     269        }
     270      }
    259271    }
    260272
     
    314326          ::close (fd_);
    315327          fd_ = -1;
     328          if (writable && remove)
     329          {
     330            if (rld::verbose () >= RLD_VERBOSE_INFO)
     331              std::cout << "image::close: removing " << name ().full ()
     332                        << std::endl;
     333            ::unlink (name_.path ().c_str ());
     334            remove = false;
     335          }
    316336        }
    317337      }
  • rtemstoolkit/rld-files.h

    rb7c4753 r82c8788  
    389389      }
    390390
     391      /**
     392       * Remove a writable file on close. This flag can be set when an error
     393       * happens while writing a file.
     394       */
     395      void remove_on_close () {
     396        remove = true;
     397      }
     398
    391399    private:
    392400
     
    397405      int       symbol_refs; //< The number of symbols references made.
    398406      bool      writable;    //< The image is writable.
     407      bool      remove;      //< Remove the image on close if writable.
    399408    };
    400409
  • rtemstoolkit/rld-outputter.cpp

    rb7c4753 r82c8788  
    333333      {
    334334        out.close ();
     335        ::unlink (name.c_str ());
    335336        throw;
    336337      }
     
    411412      {
    412413        delete [] buffer;
     414        app.remove_on_close ();
    413415        app.close ();
    414416        throw;
     
    428430
    429431    void
    430     application (const std::string&        name,
    431                  const std::string&        entry,
    432                  const std::string&        exit,
    433                  const files::object_list& dependents,
    434                  const files::cache&       cache,
    435                  const symbols::table&     symbols,
    436                  bool                      one_file)
     432    rap_application (const std::string&        name,
     433                     const std::string&        entry,
     434                     const std::string&        exit,
     435                     const files::object_list& dependents,
     436                     const files::cache&       cache,
     437                     const symbols::table&     symbols,
     438                     bool                      one_file)
    437439    {
    438440      if (rld::verbose () >= RLD_VERBOSE_INFO)
     
    459461      catch (...)
    460462      {
     463        app.remove_on_close ();
    461464        app.close ();
    462465        throw;
  • rtemstoolkit/rld-outputter.h

    rb7c4753 r82c8788  
    112112     * @param symbols The symbol table used to resolve the application.
    113113     */
    114     void application (const std::string&        name,
    115                       const std::string&        entry,
    116                       const std::string&        exit,
    117                       const files::object_list& dependents,
    118                       const files::cache&       cache,
    119                       const symbols::table&     symbols,
    120                       bool                      one_file);
     114    void rap_application (const std::string&        name,
     115                          const std::string&        entry,
     116                          const std::string&        exit,
     117                          const files::object_list& dependents,
     118                          const files::cache&       cache,
     119                          const symbols::table&     symbols,
     120                          bool                      one_file);
    121121
    122122  }
Note: See TracChangeset for help on using the changeset viewer.