-rw-r--r-- | core/applets/vmemo/vmemo.cpp | 73 | ||||
-rw-r--r-- | noncore/apps/opie-console/TEHistory.cpp | 27 |
2 files changed, 72 insertions, 28 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 @@ -316,68 +316,91 @@ bool VMemo::startRecording() { 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; + // open tmp file here + 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"; + 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()); - - 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; + 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(); msgLabel=0; delete msgLabel; } t_timer->stop(); Config cfg("Vmemo"); 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 @@ -8,32 +8,33 @@ /* */ /* 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 @@ -83,35 +84,55 @@ HistoryBuffer::HistoryBuffer() 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) |