Author: Eric Bavier Date: 2020-01-13 Url: https://notabug.org/bavier/guix-bavier/raw/master/bavier/patches/ +xplanet-cxx11-eof.patch diff --git a/src/libannotate/addArcs.cpp b/src/libannotate/addArcs.cpp index 2ee06c0..4fdb343 100644 --- a/src/libannotate/addArcs.cpp +++ b/src/libannotate/addArcs.cpp @@ -258,7 +258,7 @@ addArcs(PlanetProperties *planetProperties, Planet *planet, { ifstream inFile(arcFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; - while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL) + while (!inFile.getline (line, MAX_LINE_LENGTH, '\n').eof()) readArcFile(line, planet, view, projection, planetProperties, annotationMap); @@ -292,7 +292,7 @@ addArcs(View *view, multimap &annotationMap) { ifstream inFile(arcFile.c_str()); char *line = new char[256]; - while (inFile.getline (line, 256, '\n') != NULL) + while (!inFile.getline (line, 256, '\n').eof()) readArcFile(line, NULL, view, NULL, NULL, annotationMap); inFile.close(); diff --git a/src/libannotate/addMarkers.cpp b/src/libannotate/addMarkers.cpp index dde51c1..b641e6a 100644 --- a/src/libannotate/addMarkers.cpp +++ b/src/libannotate/addMarkers.cpp @@ -429,7 +429,7 @@ addMarkers(PlanetProperties *planetProperties, Planet *planet, { ifstream inFile(markerFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; - while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL) + while (!inFile.getline (line, MAX_LINE_LENGTH, '\n').eof()) { unsigned char color[3]; memcpy(color, planetProperties->MarkerColor(), 3); @@ -475,7 +475,7 @@ addMarkers(View *view, const int width, const in
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (test-union)
  #:use-module (guix tests)
  #:use-module (guix store)
  #:use-module (guix utils)
  #:use-module (guix derivations)
  #:use-module (guix packages)
  #:use-module (guix build union)
  #:use-module ((guix build utils)
                #:select (with-directory-excursion directory-exists?))
  #:use-module (gnu packages bootstrap)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-64)
  #:use-module (rnrs io ports)
  #:use-module (ice-9 match))

;; Exercise the (guix build union) module.

(define %store
  (open-connection-for-tests))


(test-begin "union")

(test-assert "union-build with symlink to directory"
  ;; http://bugs.gnu.org/17083
  ;; Here both ONE and TWO provide an element called 'foo', but in ONE it's a
  ;; directory whereas in TWO it's a symlink to a directory.
  (let* ((one     (build-expression->derivation
                   %store "one"
                   '(begin
                      (use-modules (guix build utils) (srfi srfi-26))
                      (let ((foo (string-append %output "/foo")))
                        (mkdir-p foo)
                        (call-with-output-file (string-append foo "/one")
                          (cut display "one" <>))))
                   #:modules '((guix build utils))))
         (two     (build-expression->derivation
                   %store "two"
                   '(begin
                      (use-modules (guix build utils) (srfi srfi-26))
                      (let ((foo (string-append %output "/foo"))
                            (bar (string-append %output "/bar")))
                        (mkdir-p bar)
                        (call-with-output-file (string-append bar "/two")
                          (cut display "two" <>))
                        (symlink "bar" foo)))
                   #:modules '((guix build utils))))
         (builder '(begin
                     (use-modules (guix build union))

                     (union-build (assoc-ref %outputs "out")
                                  (list (assoc-ref %build-inputs "one")
                                        (assoc-ref %build-inputs "two")))))
         (drv
          (build-expression->derivation %store "union-collision-symlink"
                                        builder
                                        #:inputs `(("one" ,one) ("two" ,two))
                                        #:modules '((guix build union)))))
    (and (build-derivations %store (list drv))
         (with-directory-excursion (pk (derivation->output-path drv))
           (and (string=? "one"
                          (call-with-input-file "foo/one" get-string-all))
                (string=? "two"
                          (call-with-input-file "foo/two" get-string-all))
                (string=? "two"
                          (call-with-input-file "bar/two" get-string-all))
                (not (file-exists? "bar/one")))))))

(test-skip (if (and %store (network-reachable?))
               0
               1))

(test-assert "union-build"
  (let* ((inputs  (map (match-lambda
                        ((name package)
                         `(,name ,(package-derivation %store package))))

                       ;; Purposefully leave duplicate entries.
                       (filter (compose package? cadr)
                               (append %bootstrap-inputs-for-tests
                                       (take %bootstrap-inputs-for-tests 3)))))
         (builder `(begin
                     (use-modules (guix build union))
                     (union-build (assoc-ref %outputs "out")
                                  (map cdr %build-inputs))))
         (drv
          (build-expression->derivation %store "union-test"
                                        builder