typedef void (*subsession_reply_callback) (int result, void *user_data);
/**
- * @brief Request new subsession to be created.
+ * @brief Request new subsession to be created, with no built-in limit on size.
* @since_tizen 7.0
*
* @param[in] session_uid User ID of the session
*/
int subsession_add_user(int session_uid, const subsession_user_t user, subsession_reply_callback cb, void *user_data);
+/**
+ * @brief Request new subsession to be created, with a fixed size limit.
+ * @since_tizen 10.0
+ *
+ * @param[in] session_uid User ID of the session
+ * @param[in] user Subsession user name to be created
+ * @param[in] size_limit_kB Size (disk usage) limit of the subsession, in kilobytes. Minimum 220 kB
+ * @param[in] cb Callback to be called when operation completes or error is reported
+ * @param[in] user_data User defined data
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #SUBSESSION_ERROR_NONE Success
+ * @retval #SUBSESSION_ERROR_INVALID_PARAMETER Provided parameter is invalid
+ * @retval #SUBSESSION_ERROR_ALREADY_EXISTS Provided subsession already exists
+ * @retval #SUBSESSION_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SUBSESSION_ERROR_IO_ERROR I/O or filesystem error
+ * @remarks Use `subsession_get_user_list()` to list currently used session IDs.
+ * Subsession ID must not start with a dot or have slashes.
+ */
+int subsession_add_user_fixed_size(int session_uid, const subsession_user_t user, uint32_t size_limit_kB, subsession_reply_callback cb, void *user_data);
+
/**
* @brief Request existing subsession to be removed.
* @since_tizen 7.0
return_with_log_error_result_(method_call_async(dbus_method_call.AddUser, g_variant_new("(is)", session_uid, user), cb, user_data))
}
+EXPORT_API int subsession_add_user_fixed_size(int session_uid, const subsession_user_t user, uint32_t size_limit_kB, subsession_reply_callback cb, void *user_data)
+{
+ return_if(
+ session_uid_is_not_valid(session_uid,
+ user_id_is_not_valid(user,
+ session_fixed_size_invalid_size(size_limit_kB)))
+ )
+
+ return_with_log_error_result_(method_call_async(dbus_method_call.AddUserFixedSize, g_variant_new("(isu)", session_uid, user, size_limit_kB), cb, user_data))
+}
+
EXPORT_API int subsession_remove_user(int session_uid, const subsession_user_t user, subsession_reply_callback cb, void *user_data)
{
return_if(
#define switch_id_is_not_valid(a, ...) || (a <= 0) __VA_ARGS__
+#define client_data_are_null(a, ...) || (a == NULL) __VA_ARGS__
+
+// overhead for an EXT2 filesystem, determined empirically; also checked by daemon
+#define session_fixed_size_invalid_size(a, ...) || (a < 220) __VA_ARGS__
+
#define int_not_valid_on_switch(a, ...) || (a < 0) __VA_ARGS__
#define client_data_are_null(a, ...) || (a == NULL) __VA_ARGS__