summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-03-18 05:48:10 +0000
committerPo Lu <luangruo@yahoo.com>2022-03-18 05:48:10 +0000
commita96f6de5447f296dbadc90de9a1157062e9ba491 (patch)
tree7fdd12ab7af138d8c55b3e9988c7906aa2a1d595 /src
parent45609c347e7810b20c54bedc1ce5355182f240e5 (diff)
downloademacs-a96f6de5447f296dbadc90de9a1157062e9ba491.tar.gz
emacs-a96f6de5447f296dbadc90de9a1157062e9ba491.tar.bz2
emacs-a96f6de5447f296dbadc90de9a1157062e9ba491.zip
Allow dragging messages with file names on Haiku
* src/haiku_select.cc (be_add_refs_data): New function. * src/haikuselect.c (haiku_lisp_to_message): Handle `ref' type correctly. * src/haikuselect.h: Update prototypes.
Diffstat (limited to 'src')
-rw-r--r--src/haiku_select.cc17
-rw-r--r--src/haikuselect.c5
-rw-r--r--src/haikuselect.h2
3 files changed, 23 insertions, 1 deletions
diff --git a/src/haiku_select.cc b/src/haiku_select.cc
index 4212f60a480..9012639d6af 100644
--- a/src/haiku_select.cc
+++ b/src/haiku_select.cc
@@ -337,3 +337,20 @@ be_add_message_data (void *message, const char *name,
return msg->AddData (name, type_code, buf, buf_size) != B_OK;
}
+
+int
+be_add_refs_data (void *message, const char *name,
+ const char *filename)
+{
+ BEntry entry (filename);
+ entry_ref ref;
+ BMessage *msg = (BMessage *) message;
+
+ if (entry.InitCheck () != B_OK)
+ return 1;
+
+ if (entry.GetRef (&ref) != B_OK)
+ return 1;
+
+ return msg->AddRef (name, &ref) != B_OK;
+}
diff --git a/src/haikuselect.c b/src/haikuselect.c
index 7474ff12327..807cbc24939 100644
--- a/src/haikuselect.c
+++ b/src/haikuselect.c
@@ -378,7 +378,10 @@ haiku_lisp_to_message (Lisp_Object obj, void *message)
switch (type_code)
{
case 'RREF':
- signal_error ("Cannot deserialize data type", type_sym);
+ CHECK_STRING (data);
+
+ if (be_add_refs_data (message, SSDATA (name), SSDATA (data)))
+ signal_error ("Invalid file name", data);
break;
case 'SHRT':
diff --git a/src/haikuselect.h b/src/haikuselect.h
index 366890d1a46..4869d9d33c2 100644
--- a/src/haikuselect.h
+++ b/src/haikuselect.h
@@ -91,6 +91,8 @@ extern "C"
extern int be_add_message_data (void *message, const char *name,
int32 type_code, const void *buf,
ssize_t buf_size);
+ extern int be_add_refs_data (void *message, const char *name,
+ const char *filename);
#ifdef __cplusplus
};
#endif