| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // NSData+SA_NSDataExtensions.m
- //
- // Copyright 2015-2021 Said Achmiz.
- // See LICENSE and README.md for more info.
-
- #import "NSData+SA_NSDataExtensions.h"
-
- @implementation NSData (SA_NSDataExtensions)
-
- -(BOOL) isNullTerminated {
- if (self.length == 0)
- return NO;
-
- return (((char*) self.bytes)[self.length - 1] == '\0');
- }
-
- -(const char *) SA_terminatedCString {
- return self.SA_dataWithTerminatedCString.bytes;
- }
-
- -(NSData *) SA_dataWithTerminatedCString {
- if (self.length == 0) {
- return [NSData dataWithBytes:"\0"
- length:1];
- } else if (self.isNullTerminated) {
- return self;
- } else {
- char* terminated_string_buffer = malloc(self.length + 1);
- [self getBytes:terminated_string_buffer
- length:self.length];
- terminated_string_buffer[self.length] = '\0';
-
- return [NSData dataWithBytesNoCopy:terminated_string_buffer
- length:(self.length + 1)
- freeWhenDone:YES];
- }
- }
-
- -(const char *) SA_unterminatedByteString {
- return self.SA_dataWithUnterminatedByteString.bytes;
- }
-
- -(NSData *) SA_dataWithUnterminatedByteString {
- if (self.length == 0 || self.isNullTerminated == NO) {
- return self;
- } else {
- char* unterminated_string_buffer = malloc(self.length - 1);
- [self getBytes:unterminated_string_buffer length:self.length - 1];
-
- return [NSData dataWithBytesNoCopy:unterminated_string_buffer
- length:(self.length - 1)
- freeWhenDone:YES];
- }
- }
-
- +(NSData *) dataWithBlankCString {
- return [NSData dataWithBytes:"\0"
- length:1];
- }
-
- +(NSData *) dataFromCString:(const char *)cString {
- return [NSData dataWithBytes:cString
- length:strlen(cString)];
- }
-
- +(NSData *) dataWithCString:(char *)cString {
- return [NSData dataWithBytesNoCopy:cString
- length:strlen(cString)];
- }
-
- @end
|