PARA_ERROR(ID3_SETENCODING, "could not set id3 text encoding field"), \
PARA_ERROR(ID3_SETSTRING, "could not set id3 string field"), \
PARA_ERROR(INCOHERENT_BLOCK_LEN, "incoherent block length"), \
- PARA_ERROR(INVALID_AUDIOD_CMD, "invalid command"), \
PARA_ERROR(KEY_MARKER, "invalid/missing key header or footer"), \
PARA_ERROR(KEY_PERM, "unprotected private key"), \
PARA_ERROR(LIBSAMPLERATE, "secret rabbit code error"), \
*/
#define OSL_ERROR_BIT 29
+#define LLS_ERROR_BIT 28
+
/** Check whether the system error bit is set. */
#define IS_SYSTEM_ERROR(num) (!!((num) & (1 << SYSTEM_ERROR_BIT)))
/** Check whether the osl error bit is set. */
#define IS_OSL_ERROR(num) (!!((num) & (1 << OSL_ERROR_BIT)))
+/** Check whether the lopsub error bit is set. */
+#define IS_LLS_ERROR(num) (!!((num) & (1 << LLS_ERROR_BIT)))
+
/** Set the system error bit for the given number. */
#define ERRNO_TO_PARA_ERROR(num) ((num) | (1 << SYSTEM_ERROR_BIT))
/** Set the osl error bit for the given number. */
#define OSL_ERRNO_TO_PARA_ERROR(num) ((num) | (1 << OSL_ERROR_BIT))
+/** Set the lopsub error bit for the error code. */
+#define LLS_ERRNO_TO_PARA_ERROR(num) ((num) | (1 << LLS_ERROR_BIT))
+
static const char *weak_osl_strerror(int) __attribute__ ((weakref("osl_strerror")));
+static const char *weak_lls_strerror(int) __attribute__ ((weakref("lls_strerror")));
/**
* Paraslash's version of strerror(3).
*
assert(weak_osl_strerror);
return weak_osl_strerror(num & ~(1U << OSL_ERROR_BIT));
}
+ if (IS_LLS_ERROR(num)) {
+ assert(weak_lls_strerror);
+ return weak_lls_strerror(num & ~(1U << LLS_ERROR_BIT));
+ }
if (IS_SYSTEM_ERROR(num))
return strerror(num & ~(1U << SYSTEM_ERROR_BIT));
return para_errlist[num];
return ret;
return -OSL_ERRNO_TO_PARA_ERROR(-ret);
}
+
+/**
+ * Wrapper for lopsub library calls.
+ *
+ * \param ret See osl().
+ * \return See osl().
+ */
+_static_inline_ int lls(int ret)
+{
+ if (ret >= 0)
+ return ret;
+ return -LLS_ERRNO_TO_PARA_ERROR(-ret);
+}