@@ -23,8 +23,59 @@ * OFWriteFailedException.h ObjFW/OFWriteFailedException.h * * @brief An exception indicating that writing to an object failed. */ @interface OFWriteFailedException: OFReadOrWriteFailedException +{ + size_t _bytesWritten; +} + +/*! + * The number of bytes already written before the write failed. + * + * This can be used to make sure that a retry does not write data already + * written before. + */ +@property (readonly, nonatomic) size_t bytesWritten; + ++ (instancetype)exceptionWithObject: (id)object + requestedLength: (size_t)requestedLength + errNo: (int)errNo OF_UNAVAILABLE; + +/*! + * @brief Creates a new, autoreleased write failed exception. + * + * @param object The object from which reading or to which writing failed + * @param requestedLength The requested length of the data that could not be + * read / written + * @param bytesWritten The amount of bytes already written before the write + * failed + * @param errNo The errno of the error that occurred + * @return A new, autoreleased write failed exception + */ ++ (instancetype)exceptionWithObject: (id)object + requestedLength: (size_t)requestedLength + bytesWritten: (size_t)bytesWritten + errNo: (int)errNo; + +- initWithObject: (id)object + requestedLength: (size_t)requestedLength + errNo: (int)errNo OF_UNAVAILABLE; + +/*! + * @brief Initializes an already allocated write failed exception. + * + * @param object The object from which reading or to which writing failed + * @param requestedLength The requested length of the data that could not be + * read / written + * @param bytesWritten The amount of bytes already written before the write + * failed + * @param errNo The errno of the error that occurred + * @return A new open file failed exception + */ +- initWithObject: (id)object + requestedLength: (size_t)requestedLength + bytesWritten: (size_t)bytesWritten + errNo: (int)errNo OF_DESIGNATED_INITIALIZER; @end OF_ASSUME_NONNULL_END