Do not use tmpnam() but a custom function.
This commit is contained in:
parent
d451b543c6
commit
e154748542
|
@ -23,7 +23,10 @@
|
|||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <assert.h>
|
||||
#include <mint/osbind.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <mint/osbind.h>
|
||||
#include <cflib.h>
|
||||
|
||||
#include "desktop/gui.h"
|
||||
#include "desktop/netsurf.h"
|
||||
|
@ -36,7 +39,8 @@
|
|||
#include "content/urldb.h"
|
||||
#include "css/css.h"
|
||||
#include "utils/log.h"
|
||||
#include "utils/messages.h"
|
||||
#include "utils/messages.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
#include "atari/gui.h"
|
||||
#include "atari/rootwin.h"
|
||||
|
@ -107,6 +111,39 @@ static struct s_context_info * get_context_info( struct gui_window * gw, short m
|
|||
return(&ctxinfo);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*
|
||||
* \param prefix
|
||||
* \param sufffix
|
||||
* \return pointer to static buffer owned by get_tmpfilename()
|
||||
*/
|
||||
static char * get_tmpfilename(const char * prefix, const char * suffix)
|
||||
{
|
||||
int i=0;
|
||||
static char tmpfilename[PATH_MAX];
|
||||
char * tmpdir;
|
||||
const char * tmp_path_suffix = "";
|
||||
|
||||
// TODO: make function public?
|
||||
tmpdir = getenv("TMPDIR");
|
||||
if(tmpdir == NULL){
|
||||
tmpdir = (char*)"u:\\tmp\\";
|
||||
}
|
||||
|
||||
if(tmpdir[strlen(tmpdir)-1] != '\\'){
|
||||
tmp_path_suffix = "\\";
|
||||
}
|
||||
|
||||
do{
|
||||
/* generate a new filename: */
|
||||
snprintf(tmpfilename, PATH_MAX, "%s%s%s%d%s", tmpdir,
|
||||
tmp_path_suffix, prefix, i++, suffix);
|
||||
/* check with cflib: */
|
||||
} while(file_exists(tmpfilename));
|
||||
|
||||
return(tmpfilename);
|
||||
}
|
||||
|
||||
//TODO: do not open popup for gui_window, but for a rootwin?
|
||||
|
@ -273,9 +310,11 @@ void context_popup(struct gui_window * gw, short x, short y)
|
|||
editor = nsoption_charp(atari_editor);
|
||||
if (editor != NULL && strlen(editor)>0) {
|
||||
data = content_get_source_data(gw->browser->bw->current_content,
|
||||
&size);
|
||||
&size);
|
||||
if (size > 0 && data != NULL){
|
||||
snprintf(tempfile, 127, "%s%s.htm", "u:", tmpnam(NULL));
|
||||
snprintf(tempfile, 127, "%s", get_tmpfilename("ns-", ".html"));
|
||||
/* the GEMDOS cmdline contains the length of the commandline
|
||||
in the first byte: */
|
||||
cmdline[0] = (unsigned char)strlen(tempfile);
|
||||
LOG(("Creating temporay source file: %s\n", tempfile));
|
||||
fp_tmpfile = fopen(tempfile, "w");
|
||||
|
@ -283,6 +322,10 @@ void context_popup(struct gui_window * gw, short x, short y)
|
|||
fwrite(data, size, 1, fp_tmpfile);
|
||||
fclose(fp_tmpfile);
|
||||
|
||||
// Send SH_WDRAW to notify files changed:
|
||||
gemtk_send_msg(SH_WDRAW, 0, -1, 0, 0, 0, 0);
|
||||
|
||||
// start application:
|
||||
if(strlen(tempfile)<=125){
|
||||
shel_write(1, 1, 1, editor, cmdline);
|
||||
}
|
||||
|
|
|
@ -60,6 +60,10 @@ void gemtk_clip_grect(VdiHdl vh, GRECT *rect);
|
|||
|
||||
void gemtk_wind_get_str(short aes_handle, short mode, char *str, int len);
|
||||
|
||||
/* send application message */
|
||||
void gemtk_send_msg(short msg_type, short data2, short data3, short data4,
|
||||
short data5, short data6, short data7);
|
||||
|
||||
|
||||
#ifndef POINT_WITHIN
|
||||
# define POINT_WITHIN(_x,_y, r) ((_x >= r.g_x) && (_x <= r.g_x + r.g_w ) \
|
||||
|
|
|
@ -95,10 +95,38 @@ void gemtk_clip_grect(VdiHdl vh, GRECT *rect)
|
|||
vs_clip_pxy(vh, pxy);
|
||||
}
|
||||
|
||||
/** Send an Message to a GUIWIN using AES message pipe
|
||||
* \param win the GUIWIN which shall receive the message
|
||||
* \param msg_type the WM_ message definition
|
||||
* \param a the 4th parameter to appl_write
|
||||
* \param b the 5th parameter to appl_write
|
||||
* \param c the 6th parameter to appl_write
|
||||
* \param d the 7th parameter to appl_write
|
||||
*/
|
||||
void gemtk_send_msg(short msg_type, short data2, short data3, short data4,
|
||||
short data5, short data6, short data7)
|
||||
{
|
||||
short msg[8];
|
||||
|
||||
msg[0] = msg_type;
|
||||
msg[1] = gl_apid;
|
||||
msg[2] = data2;
|
||||
msg[3] = data3;
|
||||
msg[4] = data4;
|
||||
msg[5] = data5;
|
||||
msg[6] = data6;
|
||||
msg[7] = data7;
|
||||
|
||||
appl_write(gl_apid, 16, &msg);
|
||||
}
|
||||
|
||||
|
||||
void gemtk_wind_get_str(short aes_handle, short mode, char *str, int len)
|
||||
{
|
||||
char tmp_str[255];
|
||||
|
||||
// TODO: remove or implement function
|
||||
|
||||
if(len>255) {
|
||||
len = 255;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue