{
char *emsg = _dbus_win_error_string (GetLastError ());
dbus_set_error (error, _dbus_win_error_from_last_error (),
- "Failed to read from 0x%x: %s", hnd, emsg);
+ "Failed to read from %p: %s", hnd, emsg);
_dbus_win_free_error_string (emsg);
return -1;
}
*
* @param str the string to write out
* @param filename the file to save string to
+ * @param world_readable if true, ensure file is world readable
* @param error error to be filled in on failure
* @returns #FALSE on failure
*/
dbus_bool_t
_dbus_string_save_to_file (const DBusString *str,
const DBusString *filename,
+ dbus_bool_t world_readable,
DBusError *error)
{
HANDLE hnd;
}
#define N_TMP_FILENAME_RANDOM_BYTES 8
- if (!_dbus_generate_random_ascii (&tmp_filename, N_TMP_FILENAME_RANDOM_BYTES))
+ if (!_dbus_generate_random_ascii (&tmp_filename, N_TMP_FILENAME_RANDOM_BYTES,
+ error))
{
- dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
_dbus_string_free (&tmp_filename);
return FALSE;
}
filename_c = _dbus_string_get_const_data (filename);
tmp_filename_c = _dbus_string_get_const_data (&tmp_filename);
+ /* TODO - support world-readable in an atomic fashion */
hnd = CreateFileA (tmp_filename_c, GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL,
_dbus_win_free_error_string (emsg);
goto out;
}
+ if (world_readable)
+ {
+ if (! _dbus_make_file_world_readable (&tmp_filename, error))
+ goto out;
+ }
_dbus_verbose ("tmp file %s hnd %p opened\n", tmp_filename_c, hnd);