int DoAutoRecovery (int inquire) { char buffer[1025]; char *recoverdir = getAutoDirName (buffer); DIR *dir; struct dirent *entry; int any = false; SplineFont *sf; int inquire_state = 0; if (recoverdir == NULL) return false; if ((dir = opendir (recoverdir)) == NULL) return false; while ((entry = readdir (dir)) != NULL) { if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0) continue; sprintf (buffer, "%s/%s", recoverdir, entry->d_name); fprintf (stderr, "Recovering from %s... ", buffer); if ((sf = SFRecoverFile (buffer, inquire, &inquire_state))) { any = true; if (sf->fv == NULL) /* Doesn't work, cli arguments not parsed yet */ FontViewCreate (sf, false); } fprintf (stderr, " Done\n"); } closedir (dir); return any; }
void CleanAutoRecovery (void) { char buffer[1025]; char *recoverdir = getAutoDirName (buffer); DIR *dir; struct dirent *entry; if (recoverdir == NULL) return; if ((dir = opendir (recoverdir)) == NULL) return; while ((entry = readdir (dir)) != NULL) { if (strcmp (entry->d_name, ".") == 0 || strcmp (entry->d_name, "..") == 0) continue; sprintf (buffer, "%s/%s", recoverdir, entry->d_name); if (unlink (buffer) != 0) { fprintf (stderr, "Failed to clean "); perror (buffer); } } closedir (dir); }
static void MakeAutoSaveName(SplineFont *sf) { char buffer[1025]; char *autosavedir; static int cnt=0; if ( sf->autosavename ) return; autosavedir = getAutoDirName(buffer); if ( autosavedir==NULL ) return; while ( 1 ) { sprintf( buffer, "%s/auto%06x-%d.asfd", autosavedir, getpid(), ++cnt ); if ( access(buffer,F_OK)==-1 ) { sf->autosavename = copy(buffer); return; } } }