JBoolean GMApp::NewMailbox ( const JCharacter* filename, const JBoolean openFile ) { JString path; JString name; JSplitPathAndName(filename, &path, &name); if (path.IsEmpty()) { path = JGetCurrentDirectory(); } if (!(JDirectoryExists(path) && JDirectoryReadable(path))) { JString notice = "You do not have write permissions in directory \"" + path + "\""; JGetUserNotification()->ReportError(notice); return kJFalse; } ofstream os(filename); if (!os.good()) { JString notice = "Unable to create file \"" + path + name + "\""; JGetUserNotification()->ReportError(notice); return kJFalse; } os.close(); if (openFile) { OpenMailbox(filename); } return kJTrue; }
JColorIndex JXPathInput::GetTextColor ( const JCharacter* path, const JCharacter* base, const JBoolean requireWrite, const JColormap* colormap ) { if (JStringEmpty(path)) { return colormap->GetBlackColor(); } JString fullPath; if ((JIsAbsolutePath(path) || !JStringEmpty(base)) && JConvertToAbsolutePath(path, base, &fullPath) && JDirectoryReadable(fullPath) && JCanEnterDirectory(fullPath) && (!requireWrite || JDirectoryWritable(fullPath))) { return colormap->GetBlackColor(); } else { return colormap->GetRedColor(); } }
JBoolean JDirInfo::Update ( const JBoolean force ) { ACE_stat info; if (force || ACE_OS::lstat(*itsCWD, &info) != 0 || ACE_OS::stat(*itsCWD, &info) != 0 || itsModTime != (time_t) info.st_mtime) { ForceUpdate(); return kJTrue; } else if (itsStatusTime != (time_t) info.st_ctime && JDirectoryReadable(*itsCWD)) { itsStatusTime = info.st_ctime; itsIsWritableFlag = JDirectoryWritable(*itsCWD); Broadcast(PermissionsChanged()); return kJTrue; } else if (itsStatusTime != (time_t) info.st_ctime) { ForceUpdate(); return kJTrue; } else { return kJFalse; } }
JBoolean JDirInfo::OKToCreate ( const JCharacter* dirName ) { return JConvertToBoolean( JDirectoryExists(dirName) && JDirectoryReadable(dirName) && JCanEnterDirectory(dirName) ); }
JError JDirInfo::BuildInfo() { if (!JDirectoryReadable(*itsCWD)) { return JAccessDenied(*itsCWD); } const JString origDir = JGetCurrentDirectory(); JError err = JChangeDirectory(*itsCWD); if (!err.OK()) { return err; } // clear old information itsDirEntries->CleanOut(); // update instance variables JStripTrailingDirSeparator(itsCWD); // keep Windows happy ACE_stat stbuf; ACE_OS::stat(*itsCWD, &stbuf); itsIsValidFlag = kJTrue; itsIsWritableFlag = JDirectoryWritable(*itsCWD); itsModTime = stbuf.st_mtime; itsStatusTime = stbuf.st_ctime; JAppendDirSeparator(itsCWD); // process files in the directory JLatentPG pg(itsContentRegex == NULL ? 100 : 10); if (itsPG != NULL) { pg.SetPG(itsPG, kJFalse); } pg.VariableLengthProcessBeginning("Scanning directory...", kJTrue, kJFalse); BuildInfo1(pg); pg.ProcessFinished(); err = JChangeDirectory(origDir); assert_ok( err ); ApplyFilters(kJFalse); return JNoError(); }
JBoolean JXPathInput::GetPath ( JString* path ) const { const JString& text = GetText(); return JI2B(!text.IsEmpty() && (JIsAbsolutePath(text) || HasBasePath()) && JConvertToAbsolutePath(text, itsBasePath, path) && JDirectoryExists(*path) && JDirectoryReadable(*path) && JCanEnterDirectory(*path) && (!itsRequireWriteFlag || JDirectoryWritable(*path))); }
JBoolean JXPathInput::InputValid() { if (itsAllowInvalidPathFlag) { return kJTrue; } else if (!JXInputField::InputValid()) { return kJFalse; } const JString& text = GetText(); if (text.IsEmpty()) // paranoia -- JXInputField should have reported { return !IsRequired(); } JString path; if (JIsRelativePath(text) && !HasBasePath()) { (JGetUserNotification())->ReportError(JGetString(kNoRelPathID)); RecalcAll(kJTrue); return kJFalse; } if (!JConvertToAbsolutePath(text, itsBasePath, &path)) { (JGetUserNotification())->ReportError(JGetString(kInvalidPathID)); RecalcAll(kJTrue); return kJFalse; } const JString currDir = JGetCurrentDirectory(); const JError err = JChangeDirectory(path); JChangeDirectory(currDir); if (err.OK()) { if (!JDirectoryReadable(path)) { (JGetUserNotification())->ReportError(JGetString(kUnreadableID)); RecalcAll(kJTrue); return kJFalse; } else if (itsRequireWriteFlag && !JDirectoryWritable(path)) { (JGetUserNotification())->ReportError(JGetString(kUnwritableID)); RecalcAll(kJTrue); return kJFalse; } else { return kJTrue; } } const JCharacter* errID; if (err == kJAccessDenied) { errID = kAccessDeniedID; } else if (err == kJBadPath) { errID = kBadPathID; } else if (err == kJComponentNotDirectory) { errID = kCompNotDirID; } else { errID = kInvalidDirID; } (JGetUserNotification())->ReportError(JGetString(errID)); RecalcAll(kJTrue); return kJFalse; }
void JStringManager::Register ( const JCharacter* signature, const JCharacter** defaultData ) { JString tempFileName; const JError err = JCreateTempFile(&tempFileName); if (!err.OK()) { return; } { std::ofstream tempFile(tempFileName); JIndex i = 0; while (defaultData[i] != NULL) { tempFile.write(defaultData[i], strlen(defaultData[i])); i++; } } MergeFile(tempFileName); JRemoveFile(tempFileName); if (!JStringEmpty(signature)) { const JCharacter* lang = getenv("LANG"); JString path[2]; JGetJDataDirectories(kDataDirName, path, path+1); JString name1, name2; for (JIndex i=0; i<2; i++) { if (!path[i].IsEmpty() && (JDirectoryReadable(path[i]) || JCreateDirectory(path[i]) == kJNoError)) { name1 = JCombinePathAndName(path[i], signature); if (lang != NULL) { name2 = name1; name2.AppendCharacter('_'); name2.Append(lang); if (MergeFile(name2)) { break; } } if (MergeFile(name1)) { break; } } } } }
JString JGetClosestDirectory ( const JCharacter* origDirName, const JBoolean requireWrite, const JCharacter* basePath ) { assert( !JStringEmpty(origDirName) ); JString workingDir; if (!JStringEmpty(basePath)) { workingDir = basePath; JAppendDirSeparator(&workingDir); } else { workingDir = JGetCurrentDirectory(); } JString dirName = origDirName; JString homeDir; JSize homeLength; if (origDirName[0] == '~' && !JExpandHomeDirShortcut(origDirName, &dirName, &homeDir, &homeLength)) { return JGetRootDirectory(); } else if (JIsRelativePath(origDirName)) { dirName.Prepend(workingDir); } assert( !JIsRelativePath(dirName) ); JString newDir, junkName; while (!JDirectoryExists(dirName) || !JCanEnterDirectory(dirName) || !JDirectoryReadable(dirName) || (requireWrite && !JDirectoryWritable(dirName))) { JStripTrailingDirSeparator(&dirName); if (JIsRootDirectory(dirName)) { break; } JSplitPathAndName(dirName, &newDir, &junkName); dirName = newDir; } // convert back to partial path, if possible if (origDirName[0] == '~' && dirName.BeginsWith(homeDir)) { dirName.ReplaceSubstring(1, homeDir.GetLength(), origDirName, homeLength); } else if (JIsRelativePath(origDirName) && dirName.GetLength() > workingDir.GetLength() && dirName.BeginsWith(workingDir)) { dirName.RemoveSubstring(1, workingDir.GetLength()); } return dirName; }