sal/inc/osl/file.hxx | 67 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 20 deletions(-)
New commits: commit fa4fec47a8bb713f960acb474920f2c640e1c58a Author: Stephan Bergmann <sberg...@redhat.com> Date: Tue Aug 21 12:27:12 2012 +0200 Related fdo#46249: FileStatus can have fewer fields than requested Turns out 608fe962cc649ad62c489811d3a8666e0e06e5e7 "Let osl::FileStatus getters assert programming errors" was overly optimistic and misunderstood that osl_getFileStatus(..., nMask) /can/ return a FileStatus for which isValid(nMask) is false, esp. for stuff like file names and URLs of Windows drives and servers. That in turn leads to existing code now calling rtl::OUString(_aStatus.ustrFileName) etc. with null argument and crashing. Change-Id: Icd2168e209aa1c7a6df30cd954513d01034923db Signed-off-by: Michael Meeks <michael.me...@suse.com> diff --git a/sal/inc/osl/file.hxx b/sal/inc/osl/file.hxx index 16f7a06..96a7cda 100644 --- a/sal/inc/osl/file.hxx +++ b/sal/inc/osl/file.hxx @@ -729,8 +729,11 @@ public: */ inline Type getFileType() const { - assert(isValid(osl_FileStatus_Mask_Type)); - return static_cast< Type >(_aStatus.eType); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_Type), "sal", + "no FileStatus Type determined"); + return isValid(osl_FileStatus_Mask_Type) + ? static_cast< Type >(_aStatus.eType) : Unknown; } /** Is it a directory? @@ -783,93 +786,117 @@ public: inline sal_uInt64 getAttributes() const { - assert(isValid(osl_FileStatus_Mask_Attributes)); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_Attributes), "sal", + "no FileStatus Attributes determined"); return _aStatus.uAttributes; } /** Get the creation time of this file. @return - The creation time. + The creation time if this information is valid, an uninitialized + TimeValue otherwise. */ inline TimeValue getCreationTime() const { - assert(isValid(osl_FileStatus_Mask_CreationTime)); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_CreationTime), "sal", + "no FileStatus CreationTime determined"); return _aStatus.aCreationTime; } /** Get the file access time. @return - The last access time. + The last access time if this information is valid, an uninitialized + TimeValue otherwise. */ inline TimeValue getAccessTime() const { - assert(isValid(osl_FileStatus_Mask_AccessTime)); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_AccessTime), "sal", + "no FileStatus AccessTime determined"); return _aStatus.aAccessTime; } /** Get the file modification time. @return - The last modified time. + The last modified time if this information is valid, an uninitialized + TimeValue otherwise. */ inline TimeValue getModifyTime() const { - assert(isValid(osl_FileStatus_Mask_ModifyTime)); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_ModifyTime), "sal", + "no FileStatus ModifyTime determined"); return _aStatus.aModifyTime; } /** Get the size of the file. @return - The actual file size. + The actual file size if this information is valid, 0 otherwise. */ inline sal_uInt64 getFileSize() const { - assert(isValid(osl_FileStatus_Mask_FileSize)); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_FileSize), "sal", + "no FileStatus FileSize determined"); return _aStatus.uFileSize; } /** Get the file name. @return - The file name. + The file name if this information is valid, an empty string otherwise. */ inline ::rtl::OUString getFileName() const { - assert(isValid(osl_FileStatus_Mask_FileName)); - return rtl::OUString(_aStatus.ustrFileName); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_FileName), "sal", + "no FileStatus FileName determined"); + return isValid(osl_FileStatus_Mask_FileName) + ? rtl::OUString(_aStatus.ustrFileName) : rtl::OUString(); } /** Get the URL of the file. @return - The full qualified URL of the file. + The full qualified URL of the file if this information is valid, an + empty string otherwise. */ inline ::rtl::OUString getFileURL() const { - assert(isValid(osl_FileStatus_Mask_FileURL)); - return rtl::OUString(_aStatus.ustrFileURL); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_FileURL), "sal", + "no FileStatus FileURL determined"); + return isValid(osl_FileStatus_Mask_FileURL) + ? rtl::OUString(_aStatus.ustrFileURL) : rtl::OUString(); } /** Get the link target URL. @return - The link target URL. + The link target URL if this information is valid, an empty string + otherwise. */ inline ::rtl::OUString getLinkTargetURL() const { - assert(isValid(osl_FileStatus_Mask_LinkTargetURL)); - return rtl::OUString(_aStatus.ustrLinkTargetURL); + SAL_INFO_IF( + !isValid(osl_FileStatus_Mask_LinkTargetURL), "sal", + "no FileStatus LinkTargetURL determined"); + return isValid(osl_FileStatus_Mask_LinkTargetURL) + ? rtl::OUString(_aStatus.ustrLinkTargetURL) : rtl::OUString(); } friend class DirectoryItem; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits