char* mktempname(char*ptr, const char*ext) { static char tmpbuf[160]; char*dir = getTempDir(); int l = strlen(dir); char*sep = ""; if(!ptr) ptr = tmpbuf; if(l && dir[l-1]!='/' && dir[l-1]!='\\') { #ifdef WIN32 sep = "\\"; #else sep = "/"; #endif } #ifdef HAVE_LRAND48 unsigned int r1 = (unsigned int)lrand48(); unsigned int r2 = (unsigned int)lrand48(); #elif HAVE_RAND unsigned int r1 = rand(); unsigned int r2 = rand(); #else static int count = 1; unsigned int r1 = time(0); unsigned int r2 = (unsigned int)tmpbuf<<8^count; count ++; #endif if(ext) { sprintf(ptr, "%s%s%04x%04x.%s",dir,sep,r1,r2,ext); } else { sprintf(ptr, "%s%s%04x%04x",dir,sep,r1,r2); } return ptr; }
const char* makeTempDir(const char* dirPrefix) { const char* tmpdirprefix = astr(getTempDir(), "/", dirPrefix); const char* tmpdirsuffix = ".deleteme"; pid_t mypid = getpid(); #ifdef DEBUGTMPDIR mypid = 0; #endif char mypidstr[MAX_CHARS_PER_PID]; snprintf(mypidstr, MAX_CHARS_PER_PID, "-%d", (int)mypid); struct passwd* passwdinfo = getpwuid(geteuid()); const char* userid; if (passwdinfo == NULL) { userid = "anon"; } else { userid = passwdinfo->pw_name; } char* myuserid = strdup(userid); removeSpacesBackslashesFromString(myuserid); const char* tmpDir = astr(tmpdirprefix, myuserid, mypidstr, tmpdirsuffix); ensureDirExists(tmpDir, "making temporary directory"); free(myuserid); myuserid = NULL; return tmpDir; }
void Project::readTextPaths() { QDir tempDir = getTempDir(); tempDir.setNameFilters(QStringList("*.flextext")); tempDir.setSorting(QDir::Name); mTextPaths.clear(); QStringList entries = tempDir.entryList(QDir::Files,QDir::Name); for(int i=0; i<entries.count(); i++) mTextPaths << tempDir.absoluteFilePath(entries.at(i)); }
bool Project::save() { saveOpenTexts(); serializeConfigurationXml(); // indebted to: http://stackoverflow.com/questions/2598117/zipping-a-folder-file-using-qt QuaZip zip(mProjectPath); QuaZipFile outFile(&zip); if (!zip.open(QuaZip::mdCreate)) { qWarning() << "zip.open()" << zip.getZipError(); return false; } char c; QFile inFile; QDir tempDir = getTempDir(); tempDir.setNameFilters(QStringList("*")); QStringList files = tempDir.entryList(QDir::Files,QDir::Name); for(int i=0; i<files.count(); i++) { inFile.setFileName( tempDir.absoluteFilePath(files.at(i)) ); if( !inFile.open(QIODevice::ReadOnly)) { qWarning() << inFile.errorString(); return false; } if( !outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(files.at(i) , tempDir.absoluteFilePath(files.at(i)) ))) { qWarning() << outFile.errorString(); return false; } while (inFile.getChar(&c) && outFile.putChar(c)); if (outFile.getZipError() != UNZ_OK) { qWarning() << outFile.getZipError(); return false; } outFile.close(); if (outFile.getZipError() != UNZ_OK) { qWarning() << outFile.getZipError(); return false; } inFile.close(); } mChanged = false; return true; }
static void collabclient_sendRedo_Internal( FontViewBase *fv, SplineChar *sc, Undoes *undo, int isLocalUndo ) { printf("collabclient_sendRedo_Internal()\n"); cloneclient_t* cc = fv->collabClient; if( !cc ) return; char* uuid = fv->sf->xuid; printf("uuid:%s\n", uuid ); printf("________________________ WRITE undo.layer: %d layer_sz:%d\n", undo->layer, sc->layer_cnt ); int idx = 0; char filename[PATH_MAX]; snprintf(filename, PATH_MAX, "%s/fontforge-collab-x.sfd", getTempDir() ); FILE* f = fopen( filename, "wb" ); SFDDumpUndo( f, sc, undo, "Undo", idx ); fclose(f); printf("wrote undo sfd... filename: %s\n", filename ); char* sfd = GFileReadAll( filename ); printf("read undo sfd, data:%p\n", sfd ); if( DEBUG_SHOW_SFD_CHUNKS ) printf("SENDING: %s\n\n", sfd ); printf("timers1...\n" ); cc->roundTripTimerWaitingSeq = cc->publisher_sendseq; BackgroundTimer_touch( cc->roundTripTimer ); printf("timers2...\n" ); printf("sfd:%p...\n", sfd ); kvmsg_t *kvmsg = kvmsg_new(0); kvmsg_fmt_key (kvmsg, "%s%d", SUBTREE, cc->publisher_sendseq++); kvmsg_set_body (kvmsg, sfd, strlen(sfd) ); kvmsg_set_prop (kvmsg, "type", MSG_TYPE_UNDO ); kvmsg_set_prop (kvmsg, "uuid", uuid ); char pos[100]; sprintf(pos, "%d", sc->orig_pos ); printf("pos:%s\n", pos ); printf("sc.name:%s\n", sc->name ); size_t data_size = kvmsg_size (kvmsg); printf("data.size:%ld\n", data_size ); kvmsg_set_prop (kvmsg, "pos", pos ); kvmsg_set_prop (kvmsg, "name", sc->name ); sprintf(pos, "%d", isLocalUndo ); kvmsg_set_prop (kvmsg, "isLocalUndo", pos ); kvmsg_send (kvmsg, cc->publisher); kvmsg_destroy (&kvmsg); DEBUG("Sent a undo chunk of %d bytes to the server\n",strlen(sfd)); free(sfd); }
std::string LLDir::getTempFilename() const { LLUUID random_uuid; std::string uuid_str; random_uuid.generate(); random_uuid.toString(uuid_str); std::string temp_filename = getTempDir(); temp_filename += mDirDelimiter; temp_filename += uuid_str; temp_filename += ".tmp"; return temp_filename; }
bool Project::create(QString filename) { mProjectPath = filename; QDir tempDir = getTempDir(); if( mDbAdapter != 0 ) { delete mDbAdapter; mDbAdapter = 0; } mDatabasePath = tempDir.absoluteFilePath(mDatabaseFilename); mDbAdapter = new DatabaseAdapter(mDatabasePath); return true; }
void Project::removeTempDirectory() { mDbAdapter->close(); QDir tempDir = getTempDir(); tempDir.setNameFilters(QStringList("*")); QStringList files = tempDir.entryList(QDir::Files,QDir::Name); for(int i=0; i<files.count(); i++) { QFile f( tempDir.absoluteFilePath( files.at(i) ) ); if( ! f.remove() ) qWarning() << f.errorString() << tempDir.absoluteFilePath( files.at(i) ) ; } tempDir.cdUp(); tempDir.rmdir( tempDirName() ); }
void LLDir::dumpCurrentDirectories() { LL_DEBUGS2("AppInit","Directories") << "Current Directories:" << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " CurPath: " << getCurPath() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " AppName: " << getAppName() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " ExecutableFilename: " << getExecutableFilename() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " ExecutableDir: " << getExecutableDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " ExecutablePathAndName: " << getExecutablePathAndName() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " WorkingDir: " << getWorkingDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " AppRODataDir: " << getAppRODataDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " OSUserDir: " << getOSUserDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " OSUserAppDir: " << getOSUserAppDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " LindenUserDir: " << getLindenUserDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " TempDir: " << getTempDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " CAFile: " << getCAFile() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " SkinDir: " << getSkinDir() << LL_ENDL; }
void UpdateManager::downloadUpdater() { std::string fileName; std::string address; if (!_versionConfDownloaded) { fileName = string("version.conf"); std::string currentVersion = getCurrentVersion(); string userId(readConfValue("user-id", "")); address = "http://d-jon.com/downloads/version.php?version=" + currentVersion;// readConfValue("version-file", ""); address = address.append("&userId=" + userId); } fileName = *getTempDir() + "/" + fileName; _file = new QFile(QString(fileName.c_str())); if (_file->exists()) { _file->remove(); } QUrl url(address.c_str()); _manager->get(QNetworkRequest(url)); _downloading = true; }
void LLDir::dumpCurrentDirectories() { LL_DEBUGS2("AppInit","Directories") << "Current Directories:" << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " CurPath: " << getCurPath() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " AppName: " << getAppName() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " ExecutableFilename: " << getExecutableFilename() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " ExecutableDir: " << getExecutableDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " ExecutablePathAndName: " << getExecutablePathAndName() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " WorkingDir: " << getWorkingDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " AppRODataDir: " << getAppRODataDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " OSUserDir: " << getOSUserDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " OSUserAppDir: " << getOSUserAppDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " LindenUserDir: " << getLindenUserDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " TempDir: " << getTempDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " CAFile: " << getCAFile() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " SkinDir: " << getSkinDir() << LL_ENDL; #if LL_LIBXUL_ENABLED LL_DEBUGS2("AppInit","Directories") << " HTML Path: " << getExpandedFilename( LL_PATH_HTML, "" ) << llendl; LL_DEBUGS2("AppInit","Directories") << " Mozilla Profile Path: " << getExpandedFilename( LL_PATH_MOZILLA_PROFILE, "" ) << llendl; #endif }
void UpdateManager::checkVersion() { std::string tempFileName = *getTempDir() + "/version.conf"; _isLastVersion = true; if (existFile(tempFileName.c_str())) { std::string versioncont = std::string(readFile(const_cast<char*>(tempFileName.c_str()))); if (versioncont.find("version:") == -1) { versioncont = "version:" + versioncont + ";\nreleaseNotesURL:http://d-jon.com/downloads/releasenotes.php?version=" + VERSION + ";"; } const char* cwebLastVersion = readValue(versioncont, "version"); if (strlen(cwebLastVersion) > 0) { Version webVersion = getVersion(cwebLastVersion); Version currentVersion = getCurrentVersion(); if (webVersion > currentVersion) { _isLastVersion = false; } if (!_isLastVersion) { QMessageBox box; box.setWindowTitle("d-jon update available"); box.setTextFormat(Qt::RichText); std::stringstream ss; ss << "A new version of d-jon is available at <a href=\"http://d-jon.com/downloads.html\">http://d-jon.com/downloads.html</a><br/>"; ss << "please take a look of the <a href=\""; std::string releaseNotesURL = readValue(versioncont, "releaseNotesURL"); ss << releaseNotesURL << "\">release notes</a> to know what is new in this release."; std::string message = ss.str(); box.setText(message.c_str()); box.exec(); } } _file->remove(); delete(_file); _file = NULL; } }
// Number of files to try to open before giving up. void initTempDir (void) { size_t len; DWORD num; int i; char *tempPtr; // Pointer to the location in the tempDirName string where the // path to the temp dir ends and the dir starts. tempDirName = HMalloc (PATH_MAX); getTempDir (tempDirName, PATH_MAX - 21); // reserve 8 chars for dirname, 1 for slash, and 12 for filename len = strlen(tempDirName); num = ((DWORD) time (NULL)); // num = GetTimeCounter () % 0xffffffff; tempPtr = tempDirName + len; for (i = 0; i < NUM_TEMP_RETRIES; i++) { sprintf (tempPtr, "%08x", num + i); if (createDirectory (tempDirName, 0700) == -1) continue; // Success, we've got a temp dir. tempDirName = HRealloc (tempDirName, len + 9); atexit (removeTempDir); if (mountTempDir (tempDirName) == -1) exit (EXIT_FAILURE); return; } // Failure, could not make a temporary directory. log_add (log_Fatal, "Fatal error: Cannot get a name for a temporary " "directory."); exit (EXIT_FAILURE); }
extern std::string createTempFileName() { std::string tempDir = getTempDir(); #ifdef WT_WIN32 char tmpName[MAX_PATH]; if(tempDir == "" || GetTempFileNameA(tempDir.c_str(), "wt-", 0, tmpName) == 0) return ""; return tmpName; #else char* spool = new char[20 + tempDir.size()]; strcpy(spool, (tempDir + "/wtXXXXXX").c_str()); int i = mkstemp(spool); close(i); std::string returnSpool = spool; delete [] spool; return returnSpool; #endif }
String getTempDir(const String& desc) { return FileUtils::joinPath(getTempDir(), desc + L"." + StringUtils::toString(randomTest->nextInt())); }
void execcmd( char *string, void (*func)( void *closure, int status, timing_info* ), void *closure, LIST *shell ) { int pid; int slot; int raw_cmd = 0 ; char *argv_static[ MAXARGC + 1 ]; /* +1 for NULL */ char **argv = argv_static; char *p; /* Check to see if we need to hack around the line-length limitation. */ /* Look for a JAMSHELL setting of "%", indicating that the command * should be invoked directly */ if ( shell && !strcmp(shell->string,"%") && !list_next(shell) ) { raw_cmd = 1; shell = 0; } if ( !is_win95_defined ) set_is_win95(); /* Find a slot in the running commands table for this one. */ if ( is_win95 ) { /* only synchronous spans are supported on Windows 95/98 */ slot = 0; } else { for( slot = 0; slot < MAXJOBS; slot++ ) if( !cmdtab[ slot ].pid ) break; } if( slot == MAXJOBS ) { printf( "no slots for child!\n" ); exit( EXITBAD ); } if( !cmdtab[ slot ].tempfile ) { const char *tempdir; DWORD procID; tempdir = getTempDir(); /* SVA - allocate 64 other just to be safe */ cmdtab[ slot ].tempfile = malloc( strlen( tempdir ) + 64 ); procID = GetCurrentProcessId(); sprintf( cmdtab[ slot ].tempfile, "%s\\jam%d-%02d.bat", tempdir, procID, slot ); } /* Trim leading, ending white space */ while( isspace( *string ) ) ++string; /* Write to .BAT file unless the line would be too long and it * meets the other spawnability criteria. */ if( raw_cmd && can_spawn( string ) >= MAXLINE ) { if( DEBUG_EXECCMD ) printf("Executing raw command directly\n"); } else { FILE *f; raw_cmd = 0; /* Write command to bat file. */ f = fopen( cmdtab[ slot ].tempfile, "w" ); if (!f) { printf( "failed to write command file!\n" ); exit( EXITBAD ); } fputs( string, f ); fclose( f ); string = cmdtab[ slot ].tempfile; if( DEBUG_EXECCMD ) { if (shell) printf("using user-specified shell: %s", shell->string); else printf("Executing through .bat file\n"); } } /* Forumulate argv */ /* If shell was defined, be prepared for % and ! subs. */ /* Otherwise, use stock /bin/sh (on unix) or cmd.exe (on NT). */ if( shell ) { int i; char jobno[4]; int gotpercent = 0; sprintf( jobno, "%d", slot + 1 ); for( i = 0; shell && i < MAXARGC; i++, shell = list_next( shell ) ) { switch( shell->string[0] ) { case '%': argv[i] = string; gotpercent++; break; case '!': argv[i] = jobno; break; default: argv[i] = shell->string; } if( DEBUG_EXECCMD ) printf( "argv[%d] = '%s'\n", i, argv[i] ); } if( !gotpercent ) argv[i++] = string; argv[i] = 0; } else if (raw_cmd) { argv = string_to_args(string); } else { /* don't worry, this is ignored on Win95/98, see later.. */ argv[0] = "cmd.exe"; argv[1] = "/Q/C"; /* anything more is non-portable */ argv[2] = string; argv[3] = 0; } /* Catch interrupts whenever commands are running. */ if( !cmdsrunning++ ) istat = signal( SIGINT, onintr ); /* Start the command */ /* on Win95, we only do a synchronous call */ if ( is_win95 ) { static const char* hard_coded[] = { "del", "erase", "copy", "mkdir", "rmdir", "cls", "dir", "ren", "rename", "move", 0 }; const char** keyword; int len, spawn = 1; int result; timing_info time = {0,0}; for ( keyword = hard_coded; keyword[0]; keyword++ ) { len = strlen( keyword[0] ); if ( strnicmp( string, keyword[0], len ) == 0 && !isalnum(string[len]) ) { /* this is one of the hard coded symbols, use 'system' to run */ /* them.. except for "del"/"erase" */ if ( keyword - hard_coded < 2 ) result = process_del( string ); else result = system( string ); spawn = 0; break; } } if (spawn) { char** args; /* convert the string into an array of arguments */ /* we need to take care of double quotes !! */ args = string_to_args( string ); if ( args ) { #if 0 char** arg; fprintf( stderr, "%s: ", args[0] ); arg = args+1; while ( arg[0] ) { fprintf( stderr, " {%s}", arg[0] ); arg++; } fprintf( stderr, "\n" ); #endif result = spawnvp( P_WAIT, args[0], args ); record_times(result, &time); free_argv( args ); } else result = 1; } func( closure, result ? EXEC_CMD_FAIL : EXEC_CMD_OK, &time ); return; } if( DEBUG_EXECCMD ) { char **argp = argv; printf("Executing command"); while(*argp != 0) { printf(" [%s]", *argp); argp++; } printf("\n"); } /* the rest is for Windows NT only */ /* spawn doesn't like quotes around the command name */ if ( argv[0][0] == '"') { int l = strlen(argv[0]); /* Clobber any closing quote, shortening the string by one * element */ if (argv[0][l-1] == '"') argv[0][l-1] = '\0'; /* Move everything *including* the original terminating zero * back one place in memory, covering up the opening quote */ memmove(argv[0],argv[0]+1,l); } if( ( pid = spawnvp( P_NOWAIT, argv[0], argv ) ) == -1 ) { perror( "spawn" ); exit( EXITBAD ); } /* Save the operation for execwait() to find. */ cmdtab[ slot ].pid = pid; cmdtab[ slot ].func = func; cmdtab[ slot ].closure = closure; /* Wait until we're under the limit of concurrent commands. */ /* Don't trust globs.jobs alone. */ while( cmdsrunning >= MAXJOBS || cmdsrunning >= globs.jobs ) if( !execwait() ) break; if (argv != argv_static) { free_argv(argv); } }
std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subdir1, const std::string& subdir2, const std::string& in_filename) const { std::string prefix; switch (location) { case LL_PATH_NONE: // Do nothing break; case LL_PATH_APP_SETTINGS: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "app_settings"; break; case LL_PATH_CHARACTER: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "character"; break; case LL_PATH_MOTIONS: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "motions"; break; case LL_PATH_HELP: prefix = "help"; break; case LL_PATH_CACHE: prefix = getCacheDir(); break; case LL_PATH_USER_SETTINGS: prefix = getOSUserAppDir(); prefix += mDirDelimiter; prefix += "user_settings"; break; case LL_PATH_PER_SL_ACCOUNT: prefix = getLindenUserDir(); break; case LL_PATH_CHAT_LOGS: prefix = getChatLogsDir(); break; case LL_PATH_PER_ACCOUNT_CHAT_LOGS: prefix = getPerAccountChatLogsDir(); break; case LL_PATH_LOGS: prefix = getOSUserAppDir(); prefix += mDirDelimiter; prefix += "logs"; break; case LL_PATH_TEMP: prefix = getTempDir(); break; case LL_PATH_TOP_SKIN: prefix = getSkinDir(); break; case LL_PATH_SKINS: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "skins"; break; //case LL_PATH_HTML: // prefix = getSkinDir(); // prefix += mDirDelimiter; // prefix += "html"; // break; case LL_PATH_MOZILLA_PROFILE: prefix = getOSUserAppDir(); prefix += mDirDelimiter; prefix += "browser_profile"; break; case LL_PATH_EXECUTABLE: prefix = getExecutableDir(); break; default: llassert(0); } std::string filename = in_filename; if (!subdir2.empty()) { filename = subdir2 + mDirDelimiter + filename; } if (!subdir1.empty()) { filename = subdir1 + mDirDelimiter + filename; } std::string expanded_filename; if (!filename.empty()) { if (!prefix.empty()) { expanded_filename += prefix; expanded_filename += mDirDelimiter; expanded_filename += filename; } else { expanded_filename = filename; } } else if (!prefix.empty()) { // Directory only, no file name. expanded_filename = prefix; } else { expanded_filename.assign(""); } //llinfos << "*** EXPANDED FILENAME: <" << expanded_filename << ">" << llendl; return expanded_filename; }
void collabclient_sessionStart( void* ccvp, FontView *fv ) { #ifdef BUILD_COLLAB cloneclient_t* cc = (cloneclient_t*)ccvp; // // Fire up the fontforge-internal-collab-server process... // { char command_line[PATH_MAX+1]; #if defined(__MINGW32__) sprintf(command_line, "'%s/ffcollab.bat' %d", getGResourceProgramDir(), cc->port ); #else sprintf(command_line, "%s/bin/FontForgeInternal/fontforge-internal-collab-server %d", getLibexecDir_NonWindows(), cc->port ); #endif printf("command_line:%s\n", command_line ); GError * error = 0; if(!getenv("FONTFORGE_USE_EXISTING_SERVER")) { int rc = g_spawn_command_line_async( command_line, &error ); if( !rc ) { fprintf(stderr, "Error starting collab server\n"); if( error ) fprintf(stderr, "code:%d message:%s\n", error->code, error->message ); } } } printf("Starting a session, sending it the current SFD as a baseline...\n"); if( !ff_uuid_isValid( fv->b.sf->collab_uuid)) ff_uuid_generate( fv->b.sf->collab_uuid ); strcpy( cc->unacknowledged_beacon_uuid, fv->b.sf->collab_uuid ); time( &cc->unacknowledged_beacon_sendTime ); int s2d = 0; char filename[PATH_MAX]; snprintf(filename, PATH_MAX, "%s/fontforge-collab-start-%d.sfd", getTempDir(), getpid()); int ok = SFDWrite(filename,fv->b.sf,fv->b.map,fv->b.normal,s2d); printf("connecting to server...3 ok:%d\n",ok); if ( ok ) { char* sfd = GFileReadAll( filename ); printf("connecting to server...4 sfd:%p\n", sfd ); collabclient_sendSFD( cc, sfd, fv->b.sf->collab_uuid, fv->b.sf->fontname ); } GFileUnlink(filename); printf("connecting to server...sent the sfd for session start.\n"); fv->b.collabState = cs_server; FVTitleUpdate( &fv->b ); collabclient_setHaveLocalServer( 1 ); beacon_moon_bounce_timerID = BackgroundTimer_new( 3000, beacon_moon_bounce_timer_callback, cc ); collabclient_notifySessionJoining( cc, (FontViewBase*)fv ); #endif }
/** * Process the given kvmsg from the server. If create is set and we do * not have any charview for a changed glyph then we first create a * charview for it. This allows the updates from a server to be * processed at startup time, getting us up to speed with any glyphs * that have changed. * * This function is mainly called in response to an update which is * published from the server. However, in sessionJoin() we also call * here to handle the incremental updates to glyphs that have occurred * after the SFD was sent to the server. */ static void zeromq_subscriber_process_update( cloneclient_t* cc, kvmsg_t *kvmsg, int create ) { cc->sequence = kvmsg_sequence (kvmsg); if( cc->sequence >= cc->roundTripTimerWaitingSeq ) cc->roundTripTimerWaitingSeq = 0; char* uuid = kvmsg_get_prop (kvmsg, "uuid" ); byte* data = kvmsg_body (kvmsg); size_t data_size = kvmsg_size (kvmsg); printf("cc process_update() uuid:%s\n", uuid ); FontView* fv = FontViewFind( FontViewFind_byXUIDConnected, uuid ); printf("fv:%p\n", fv ); if( fv ) { if( !data_size ) { printf("WARNING: zero length message!\n" ); return; } SplineFont *sf = fv->b.sf; if( !sf ) { printf("ERROR: font view does not have the splinefont set!\n" ); return; } char* pos = kvmsg_get_prop (kvmsg, "pos" ); char* name = kvmsg_get_prop (kvmsg, "name" ); printf("pos:%s\n", pos ); // SplineChar *sc = sf->glyphs[ atoi(pos) ]; SplineChar* sc = SFGetOrMakeChar( sf, -1, name ); printf("sc:%p\n", sc ); if( !sc ) { printf("WARNING: font view does not have a glyph for pos:%s\n", pos ); printf("WARNING: font view does not have a glyph for name:%s\n", name ); return; } printf("sc.name:%s\n", sc->name ); printf("data.size:%ld\n", data_size ); if( DEBUG_SHOW_SFD_CHUNKS ) printf("data:%s\n", data ); int current_layer = 0; if( !sc->views && create ) { int show = 0; CharView* cv = CharViewCreateExtended( sc, fv, -1, show ); printf("created charview:%p\n", cv ); } for( CharViewBase* cv = sc->views; cv; cv = cv->next ) { printf("have charview:%p\n", cv ); char filename[PATH_MAX]; snprintf(filename, PATH_MAX, "%s/fontforge-collab-inx-%d.sfd", getTempDir(), getpid() ); GFileWriteAll( filename, (char*)data); FILE* file = fopen( filename, "rb" ); Undoes* undo = SFDGetUndo( sf, file, sc, "UndoOperation", "EndUndoOperation", current_layer ); fclose(file); if( !undo ) { printf("***** ERROR ****** reading back undo instance!\n"); printf("data: %s\n\n", data ); } if( undo ) { // NOT HANDLED! if( undo->undotype == ut_statehint ) { printf("*** warning ut_statehint not handled\n"); break; } printf("________________________ READ undo.layer: %d dm:%d layer_sz:%d\n", undo->layer, cv->drawmode, cv->sc->layer_cnt ); int selectedlayer = cv->drawmode; if( undo->layer != UNDO_LAYER_UNKNOWN ) selectedlayer = undo->layer; // use oldlayer to store current setting and switch to the // selected layer for this block. int oldlayer = cv->drawmode; cv->drawmode = selectedlayer; undo->next = 0; undo->next = cv->layerheads[selectedlayer]->redoes; cv->layerheads[selectedlayer]->redoes = undo; CVDoRedo( cv ); char* isLocalUndo = kvmsg_get_prop (kvmsg, "isLocalUndo" ); if( isLocalUndo ) { if( isLocalUndo[0] == '1' ) { Undoes* undo = cv->layerheads[selectedlayer]->undoes; if( undo ) { cv->layerheads[selectedlayer]->undoes = undo->next; undo->next = cv->layerheads[selectedlayer]->redoes; cv->layerheads[selectedlayer]->redoes = undo; } } } if( cv->drawmode != oldlayer ) { cv->drawmode = oldlayer; CVCharChangedUpdate( cv ); } } break; } } printf ("I: processed update=%d\n", (int) cc->sequence); }
FontViewBase* collabclient_sessionJoin( void* ccvp, FontView *fv ) { FontViewBase* ret = 0; #ifdef BUILD_COLLAB cloneclient_t* cc = (cloneclient_t*)ccvp; printf("collabclient_sessionJoin(top)\n"); // Get state snapshot cc->sequence = 0; zstr_sendm (cc->snapshot, "ICANHAZ?"); zstr_send (cc->snapshot, SUBTREE); // if we wait for timeoutMS millisec then we assume failure // timeWaitedMS is used to keep track of how long we have waited kvmsg_t* lastSFD = 0; int timeWaitedMS = 0; int timeoutMS = pref_collab_sessionJoinTimeoutMS; while (true) { printf("timeoutMS:%d timeWaitedMS:%d\n", timeoutMS, timeWaitedMS ); if( timeWaitedMS >= timeoutMS ) { char* addrport = collabclient_makeAddressString( cc->address, cc->port ); gwwv_post_error(_("FontForge Collaboration"), _("Failed to connect to server session at %s"), addrport ); return 0; } kvmsg_t *kvmsg = kvmsg_recv_full( cc->snapshot, ZMQ_DONTWAIT ); if (!kvmsg) { int msToWait = 50; g_usleep( msToWait * 1000 ); timeWaitedMS += msToWait; continue; } /* kvmsg_t *kvmsg = kvmsg_recv (cc->snapshot); */ /* if (!kvmsg) */ /* break; // Interrupted */ if (streq (kvmsg_key (kvmsg), "KTHXBAI")) { cc->sequence = kvmsg_sequence (kvmsg); printf ("I: received snapshot=%d\n", (int) cc->sequence); kvmsg_destroy (&kvmsg); // Done break; } printf ("I: storing seq=%ld ", kvmsg_sequence (kvmsg)); if( kvmsg_get_prop (kvmsg, "type") ) printf(" type:%s", kvmsg_get_prop (kvmsg, "type") ); printf ("\n"); if( !strcmp(kvmsg_get_prop (kvmsg, "type"), MSG_TYPE_SFD )) { if( !lastSFD || kvmsg_sequence (kvmsg) > kvmsg_sequence (lastSFD)) { lastSFD = kvmsg; } size_t data_size = kvmsg_size(lastSFD); printf("data_size:%ld\n", data_size ); } kvmsg_store (&kvmsg, cc->kvmap); } printf("collabclient_sessionJoin(done with netio getting snapshot)\n"); printf("collabclient_sessionJoin() lastSFD:%p\n", lastSFD ); // int rc = 0; // void* out = 0; // rc = zhash_foreach ( cc->kvmap, collabclient_sessionJoin_findSFD_foreach_fn, &out ); // printf("collabclient_sessionJoin() last sfd:%p\n", out ); if( !lastSFD ) { gwwv_post_error(_("FontForge Collaboration"), _("No Font Snapshot received from the server")); return 0; } if( lastSFD ) { int openflags = 0; char filename[PATH_MAX]; snprintf(filename, PATH_MAX, "%s/fontforge-collab-import-%d.sfd",getTempDir(),getpid()); GFileWriteAll( filename, kvmsg_body (lastSFD) ); /* * Since we are creating a new fontview window for the collab session * we "hand over" the collabClient from the current fontview used to join * the session to the fontview which owns the sfd from the wire. */ FontViewBase* newfv = ViewPostScriptFont( filename, openflags ); newfv->collabClient = cc; fv->b.collabClient = 0; newfv->collabState = cs_client; FVTitleUpdate( newfv ); collabclient_notifySessionJoining( cc, newfv ); ret = newfv; /* cloneclient_t* newc = collabclient_new( cc->address, cc->port ); */ /* collabclient_sessionJoin( newc, fv ); */ } printf("applying updates from server that were performed after the SFD snapshot was done...\n"); kvmap_visit( cc->kvmap, kvmsg_sequence (lastSFD), collabclient_sessionJoin_processmsg_foreach_fn, cc ); /* struct collabclient_sessionJoin_processUpdates_foreach_args args; */ /* args.cc = cc; */ /* args.lastSFD = lastSFD; */ /* rc = zhash_foreach ( cc->kvmap, collabclient_sessionJoin_processUpdates_foreach_fn, &args ); */ printf("collabclient_sessionJoin(complete)\n"); #endif return ret; }
void LuceneGlobalFixture::TearDown() { FileUtils::removeDirectory(getTempDir()); Lucene::CycleCheck::dumpRefs(); }
void LuceneGlobalFixture::SetUp() { FileUtils::removeDirectory(getTempDir()); FileUtils::createDirectory(getTempDir()); TestPoint::enableTestPoints(); }
std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subdir1, const std::string& subdir2, const std::string& in_filename) const { std::string prefix; switch (location) { case LL_PATH_NONE: // Do nothing break; case LL_PATH_APP_SETTINGS: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "app_settings"; break; case LL_PATH_CHARACTER: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "character"; break; case LL_PATH_FS_RESOURCES: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "fs_resources"; break; case LL_PATH_HELP: prefix = "help"; break; case LL_PATH_CACHE: prefix = getCacheDir(); break; case LL_PATH_USER_SETTINGS: prefix = getOSUserAppDir(); prefix += mDirDelimiter; prefix += "user_settings"; break; case LL_PATH_PER_SL_ACCOUNT: prefix = getLindenUserDir(); if (prefix.empty()) { // if we're asking for the per-SL-account directory but we haven't logged in yet (or otherwise don't know the account name from which to build this string), then intentionally return a blank string to the caller and skip the below warning about a blank prefix. return std::string(); } break; case LL_PATH_CHAT_LOGS: prefix = getChatLogsDir(); break; case LL_PATH_PER_ACCOUNT_CHAT_LOGS: prefix = getPerAccountChatLogsDir(); break; case LL_PATH_LOGS: prefix = getOSUserAppDir(); prefix += mDirDelimiter; prefix += "logs"; break; case LL_PATH_TEMP: prefix = getTempDir(); break; case LL_PATH_TOP_SKIN: prefix = getSkinDir(); break; // [SL:KB] - Catznip Viewer-Skins case LL_PATH_TOP_SKINTHEME: prefix = getSkinThemeDir(); break; case LL_PATH_DEFAULT_SKIN: prefix = getDefaultSkinDir(); break; case LL_PATH_USER_SKIN: prefix = getUserSkinDir(); break; case LL_PATH_SKINS: prefix = getSkinBaseDir(); break; case LL_PATH_LOCAL_ASSETS: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "local_assets"; break; case LL_PATH_EXECUTABLE: prefix = getExecutableDir(); break; case LL_PATH_FONTS: prefix = getAppRODataDir(); prefix += mDirDelimiter; prefix += "fonts"; break; default: llassert(0); } std::string filename = in_filename; if (!subdir2.empty()) { filename = subdir2 + mDirDelimiter + filename; } if (!subdir1.empty()) { filename = subdir1 + mDirDelimiter + filename; } if (prefix.empty()) { llwarns << "prefix is empty, possible bad filename" << llendl; } std::string expanded_filename; if (!filename.empty()) { if (!prefix.empty()) { expanded_filename += prefix; expanded_filename += mDirDelimiter; expanded_filename += filename; } else { expanded_filename = filename; } } else if (!prefix.empty()) { // Directory only, no file name. expanded_filename = prefix; } else { expanded_filename.assign(""); } //llinfos << "*** EXPANDED FILENAME: <" << expanded_filename << ">" << llendl; return expanded_filename; }
QString Project::filepathFromName(const QString & name) const { return getTempDir().absoluteFilePath( QString("%1.flextext").arg(name) ); }
int mysystem(AppInfo* appinfo, JobInfo* jobinfo, char* envp[]) { /* purpose: emulate the system() libc call, but save utilization data. * paramtr: appinfo (IO): shared record of information * isPrinted (IO): reset isPrinted in child process! * input (IN): connect to stdin or share * output (IN): connect to stdout or share * error (IN): connect to stderr or share * jobinfo (IO): updated record of job-specific information * argv (IN): assembled commandline * child (OUT): pid of child process * status (OUT): also returned as function result * saverr (OUT): will be set to value of errno * start (OUT): will be set to startup time * final (OUT): will be set to finish time after reap * use (OUT): rusage record from application call * input (IN): connect to stdin or share * output (IN): connect to stdout or share * error (IN): connect to stderr or share * envp (IN): vector with the parent's environment * returns: -1: failure in mysystem processing, check errno * 126: connecting child to its new stdout failed * 127: execve() call failed * else: status of child */ /* sanity checks first */ if (!jobinfo->isValid) { errno = ENOEXEC; /* no executable */ return -1; } /* Ignore SIGINT and SIGQUIT */ struct sigaction ignore, saveintr, savequit; memset(&ignore, 0, sizeof(ignore)); ignore.sa_handler = SIG_IGN; sigemptyset(&ignore.sa_mask); ignore.sa_flags = 0; if (sigaction(SIGINT, &ignore, &saveintr) < 0) { return -1; } if (sigaction(SIGQUIT, &ignore, &savequit) < 0) { return -1; } /* Prefix for trace files generated by this job */ char trace_file_prefix[128]; snprintf(trace_file_prefix, 128, "gs.trace.%d", getpid()); /* Temp dir where trace files are stored for this job */ const char *tempdir = getTempDir(); if (tempdir == NULL) { tempdir = "/tmp"; } /* start wall-clock */ now(&(jobinfo->start)); if ((jobinfo->child=fork()) < 0) { /* no more process table space */ jobinfo->status = -1; } else if (jobinfo->child == 0) { /* child */ appinfo->isPrinted=1; // If we are using library tracing, try to set the necessary // environment variables if (appinfo->enableLibTrace) { envp = tryGetNewEnvironment(envp, tempdir, trace_file_prefix); } /* connect jobs stdio */ if (forcefd(&appinfo->input, STDIN_FILENO)) _exit(126); if (forcefd(&appinfo->output, STDOUT_FILENO)) _exit(126); if (forcefd(&appinfo->error, STDERR_FILENO)) _exit(126); /* undo signal handlers */ sigaction(SIGINT, &saveintr, NULL); sigaction(SIGQUIT, &savequit, NULL); /* If we are tracing, then hand over control to the proc module */ if (appinfo->enableTracing) { if (procChild()) _exit(126); } execve(jobinfo->argv[0], (char* const*) jobinfo->argv, envp); perror("execve"); _exit(127); /* executed in child process */ } else { /* Track the current child process */ appinfo->currentChild = jobinfo->child; /* parent */ if (appinfo->enableTracing) { /* TODO If this returns an error, then we need to untrace all the children and try the wait instead */ procParentTrace(jobinfo->child, &jobinfo->status, &jobinfo->use, &(jobinfo->children), appinfo->enableSysTrace); } else { procParentWait(jobinfo->child, &jobinfo->status, &jobinfo->use, &(jobinfo->children)); } /* sanity check */ if (kill(jobinfo->child, 0) == 0) { printerr("ERROR: job %d is still running!\n", jobinfo->child); if (!errno) errno = EINPROGRESS; } /* Child is no longer running */ appinfo->currentChild = 0; } /* save any errors before anybody overwrites this */ jobinfo->saverr = errno; /* stop wall-clock */ now(&(jobinfo->finish)); /* ignore errors on these, too. */ sigaction(SIGINT, &saveintr, NULL); sigaction(SIGQUIT, &savequit, NULL); /* Look for trace files from libinterpose and add trace data to jobinfo */ if (appinfo->enableLibTrace) { jobinfo->children = processTraceFiles(tempdir, trace_file_prefix); } /* finalize */ return jobinfo->status; }
bool Project::readFromFile(QString filename) { mProjectPath = filename; QDir tempDir = getTempDir(); QuaZip zip(mProjectPath); if( zip.open(QuaZip::mdUnzip) ) { QuaZipFile file(&zip); char* data = (char*)malloc(4096); for(bool f=zip.goToFirstFile(); f; f=zip.goToNextFile()) { if( file.open(QIODevice::ReadOnly) ) { QFile outfile( tempDir.absoluteFilePath(file.getActualFileName()) ); outfile.open(QIODevice::WriteOnly); QDataStream out(&outfile); while( !file.atEnd() ) { qint64 bytesRead = file.read(data, 4096); out.writeRawData(data,(uint)bytesRead); } file.close(); } } free(data); zip.close(); if(QFile::exists(tempDir.absoluteFilePath(mDatabaseFilename))) { if( mDbAdapter != 0 ) { delete mDbAdapter; mDbAdapter = 0; } mDbAdapter = new DatabaseAdapter(tempDir.absoluteFilePath(mDatabaseFilename)); readTextPaths(); } else { QMessageBox::critical(0,tr("Error opening file"),tr("Something seems to be wrong with the archive. The file %1, which is an important one, could not be found.").arg(mDatabaseFilename)); return false; } if(!QFile::exists(tempDir.absoluteFilePath("configuration.xml"))) { QMessageBox::critical(0,tr("Error opening file"),tr("Something seems to be wrong with the archive. The file configuration.xml, which is an important one, could not be found.")); return false; } else { parseConfigurationFile(); } } else { QMessageBox::critical(0,tr("Error opening file"),tr("The file %1 could not be opened. It may be the wrong format, or it may have been corrupted.").arg(mProjectPath)); return false; } return true; }