From eada9d3cd132289f65ddb275e9871f0d479dcfab Mon Sep 17 00:00:00 2001 From: achmizs <1874748+achmizs@users.noreply.github.com> Date: Sat, 4 Dec 2021 05:04:41 -0500 Subject: [PATCH] Added +[dataFromCString:] and +[dataFromCString:]; much cleanup --- NSData+SA_NSDataExtensions.h | 12 ++++++- NSData+SA_NSDataExtensions.m | 66 ++++++++++++++++++++---------------- README.md | 2 +- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/NSData+SA_NSDataExtensions.h b/NSData+SA_NSDataExtensions.h index 162cc76..bbe6e51 100644 --- a/NSData+SA_NSDataExtensions.h +++ b/NSData+SA_NSDataExtensions.h @@ -90,6 +90,16 @@ /** Returns an NSData object containing a blank C string (i.e. a byte sequence of length 1, containing the null character '\0'). */ -+(NSData *)dataWithBlankCString; ++(NSData *) dataWithBlankCString; + +/** Returns an NSData object containing bytes copied from the given C string + (sans the null terminator). + */ ++(NSData *) dataFromCString:(const char *)cString; + +/** Returns an NSData object containing the bytes of the given C string + (sans the null terminator). + */ ++(NSData *) dataWithCString:(char *)cString; @end diff --git a/NSData+SA_NSDataExtensions.m b/NSData+SA_NSDataExtensions.m index 5b40f90..3aac60d 100644 --- a/NSData+SA_NSDataExtensions.m +++ b/NSData+SA_NSDataExtensions.m @@ -25,59 +25,65 @@ @implementation NSData (SA_NSDataExtensions) --(BOOL)isNullTerminated -{ +-(BOOL) isNullTerminated { + if (self.length == 0) + return NO; + return (((char*) self.bytes)[self.length - 1] == '\0'); } --(const char *)SA_terminatedCString -{ +-(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) - { +-(NSData *) SA_dataWithTerminatedCString { + if (self.length == 0) { + return [NSData dataWithBytes:"\0" + length:1]; + } else if (self.isNullTerminated) { return self; - } - else - { + } else { char* terminated_string_buffer = malloc(self.length + 1); - [self getBytes:terminated_string_buffer length:self.length]; + [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]; + return [NSData dataWithBytesNoCopy:terminated_string_buffer + length:(self.length + 1) + freeWhenDone:YES]; } } --(const char *)SA_unterminatedByteString -{ +-(const char *) SA_unterminatedByteString { return self.SA_dataWithUnterminatedByteString.bytes; } --(NSData *)SA_dataWithUnterminatedByteString -{ - if(self.length == 0 || self.isNullTerminated == NO) - { +-(NSData *) SA_dataWithUnterminatedByteString { + if (self.length == 0 || self.isNullTerminated == NO) { return self; - } - else - { + } 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]; + return [NSData dataWithBytesNoCopy:unterminated_string_buffer + length:(self.length - 1) + freeWhenDone:YES]; } } -+(NSData *)dataWithBlankCString -{ - return [NSData dataWithBytes:"\0" length:1]; ++(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 diff --git a/README.md b/README.md index 4276185..15b200d 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,6 @@ NSData+SA_NSDataExtensions Adds utility functions to NSData, that help deal with null termination of C strings. -This category on NSData adds properties that allow you to get the null-terminated or non-null-terminated versions of byte arrays stored as NSData objects, and to easily check whether an NSData's byte array is, or is not, null-terminated (that is, whether its last byte is a null). +This category on NSData adds properties that allow you to get the null-terminated or non-null-terminated versions of byte arrays stored as NSData objects, and to easily check whether an NSData’s byte array is, or is not, null-terminated (that is, whether its last byte is a null). Copyright (c) 2015 Said Achmiz.