summaryrefslogtreecommitdiff
path: root/include
Commit message (Collapse)AuthorAgeFilesLines
* Merge from bugteam team tree.Chad MILLER2009-02-103-5/+5
|\
| * mergingAlexey Botchkov2009-02-051-1/+2
| |\
| | * Bug#40536: SELECT is blocked by INSERT DELAYED waiting onDavi Arnaut2009-02-031-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | upgrading lock, even with low_priority_updates The problem is that there is no mechanism to control whether a delayed insert takes a high or low priority lock on a table. The solution is to modify the delayed insert thread ("handler") to take into account the global value of low_priority_updates when taking table locks. The value of low_priority_updates is retrieved when the insert delayed thread is created and will remain the same for the duration of the thread.
| * | Bug#37995 Error message truncation in test "innodb" in embedded mode.Alexey Botchkov2009-02-052-4/+0
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | code backported from 6.0 per-file messages: include/my_global.h Remove SC_MAXWIDTH. This is unused and irrelevant nowadays. include/my_sys.h Remove errbuf declaration and unused definitions. mysys/my_error.c Remove errbuf definition and move and adjust ERRMSGSIZE. mysys/my_init.c Declare buffer on the stack and use my_snprintf. mysys/safemalloc.c Use size explicitly. It's more than enough for the message at hand. sql/sql_error.cc Use size explicitly. It's more than enough for the message at hand. sql/sql_parse.cc Declare buffer on the stack. Use my_snprintf as it will result in less stack space being used than by a system provided sprintf -- this allows us to put the buffer on the stack without causing much trouble. Also, the use of errbuff here was not thread-safe as the function can be entered concurrently from multiple threads. sql/sql_table.cc Use MYSQL_ERRMSG_SIZE. Extra space is not needed as my_snprintf will nul terminate strings. storage/myisam/ha_myisam.cc Use MYSQL_ERRMSG_SIZE. sql/share/errmsg.txt Error message truncation in test "innodb" in embedded mode filename in the error message can safely take up to 210 symbols.
| * merged 5.1-main -> 5.1-bugteamGeorgi Kodinov2009-01-301-0/+3
| |\
| | * merge: 5.1 -> 5.1-rplLuis Soares2009-01-233-0/+13
| | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | conflicts: Text conflict in client/mysqltest.cc Text conflict in mysql-test/include/wait_until_connected_again.inc Text conflict in mysql-test/lib/mtr_report.pm Text conflict in mysql-test/mysql-test-run.pl Text conflict in mysql-test/r/events_bugs.result Text conflict in mysql-test/r/log_state.result Text conflict in mysql-test/r/myisam_data_pointer_size_func.result Text conflict in mysql-test/r/mysqlcheck.result Text conflict in mysql-test/r/query_cache.result Text conflict in mysql-test/r/status.result Text conflict in mysql-test/suite/binlog/r/binlog_index.result Text conflict in mysql-test/suite/binlog/r/binlog_innodb.result Text conflict in mysql-test/suite/rpl/r/rpl_packet.result Text conflict in mysql-test/suite/rpl/t/rpl_packet.test Text conflict in mysql-test/t/disabled.def Text conflict in mysql-test/t/events_bugs.test Text conflict in mysql-test/t/log_state.test Text conflict in mysql-test/t/myisam_data_pointer_size_func.test Text conflict in mysql-test/t/mysqlcheck.test Text conflict in mysql-test/t/query_cache.test Text conflict in mysql-test/t/rpl_init_slave_func.test Text conflict in mysql-test/t/status.test
| | * \ merge: 5.1 -> 5.1-rplLuis Soares2009-01-083-3/+6
| | |\ \ | | | | | | | | | | | | | | | | | | | | conflicts: Text conflict in mysql-test/lib/mtr_report.pm Text conflict in mysql-test/mysql-test-run.pl
| | * \ \ merge 5.1 --> 5.1-rplAlfranio Correia2008-12-131-5/+5
| | |\ \ \
| | * \ \ \ merging 5.1 -> 5.1 rpl. 3 of 4 conflicts are resolved similarly to ↵Andrei Elkin2008-11-122-5/+11
| | |\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 6.0->6.0-rpl merging. mysql_upgrade results changed due to the error messesge of mysqlcheck has changed.
| | * \ \ \ \ Merging 5.1 main into 5.1-rplMats Kindahl2008-10-232-25/+71
| | |\ \ \ \ \
| | * \ \ \ \ \ Merging 5.1 main into 5.1-rpl.Mats Kindahl2008-10-064-1180/+815
| | |\ \ \ \ \ \
| | * \ \ \ \ \ \ Merge 5.1 main -> 5.1-rplHe Zhenxing2008-09-062-1/+6
| | |\ \ \ \ \ \ \
| | * | | | | | | | Fixning compiler warnings. Fixing build failure for valgrind platform.Mats Kindahl2008-08-221-0/+3
| | | | | | | | | |
* | | | | | | | | | Bug#34309: '_PC' macro redefinitionChad MILLER2009-01-271-1/+0
|/ / / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For reasons that are now a mystery, we had defined a CPP symbol to help ancient compilers work better (in some way that's lost to history). This interferes with at least one modern compiler. Now, don't define the _PC symbol. Those other underscore-leading symbols are suspect also, but at least the names aren't inscrutable. Let's leave them for now.
* | | | | | | | | Fix for bug #37756: enabling fulltext indexes withRamil Kalimullin2009-01-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | myisam_repair_threads > 1 causes crash Problem: parallel repair (myisam_repair_threads > 1) of a myisam table with two or more fulltext keys that use the same parser may lead to a server crash. ALTER TABLE ENABLE KEYS is affected as well. Fix: properly initialize fulltext structures for parallel repair. Note: 1. there's no deterministic test case. 2. now we call parser->init() for each fulltext key (not for each fulltext parser used).
* | | | | | | | | Fix Bug#32831: libmysql should be built with all charsetsTimothy Smith2009-01-131-29/+35
| |_|_|_|_|_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add #define HAVE_CHARSET_name in config-win.h for all character sets that MySQL supports. Add comments to config/ac-macros/character_sets.m4 and config-win.h so hopefully they will be updated in sync.
* | | | | | | | merged 5.1-main -> 5.1-bugteamGeorgi Kodinov2009-01-053-3/+6
|\ \ \ \ \ \ \ \ | | |_|_|_|_|_|/ | |/| | | | | |
| * | | | | | | Merge main 5.1 into 5.1-buildJoerg Bruehe2008-12-101-5/+5
| |\ \ \ \ \ \ \ | | | |_|_|_|_|/ | | |/| | | | |
| * | | | | | | Merge from mysql-5.1.30-releasetimothy.smith@sun.com2008-11-273-3/+6
| |\ \ \ \ \ \ \ | | |_|_|_|_|_|/ | |/| | | | | |
| | * | | | | | Added "Sun Microsystems, Inc." to copyright headers on files modifiedBuild Team2008-11-103-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | since Oct 1st
| | * | | | | | Added the default configure COMMUNITY_SERVER and ENABLED_PROFILING toBuild Team2008-11-091-0/+3
| | | |_|_|_|/ | | |/| | | | | | | | | | | | | | | | | | the Windows configuration file "include/config-win.h".
* | | | | | | 5.0-bugteam->5.1-bugteam mergeSergey Glukhov2008-12-231-0/+1
|\ \ \ \ \ \ \
| * | | | | | | Bug#37575 UCASE fails on monthnameSergey Glukhov2008-12-231-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The MONTHNAME/DAYNAME functions returns binary string, so the LOWER/UPPER functions are not effective on the result of MONTHNAME/DAYNAME call. Character set of the MONTHNAME/DAYNAME function result has been changed to connection character set.
* | | | | | | | Pull from mysql-5.1-bugteam.Alexey Kopytov2008-12-081-16/+0
|\ \ \ \ \ \ \ \ | | |_|_|/ / / / | |/| | | | | |
| * | | | | | | Bug#38522: 5 seconds delay when closing application using embedded serverVladislav Vaintroub2008-12-041-16/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem here is that embedded server starts handle_thread manager thread on mysql_library_init() does not stop it on mysql_library_end(). At shutdown, my_thread_global_end() waits for thread count to become 0, but since we did not stop the thread it will give up after 5 seconds. Solution is to move shutdown for handle_manager thread from kill_server() (mysqld specific) to clean_up() that is used by both embedded and mysqld. This patch also contains some refactorings - to avoid duplicate code, start_handle_manager() and stop_handle_manager() functions are introduced. Unused variables are eliminated. handle_manager does not rely on global variable abort_loop anymore to stop (abort_loop is not set for embedded). Note: Specifically on Windows and when using DBUG version of libmysqld, the complete solution requires removing obsolete code my_thread_init() from my_thread_var(). This has a side effect that a DBUG statement after my_thread_end() can cause thread counter to be incremented, and embedded will hang for some seconds. Or worse, my_thread_init() will crash if critical sections have been deleted by the global cleanup routine that runs in a different thread. This patch also fixes and revert prior changes for Bug#38293 "Libmysqld crash in mysql_library_init if language file missing". Root cause of the crash observed in Bug#38293 was bug in my_thread_init() described above
* | | | | | | | Merge from mysql-5.0-bugteam to mysql-5.1-bugteam.Alexey Kopytov2008-12-072-0/+12
|\ \ \ \ \ \ \ \ | |/ / / / / / / |/| / / / / / / | |/ / / / / /
| * | | | | | Fix for bug #27483: Casting 'scientific notation type' to 'unsigned Alexey Kopytov2008-12-032-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | bigint' fails on windows. Visual Studio does not take into account some x86 hardware limitations which leads to incorrect results when converting large DOUBLE values to BIGINT UNSIGNED ones. Fixed by adding a workaround for double->ulonglong conversion on Windows.
* | | | | | | mergingAlexey Botchkov2008-11-191-0/+16
|\ \ \ \ \ \ \
| * | | | | | | Bug#38293 Libmysqld crash in mysql_library_init if language file missingAlexey Botchkov2008-11-191-0/+16
| | |_|_|_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | That's a Win-specific error. When we create libmysqld.dll we have many libraries like mysys, dbug, strings, etc linked into that dll, so the application built upon this library shouldn't link these libraries to itself, rather use those inside the dll. Fixed by redirecting calls into the libmysqld.dll per-file comments: dbug/dbug.c Bug#38293 Libmysqld crash in mysql_library_init if language file missing fake _db_something definitions added include/my_dbug.h Bug#38293 Libmysqld crash in mysql_library_init if language file missing fake _db_something declarations added libmysqld/examples/CMakeLists.txt Bug#38293 Libmysqld crash in mysql_library_init if language file missing superfluous libraries removed from linking libmysqld/libmysqld.def Bug#38293 Libmysqld crash in mysql_library_init if language file missing set of mysys functions added to the export section
* | | | | | | mergingAlexey Botchkov2008-11-191-5/+5
|\ \ \ \ \ \ \ | |_|_|/ / / / |/| | | | | |
| * | | | | | Bug #35999 When using the embedded server a wrong message comes.Alexey Botchkov2008-06-161-5/+5
| | | | | | | | | | | | | | | | | | | | | HAVE_REPLICATION was on for the embedded server as the #define was in wrong place.
* | | | | | | Bug#39571 abi_check Does not create all prerequisitesV Narayanan2008-10-271-5/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The abi_check target instroduced as part of WL#4380 verifies changes to mysql.h. mysql.h in turn includes mysql_version.h. mysql_version.h is a file that is generated during the configure phase. We must ensure that mysql_version.h is cleaned only during distclean and not during clean.
* | | | | | | Bug#38477: my_pthread_setprio can change dispatch class on Solaris, not just ↵Davi Arnaut2008-10-151-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | priority The problem is that the function used by the server to increase the thread's priority (pthread_setschedparam) has the unintended side-effect of changing the calling thread scheduling policy, possibly overwriting a scheduling policy set by a sysadmin. The solution is to rely on the pthread_setschedprio function, if available, as it only changes the scheduling priority and does not change the scheduling policy. This function is usually available on Solaris and Linux, but it use won't work by default on Linux as the the default scheduling policy only accepts a static priority 0 -- this is acceptable for now as priority changing on Linux is broken anyway.
* | | | | | | Bug#38941: fast mutexes in MySQL 5.1 have mutex contention when calling random()Davi Arnaut2008-10-151-0/+1
| |_|_|/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem is that MySQL's 'fast' mutex implementation uses the random() routine to determine the spin delay. Unfortunately, the routine interface is not thead-safe and some implementations (eg: glibc) might use a internal lock to protect the RNG state, causing excessive locking contention if lots of threads are spinning on a MySQL's 'fast' mutex. The code was also misusing the value of the RAND_MAX macro, this macro represents the largest value that can be returned from the rand() function, not random(). The solution is to use the quite simple Park-Miller random number generator. The initial seed is set to 1 because the previously used generator wasn't being seeded -- the initial seed is 1 if srandom() is not called. Futhermore, the 'fast' mutex implementation has several shortcomings and provides no measurable performance benefit. Therefore, its use is not recommended unless it provides directly measurable results.
* | | | | | mergeIngo Struewing2008-10-011-0/+8
|\ \ \ \ \ \
| * | | | | | Bug#34306: Can't make copy of log tables when server binary log is enabledDavi Arnaut2008-09-291-0/+8
| | |/ / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem is that when statement-based replication was enabled, statements such as INSERT INTO .. SELECT FROM .. and CREATE TABLE .. SELECT FROM need to grab a read lock on the source table that does not permit concurrent inserts, which would in turn be denied if the source table is a log table because log tables can't be locked exclusively. The solution is to not take such a lock when the source table is a log table as it is unsafe to replicate log tables under statement based replication. Furthermore, the read lock that does not permits concurrent inserts is now only taken if statement-based replication is enabled and if the source table is not a log table.
* | | | | | Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE ↵Ingo Struewing2008-10-011-25/+63
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | engine. This patch contains fixes for two problems: 1. As originally reported, the server crashed on Mac OS X when trying to access an EXAMPLE table after the EXAMPLE plugin was installed. It turned out that the dynamically loaded EXAMPLE plugin called the function hash_earch() from a Mac OS X system library, instead of hash_earch() from MySQL's mysys library. Makefile.am in storage/example does not include libmysys. So the Mac OS X linker arranged the hash_search() function to be linked to the system library when the shared object is loaded. One possible solution would be to include libmysys into the linkage of dynamic plugins. But then we must have a libmysys.so, which must be used by the server too. This could have a minimal performance impact, but foremost the change seems to bee too risky at the current state of MySQL 5.1. The selected solution is to rename MySQL's hash_search() to my_hash_search() like it has been done before with hash_insert() and hash_reset(). Since this is the third time, we need to rename a hash_*() function, I did renamed all hash_*() functions to my_hash_*(). To avoid changing a zillion calls to these functions, and announcing this to hundreds of developers, I added defines that map the old names to the new names. This change is in hash.h and hash.c. 2. The other problem was improper implementation of the handlerton-to-plugin mapping. We use a fixed-size array to hold a plugin reference for each handlerton. On every install of a handler plugin, we allocated a new slot of the array. On uninstall we did not free it. After some uninstall/install cycles the array overflowed. We did not check for overflow. One fix is to check for overflow to stop the crashes. Another fix is to free the array slot at uninstall and search for a free slot at plugin install. This change is in handler.cc.
* | | | | merging mysql-5.1->mysql-5.1-seaNarayanan V2008-09-042-1/+6
|\ \ \ \ \ | | |_|_|/ | |/| | |
| * | | | mergingAlexey Botchkov2008-08-232-0/+5
| |\ \ \ \ | | | |/ / | | |/| |
| | * | | Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY.Alexey Botchkov2008-08-222-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | test_if_data_home_dir fixed to look into real path. Checks added to mi_open for symlinks into data home directory. per-file messages: include/my_sys.h Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. my_is_symlink interface added include/myisam.h Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. myisam_test_invalid_symlink interface added myisam/mi_check.c Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. mi_open_datafile calls modified myisam/mi_open.c Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. code added to mi_open to check for symlinks into data home directory. mi_open_datafile now accepts 'original' file path to check if it's an allowed symlink. myisam/mi_static.c Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. myisam_test_invlaid_symlink defined myisam/myisamchk.c Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. mi_open_datafile call modified myisam/myisamdef.h Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. mi_open_datafile interface modified - 'real_path' parameter added mysql-test/r/symlink.test Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. error codes corrected as some patch now rejected pointing inside datahome mysql-test/r/symlink.result Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. error messages corrected in the result mysys/my_symlink.c Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. my_is_symlink() implementsd my_realpath() now returns the 'realpath' even if a file isn't a symlink sql/mysql_priv.h Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. test_if_data_home_dir interface sql/mysqld.cc Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. myisam_test_invalid_symlik set with the 'test_if_data_home_dir' sql/sql_parse.cc Bug#32167 another privilege bypass with DATA/INDEX DIRECTORY. error messages corrected test_if_data_home_dir code fixed
| * | | | Fix merge problem: make sf_malloc_cur_memory definitions match in headers ↵Sergey Petrunia2008-08-201-1/+1
| | |_|/ | |/| | | | | | | | | | and source
* | | | WL#4380Narayanan V2008-08-081-0/+8
| | | | | | | | | | | | | | | | 1) Disabled abi_check rule for all compilers except gcc 2) restored the -dI option to retain the header information.
* | | | WL#4380Narayanan V2008-08-061-8/+0
| | | | | | | | | | | | | | | | | | | | | | | | 1) Remove solaris sparc specific output produced by the pre-processor in the .out files 2) Ensure compatibility of preprocessor options for solaris/sparc platform.
* | | | merging mysql-5.1 -> mysql-5.1-seaNarayanan V2008-07-314-1180/+815
|\ \ \ \ | |/ / / |/| | |
| * | | WL#4380Narayanan V2008-07-181-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | 1) Modified abi_check rule to not write into the distribution directory. 2) Added the .pp files to EXTRA_DIST so that it will be included in the distribution
| * | | WL#4380Thava Alagu2008-07-094-1180/+813
| |\ \ \ | | | | | | | | | | Merging changes from 5.1 main tree to 5.1-sea team tree.
| | * | | Removed the references to mysql_h.ic in include/Makefile.amNarayanan V2008-06-181-14/+0
| | | | |
| | * | | WL#4380Narayanan V2008-06-173-1166/+813
| | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | added a rule that use gcc to generate preprocessor output (gcc -E) that can be then compared to a already generated output using the diff utility. Ran make test on the repository to verify changes.
* | | | Up-merge 5.0.66a-release changes (via 5.0) into 5.1.Timothy Smith2008-07-171-0/+1
|\ \ \ \ | |/ / / |/| | / | | |/ | |/| Includes fix for Bug #38180, "options are read from ~/my.cnf instead of ~/.my.cnf"
| * | Bug #38180 options are read from ~/my.cnf instead of ~/.my.cnfTimothy Smith2008-07-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Pull out some of unpack_dirname() into normalize_dirname(); this new function does not expand "~" to the home directory. Use this function in unpack_dirname(), and use it during init_default_directories() to remove duplicate entries without losing track of which directory is a user's home dir.