-rw-r--r-- | core/applets/vmemo/vmemo.cpp | 41 | ||||
-rw-r--r-- | noncore/apps/opie-console/TEHistory.cpp | 27 |
2 files changed, 56 insertions, 12 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp index 8ba1eb7..1a8f154 100644 --- a/core/applets/vmemo/vmemo.cpp +++ b/core/applets/vmemo/vmemo.cpp @@ -309,70 +309,93 @@ bool VMemo::startRecording() { int s; s=fileName.find(':'); if(s) fileName=fileName.right(fileName.length()-s-2); odebug << "pathname will be "+fileName << oendl; if( fileName.left(1).find('/') == -1) fileName="/"+fileName; if( fileName.right(1).find('/') == -1) fileName+="/"; fName = "vm_"+ date + ".wav"; fileName += fName; odebug << "filename is " + fileName << oendl; useAlerts = config.readBoolEntry("Alert",1); if(useAlerts) { msgLabel = new QLabel( 0, "alertLabel" ); msgLabel->setText( tr("<B><P><font size=+2>VMemo-Recording</font></B><p>%1</p>").arg("vm_"+ date)); msgLabel->show(); } // open tmp file here - char *pointer; - pointer=tmpnam(NULL); - odebug << "Opening tmp file " << pointer << "" << oendl; + char *tmpFilePath = 0; + char *tmpDir = getenv("TMPDIR"); + if (tmpDir && *tmpDir != '\0') { + tmpFilePath = new char[strlen(tmpDir) + strlen("/vmemo-wav-XXXXXX") + 1]; + strcpy(tmpFilePath, tmpDir); + free(tmpDir); + } else { + tmpFilePath = new char[strlen("/tmp/vmemo-wav-XXXXXX") + 1]; + strcpy(tmpFilePath, "/tmp"); + } + strcat(tmpFilePath, "/vmemo-wav-XXXXXX"); + mode_t currUmask = umask(S_IRWXO | S_IRWXG); + int tmpFd = mkstemp(tmpFilePath); + umask(currUmask); + if (tmpFd == -1) { + owarn << "Could not open temp file with template " << tmpFilePath + << oendl; + delete [] tmpFilePath; + return false; + } else + odebug << "Opened temp file " << tmpFilePath << "" << oendl; + + close(tmpFd); - if(openWAV(pointer ) == -1) { + if(openWAV(tmpFilePath ) == -1) { QString err("Could not open the temp file\n"); err += fileName; QMessageBox::critical(0, "vmemo", err, "Abort"); ::close(dsp); return false; } if( record() ) { - QString cmd; if( fileName.find(".wav",0,true) == -1) fileName += ".wav"; - cmd.sprintf("mv %s "+fileName, pointer); -// move tmp file to regular file here - - system(cmd.latin1()); + int retVal = rename(tmpFilePath, fileName.local8Bit()); + if (retVal == -1) { + owarn << "Could not move " << tmpFilePath << " to " << fileName + << oendl; + delete [] tmpFilePath; + return false; + } + delete [] tmpFilePath; QArray<int> cats(1); cats[0] = config.readNumEntry("Category", 0); QString dlName("vm_"); dlName += date; DocLnk l; l.setFile(fileName); l.setName(dlName); l.setType("audio/x-wav"); l.setCategories(cats); l.writeLink(); return true; } else return false; } void VMemo::stopRecording() { // show(); odebug << "Stopped recording" << oendl; recording = false; if(useAlerts) { msgLabel->close(); diff --git a/noncore/apps/opie-console/TEHistory.cpp b/noncore/apps/opie-console/TEHistory.cpp index 317ce57..e2be42a 100644 --- a/noncore/apps/opie-console/TEHistory.cpp +++ b/noncore/apps/opie-console/TEHistory.cpp @@ -1,47 +1,48 @@ /* -------------------------------------------------------------------------- */ /* */ /* [TEHistory.C] History Buffer */ /* */ /* -------------------------------------------------------------------------- */ /* */ /* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ /* */ /* This file is part of Konsole - an X terminal for KDE */ /* */ /* -------------------------------------------------------------------------- */ /* */ /* Ported Konsole to Qt/Embedded */ /* */ /* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ /* */ /* -------------------------------------------------------------------------- */ #include "TEHistory.h" #include <stdlib.h> #include <assert.h> #include <stdio.h> #include <sys/types.h> +#include <sys/stat.h> #include <unistd.h> #include <errno.h> #define HERE printf("%s(%d): here\n",__FILE__,__LINE__) /* An arbitrary long scroll. One can modify the scroll only by adding either cells or newlines, but access it randomly. The model is that of an arbitrary wide typewriter scroll in that the scroll is a serie of lines and each line is a serie of cells with no overwriting permitted. The implementation provides arbitrary length and numbers of cells and line/column indexed read access to the scroll at constant costs. FIXME: some complain about the history buffer comsuming the memory of their machines. This problem is critical since the history does not behave gracefully in cases where the memory is used up completely. @@ -75,51 +76,71 @@ FILE* xTmpFile() /* A Row(X) data type which allows adding elements to the end. */ HistoryBuffer::HistoryBuffer() { ion = -1; length = 0; } HistoryBuffer::~HistoryBuffer() { setScroll(FALSE); } void HistoryBuffer::setScroll(bool on) { if (on == hasScroll()) return; if (on) { assert( ion < 0 ); assert( length == 0); - FILE* tmp = tmpfile(); if (!tmp) { perror("konsole: cannot open temp file.\n"); return; } - ion = dup(fileno(tmp)); if (ion<0) perror("konsole: cannot dup temp file.\n"); - fclose(tmp); + char* tmpDir = getenv("TMPDIR"); + char* tmpFilePath = 0; + if (tmpDir && *tmpDir != '\0') { + tmpFilePath = new char[strlen(tmpDir) + strlen("/opie-console-HistoryBuffer-XXXXXX") + 1]; + strcpy(tmpFilePath, tmpDir); + free(tmpDir); + } else { + tmpFilePath = new char[strlen("/tmp/opie-console-HistoryBuffer-XXXXXX") + 1]; + strcpy(tmpFilePath, "/tmp"); + } + strcat(tmpFilePath, "/opie-console-HistoryBuffer-XXXXXX"); + mode_t currUmask = umask(S_IRWXO | S_IRWXG); + int tmpfd = mkstemp(tmpFilePath); + delete [] tmpFilePath; + umask(currUmask); + if (tmpfd == -1) { + perror("konsole: cannot open temp file.\n"); + return; + } + ion = dup(tmpfd); + if (ion<0) + perror("konsole: cannot dup temp file.\n"); + close(tmpfd); } else { assert( ion >= 0 ); close(ion); ion = -1; length = 0; } } bool HistoryBuffer::hasScroll() { return ion >= 0; } void HistoryBuffer::add(const unsigned char* bytes, int len) { int rc; assert(hasScroll()); rc = lseek(ion,length,SEEK_SET); if (rc < 0) { perror("HistoryBuffer::add.seek"); setScroll(FALSE); return; } rc = write(ion,bytes,len); if (rc < 0) { perror("HistoryBuffer::add.write"); setScroll(FALSE); return; } length += rc; } void HistoryBuffer::get(unsigned char* bytes, int len, int loc) |