[fpc-pascal] Fpc Access Violation if AppConfigDir doesn't exist.

Giuliano Colla giuliano.colla at fastwebnet.it
Sat Feb 9 01:49:49 CET 2013


Launching a Lazarus application in a freshly installed Linux system, I 
found a condition which may be quite confusing for a normal user: the 
main form was shown, the program didn't work, and there was no way to 
close the form, which could only be closed by a killall from command line.

Launching from command line one could only see a 
TApplication.HandleException Access Violation, which isn't much telling 
for a normal user either.

It turned out that the reason was simply that the default AppConfigDir 
(~/.config/ ) wasn't there, and therefore in the two usual lines

AppConfigFileName:= GetAppConfigFile(False);
ini := TIniFile.Create(AppConfigFileName);

the second line was generating the access violation.

Desktop specs tell where configuration data should go, but they don't 
guarantee that the directory exists. Other applications take care of 
creating if it doesn't exist, but its presence depends on which 
applications you launch.

Of course, once one knows, one can use ForceDirectories in the 
application code, but it would be much more user friendly if 
XdgConfigHome (or SysConfigDir when it will be implemented) in sysutils 
took care of that. You ask for the default configuration path to put 
your data in, and you get a sane and *existing* path.
It would also be nice if TIniFile.Create didn't generate an Access 
Violation if the file can't be created.

Should I open an issue on the bugtracker on this subject, or I'm the 
only one to think that it's a bug/required feature?

Giuliano







More information about the fpc-pascal mailing list