• `basic_string<unsigned char>` implies use of
    `char_traits<unsigned char>`.
    
    This char_traits specialization is not standard C++, and will be
    removed from LibC++ as of LLVM 18. To ensure continued LibC++
    compatibility it needs to be removed.
    
    There are two possible replacements here: `std::string` (e.g.
    `std::basic_string<char>`), or `std::vector<unsigned char>`.
    
    I have opted for vector since this code is dealing with a binary
    buffer; though probably either way is fine (why does C++ even have
    strings anyway??).
    
    https://github.com/qpdf/qpdf/issues/1024
    Zoe Clifford authored
     
    Browse File »










  • (patrepl and cleanpatch are my own utilities)
    
    patrepl s/PointerHolder/std::shared_ptr/g {include,libqpdf}/qpdf/*.hh
    patrepl s/PointerHolder/std::shared_ptr/g libqpdf/*.cc
    patrepl s/make_pointer_holder/std::make_shared/g libqpdf/*.cc
    patrepl s/make_array_pointer_holder/QUtil::make_shared_array/g libqpdf/*.cc
    patrepl s,qpdf/std::shared_ptr,qpdf/PointerHolder, **/*.cc **/*.hh
    git restore include/qpdf/PointerHolder.hh
    cleanpatch
    ./format-code
    Jay Berkenbilt authored
     
    Browse File »


  • This comment expands all tabs using an 8-character tab-width. You
    should ignore this commit when using git blame or use git blame -w.
    
    In the early days, I used to use tabs where possible for indentation,
    since emacs did this automatically. In recent years, I have switched
    to only using spaces, which means qpdf source code has been a mixture
    of spaces and tabs. I have avoided cleaning this up because of not
    wanting gratuitous whitespaces change to cloud the output of git
    blame, but I changed my mind after discussing with users who view qpdf
    source code in editors/IDEs that have other tab widths by default and
    in light of the fact that I am planning to start applying automatic
    code formatting soon.
    Jay Berkenbilt authored
     
    Browse File »




  • Have classes contain only a single private member of type
    PointerHolder<Members>. This makes it safe to change the structure of
    the Members class without breaking binary compatibility. Many of the
    classes already follow this pattern quite successfully. This brings in
    the rest of the class that are part of the public API.
    Jay Berkenbilt authored
     
    Browse File »


  • Rather than keeping a list of buffers for every write, accumulate
    bytes in a single buffer, doubling the size of the buffer when needed
    to accommodate new data.
    
    This is not the best possible implementation, but the change was
    implemented in this way to avoid changing the shape of Pl_Buffer and
    thus breaking backward compatibility.
    Jay Berkenbilt authored
     
    Browse File »