mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-08 12:40:49 -08:00
Merge recent dbus changes better.
This commit is contained in:
parent
42b2a986d9
commit
243e053005
3 changed files with 43 additions and 43 deletions
|
|
@ -212,6 +212,14 @@
|
|||
* dbusbind.c (xd_append_arg): Check for integers out of range.
|
||||
(Fdbus_call_method): Don't overflow the timeout int.
|
||||
(extract_signed, extract_unsigned): New functions.
|
||||
(XD_CHECK_DBUS_SERIAL): Remove; superseded by extract_unsigned.
|
||||
(xd_get_connection_references): Return ptrdiff_t, not int.
|
||||
All uses changed.
|
||||
(xd_signature, xd_append_arg, xd_retrieve_arg, Fdbus_message_internal)
|
||||
(xd_read_message_1):
|
||||
Use int, not unsigned, where the dbus API uses int.
|
||||
(Fdbus_message_internal): Don't overflow mtype.
|
||||
(syms_of_dbusbind): Allocate right-sized buffer for integers.
|
||||
* dired.c (directory_files_internal, file_name_completion, scmp)
|
||||
(file_name_completion_stat):
|
||||
Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts.
|
||||
|
|
@ -269,6 +277,7 @@
|
|||
undefined behavior.
|
||||
(Fformat_time_string): Remove now-unnecessary check.
|
||||
lisp_time_argument checks for out-of-range usec now.
|
||||
Use ptrdiff_t, not size_t, where ptrdiff_t will do.
|
||||
* emacs.c (gdb_valbits, gdb_gctypebits): Now int, not EMACS_INT.
|
||||
(gdb_data_seg_bits): Now uintptr_t, not EMACS_INT.
|
||||
(PVEC_FLAG, gdb_array_mark_flag): Now ptrdiff_t, not EMACS_INT.
|
||||
|
|
|
|||
|
|
@ -254,22 +254,6 @@ xd_symbol_to_dbus_type (Lisp_Object object)
|
|||
#define XD_OBJECT_TO_STRING(object) \
|
||||
SDATA (format2 ("%s", object, Qnil))
|
||||
|
||||
/* Check whether X is a valid dbus serial number. If valid, set
|
||||
SERIAL to its value. Otherwise, signal an error. */
|
||||
#define XD_CHECK_DBUS_SERIAL(x, serial) \
|
||||
do { \
|
||||
dbus_uint32_t DBUS_SERIAL_MAX = -1; \
|
||||
if (NATNUMP (x) && XINT (x) <= DBUS_SERIAL_MAX) \
|
||||
serial = XINT (x); \
|
||||
else if (MOST_POSITIVE_FIXNUM < DBUS_SERIAL_MAX \
|
||||
&& FLOATP (x) \
|
||||
&& 0 <= XFLOAT_DATA (x) \
|
||||
&& XFLOAT_DATA (x) <= DBUS_SERIAL_MAX) \
|
||||
serial = XFLOAT_DATA (x); \
|
||||
else \
|
||||
XD_SIGNAL2 (build_string ("Invalid dbus serial"), x); \
|
||||
} while (0)
|
||||
|
||||
#define XD_DBUS_VALIDATE_BUS_ADDRESS(bus) \
|
||||
do { \
|
||||
if (STRINGP (bus)) \
|
||||
|
|
@ -366,9 +350,9 @@ xd_signature_cat (char *signature, char const *x)
|
|||
signature is embedded, or DBUS_TYPE_INVALID. It is needed for the
|
||||
check that DBUS_TYPE_DICT_ENTRY occurs only as array element. */
|
||||
static void
|
||||
xd_signature (char *signature, unsigned int dtype, unsigned int parent_type, Lisp_Object object)
|
||||
xd_signature (char *signature, int dtype, int parent_type, Lisp_Object object)
|
||||
{
|
||||
unsigned int subtype;
|
||||
int subtype;
|
||||
Lisp_Object elt;
|
||||
char const *subsig;
|
||||
int subsiglen;
|
||||
|
|
@ -558,9 +542,12 @@ extract_signed (Lisp_Object x, intmax_t lo, intmax_t hi)
|
|||
return n;
|
||||
}
|
||||
}
|
||||
args_out_of_range_3 (x,
|
||||
make_fixnum_or_float (lo),
|
||||
make_fixnum_or_float (hi));
|
||||
if (xd_in_read_queued_messages)
|
||||
Fthrow (Qdbus_error, Qnil);
|
||||
else
|
||||
args_out_of_range_3 (x,
|
||||
make_fixnum_or_float (lo),
|
||||
make_fixnum_or_float (hi));
|
||||
}
|
||||
|
||||
/* Convert X to an unsigned integer with bounds 0 and HI. */
|
||||
|
|
@ -583,7 +570,10 @@ extract_unsigned (Lisp_Object x, uintmax_t hi)
|
|||
return n;
|
||||
}
|
||||
}
|
||||
args_out_of_range_2 (x, make_fixnum_or_float (hi));
|
||||
if (xd_in_read_queued_messages)
|
||||
Fthrow (Qdbus_error, Qnil);
|
||||
else
|
||||
args_out_of_range_3 (x, make_number (0), make_fixnum_or_float (hi));
|
||||
}
|
||||
|
||||
/* Append C value, extracted from Lisp OBJECT, to iteration ITER.
|
||||
|
|
@ -592,7 +582,7 @@ extract_unsigned (Lisp_Object x, uintmax_t hi)
|
|||
`dbus-send-signal', into corresponding C values appended as
|
||||
arguments to a D-Bus message. */
|
||||
static void
|
||||
xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter)
|
||||
xd_append_arg (int dtype, Lisp_Object object, DBusMessageIter *iter)
|
||||
{
|
||||
char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
|
||||
DBusMessageIter subiter;
|
||||
|
|
@ -620,9 +610,10 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter)
|
|||
}
|
||||
|
||||
case DBUS_TYPE_INT16:
|
||||
CHECK_TYPE_RANGED_INTEGER (dbus_int16_t, object);
|
||||
{
|
||||
dbus_int16_t val = XINT (object);
|
||||
dbus_int16_t val = extract_signed (object,
|
||||
TYPE_MINIMUM (dbus_int16_t),
|
||||
TYPE_MAXIMUM (dbus_int16_t));
|
||||
int pval = val;
|
||||
XD_DEBUG_MESSAGE ("%c %d", dtype, pval);
|
||||
if (!dbus_message_iter_append_basic (iter, dtype, &val))
|
||||
|
|
@ -631,9 +622,9 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter)
|
|||
}
|
||||
|
||||
case DBUS_TYPE_UINT16:
|
||||
CHECK_TYPE_RANGED_INTEGER (dbus_uint16_t, object);
|
||||
{
|
||||
dbus_uint16_t val = XFASTINT (object);
|
||||
dbus_uint16_t val = extract_unsigned (object,
|
||||
TYPE_MAXIMUM (dbus_uint16_t));
|
||||
unsigned int pval = val;
|
||||
XD_DEBUG_MESSAGE ("%c %u", dtype, pval);
|
||||
if (!dbus_message_iter_append_basic (iter, dtype, &val))
|
||||
|
|
@ -668,7 +659,6 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter)
|
|||
}
|
||||
|
||||
case DBUS_TYPE_INT64:
|
||||
CHECK_TYPE_RANGED_INTEGER_OR_FLOAT (dbus_int64_t, object);
|
||||
{
|
||||
dbus_int64_t val = extract_signed (object,
|
||||
TYPE_MINIMUM (dbus_int64_t),
|
||||
|
|
@ -810,7 +800,7 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter)
|
|||
D-Bus message must be a valid DBusType. Compound D-Bus types
|
||||
result always in a Lisp list. */
|
||||
static Lisp_Object
|
||||
xd_retrieve_arg (unsigned int dtype, DBusMessageIter *iter)
|
||||
xd_retrieve_arg (int dtype, DBusMessageIter *iter)
|
||||
{
|
||||
|
||||
switch (dtype)
|
||||
|
|
@ -942,7 +932,7 @@ xd_retrieve_arg (unsigned int dtype, DBusMessageIter *iter)
|
|||
}
|
||||
|
||||
/* Return the number of references of the shared CONNECTION. */
|
||||
static int
|
||||
static ptrdiff_t
|
||||
xd_get_connection_references (DBusConnection *connection)
|
||||
{
|
||||
ptrdiff_t *refcount;
|
||||
|
|
@ -1115,7 +1105,7 @@ this connection to those buses. */)
|
|||
DBusConnection *connection;
|
||||
DBusError derror;
|
||||
Lisp_Object val;
|
||||
int refcount;
|
||||
ptrdiff_t refcount;
|
||||
|
||||
/* Check parameter. */
|
||||
XD_DBUS_VALIDATE_BUS_ADDRESS (bus);
|
||||
|
|
@ -1185,7 +1175,7 @@ this connection to those buses. */)
|
|||
|
||||
/* Return reference counter. */
|
||||
refcount = xd_get_connection_references (connection);
|
||||
XD_DEBUG_MESSAGE ("Bus %s, Reference counter %d",
|
||||
XD_DEBUG_MESSAGE ("Bus %s, Reference counter %"pD"d",
|
||||
XD_OBJECT_TO_STRING (bus), refcount);
|
||||
return make_number (refcount);
|
||||
}
|
||||
|
|
@ -1249,8 +1239,8 @@ usage: (dbus-message-internal &rest REST) */)
|
|||
DBusConnection *connection;
|
||||
DBusMessage *dmessage;
|
||||
DBusMessageIter iter;
|
||||
unsigned int dtype;
|
||||
unsigned int mtype;
|
||||
int dtype;
|
||||
int mtype;
|
||||
dbus_uint32_t serial = 0;
|
||||
unsigned int ui_serial;
|
||||
int timeout = -1;
|
||||
|
|
@ -1264,9 +1254,10 @@ usage: (dbus-message-internal &rest REST) */)
|
|||
handler = Qnil;
|
||||
|
||||
CHECK_NATNUM (message_type);
|
||||
mtype = XFASTINT (message_type);
|
||||
if ((mtype <= DBUS_MESSAGE_TYPE_INVALID) || (mtype >= DBUS_NUM_MESSAGE_TYPES))
|
||||
if (! (DBUS_MESSAGE_TYPE_INVALID < XFASTINT (message_type)
|
||||
&& XFASTINT (message_type) < DBUS_NUM_MESSAGE_TYPES))
|
||||
XD_SIGNAL2 (build_string ("Invalid message type"), message_type);
|
||||
mtype = XFASTINT (message_type);
|
||||
|
||||
if ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL)
|
||||
|| (mtype == DBUS_MESSAGE_TYPE_SIGNAL))
|
||||
|
|
@ -1280,7 +1271,7 @@ usage: (dbus-message-internal &rest REST) */)
|
|||
}
|
||||
else /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */
|
||||
{
|
||||
XD_CHECK_DBUS_SERIAL (args[3], serial);
|
||||
serial = extract_unsigned (args[3], TYPE_MAXIMUM (dbus_uint32_t));
|
||||
count = 4;
|
||||
}
|
||||
|
||||
|
|
@ -1504,8 +1495,8 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus)
|
|||
struct input_event event;
|
||||
DBusMessage *dmessage;
|
||||
DBusMessageIter iter;
|
||||
unsigned int dtype;
|
||||
unsigned int mtype;
|
||||
int dtype;
|
||||
int mtype;
|
||||
dbus_uint32_t serial;
|
||||
unsigned int ui_serial;
|
||||
const char *uname, *path, *interface, *member;
|
||||
|
|
@ -1753,10 +1744,10 @@ syms_of_dbusbind (void)
|
|||
{
|
||||
#ifdef DBUS_VERSION
|
||||
int major, minor, micro;
|
||||
char s[1024];
|
||||
char s[sizeof ".." + 3 * INT_STRLEN_BOUND (int)];
|
||||
dbus_get_version (&major, &minor, µ);
|
||||
snprintf (s, sizeof s, "%d.%d.%d", major, minor, micro);
|
||||
Vdbus_runtime_version = make_string (s, strlen (s));
|
||||
sprintf (s, "%d.%d.%d", major, minor, micro);
|
||||
Vdbus_runtime_version = build_string (s);
|
||||
#else
|
||||
Vdbus_runtime_version = Qnil;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1695,7 +1695,7 @@ format_time_string (char const *format, ptrdiff_t formatlen,
|
|||
{
|
||||
char buffer[4000];
|
||||
char *buf = buffer;
|
||||
size_t size = sizeof buffer;
|
||||
ptrdiff_t size = sizeof buffer;
|
||||
size_t len;
|
||||
Lisp_Object bufstring;
|
||||
int usec;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue