Normalize the path name before using it to open a config files. This

insures that you always get the same config file regardless of how you
reference the data file.  #90487


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7617 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton
2002-12-04 07:31:53 +00:00
parent f92fe14fac
commit ace48f6712
2 changed files with 38 additions and 1 deletions

View File

@@ -18,6 +18,22 @@
2002-12-03 David Hampton <hampton@employees.org>
* src/scm/main.scm ((gnc:account-file-to-load)): Normalize the
path name before using it to open a config files. #90487
* src/scm/path.scm (gnc:load-user-config-if-needed): Write out a
new 1.8 version of the config file. Add the 1.8 version to the
list of files to try an read when reading the config. #100266
* src/engine/gnc-session.c (gnc_session_load): Don't erase the
just loaded account information because the backend is reporting
that the file is from a previous version. Let the caller decide
after querying the user. #97270.
* src/gnome/window-main.c (gnc_main_window_about_cb): Put the
build date into the about box for development versions of
gnucash. #99775
* src/register/ledger-core/split-register-control.c
(gnc_split_register_move_cursor): Don't delete an empty split if
its the current transaction split. Dangling pointers are no

View File

@@ -512,12 +512,33 @@ string and 'directories' must be a list of strings."
(gnc:debug "UI Shutdown hook.")
(gnc:file-quit))
(define (gnc:normalize-path file)
(let* ((parts-in (string-split file #\/))
(parts-out '()))
;; Convert to a path based at the root
(if (not (string-null? (car parts-in)))
(set! parts-in (append (string-split (getenv "PWD") #\/) parts-in)))
;; Strip out "." and ".." components
(for-each
(lambda (part)
(cond ((string=? part ".") #f)
((string=? part "..") (set! parts-out (cdr parts-out)))
(else (set! parts-out (cons part parts-out)))))
parts-in)
;; Put it back together
(string-join (reverse parts-out) "/")
)
)
(define (gnc:account-file-to-load)
(let ((ok (not (gnc:config-var-value-get gnc:*arg-no-file*)))
(file (if (pair? gnc:*command-line-remaining*)
(car gnc:*command-line-remaining*)
(gnc:history-get-last))))
(and ok (string? file) file)))
(and ok (string? file) (gnc:normalize-path file))))
(define (gnc:load-account-file)
(let ((file (gnc:account-file-to-load)))