Fix get_checksum to take a const char* as well as string so Debug mode doesn't barf
authorJim Morris <morris@wolfman.com>
Tue, 25 Jun 2013 07:10:22 +0000 (00:10 -0700)
committerJim Morris <morris@wolfman.com>
Tue, 25 Jun 2013 07:11:41 +0000 (00:11 -0700)
src/libs/utils.cpp
src/libs/utils.h

index 5c4ba1d..72a862e 100644 (file)
@@ -15,12 +15,18 @@ using std::string;
 
 volatile bool _isr_context = false;
 
-uint16_t get_checksum(const string to_check){
+uint16_t get_checksum(const string& to_check){
+    return get_checksum(to_check.c_str());
+}
+
+uint16_t get_checksum(const char* to_check){
    // From: http://en.wikipedia.org/wiki/Fletcher%27s_checksum
    uint16_t sum1 = 0;
    uint16_t sum2 = 0;
-   for( unsigned int index = 0; index < to_check.length(); ++index ){
-      sum1 = (sum1 + to_check[index]) % 255;
+   const char* p= to_check;
+   char c;
+   while((c= *p++) != 0) {
+      sum1 = (sum1 + c) % 255;
       sum2 = (sum2 + sum1) % 255;
    }
    return (sum2 << 8) | sum1;
index c950452..4012b5f 100644 (file)
@@ -19,7 +19,8 @@ bool is_whitespace( int );
 
 string remove_non_number( string str );
 
-uint16_t get_checksum(const string to_check);
+uint16_t get_checksum(const string& to_check);
+uint16_t get_checksum(const char* to_check);
 
 void get_checksums(uint16_t check_sums[], const string key);