Sha256: 6b0696c0040ff8d17b7cd668e9b05784c51f26b4e5070993a269479501f9e1cc

Contents?: true

Size: 1.33 KB

Versions: 15

Compression:

Stored size: 1.33 KB

Contents

#include "repair_casing.h"
#include "ruby.h"
#include <stddef.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
#include "salesforce_id_ext.h"
#include "charmap.h"

static void chunk_casing(const char character, bool* casing);

void repair_casing(char* id)
{
  const int    chunk_index = SALESFORCE_ID_SENSITIVE_LENGTH;
  const size_t casing_size = (size_t)SALESFORCE_ID_SENSITIVE_LENGTH;
        bool   casing[SALESFORCE_ID_SENSITIVE_LENGTH] = {false};

  chunk_casing(id[chunk_index], casing);
  chunk_casing(id[chunk_index + 1], &casing[5]);
  chunk_casing(id[chunk_index + 2], &casing[10]);

  for (size_t index = 0u; index < casing_size; ++index)
  {
    if (casing[index])
      id[index] = toupper(id[index]);
    else
      id[index] = tolower(id[index]);
  }

  id[chunk_index]     = toupper(id[chunk_index]);
  id[chunk_index + 1] = toupper(id[chunk_index]);
  id[chunk_index + 2] = toupper(id[chunk_index]);
}

// Casing is an array of size 5
void chunk_casing(const char character, bool* casing)
{
  const size_t casing_size = 5u;
        int    map_index   = charmap_index(character);

  if (map_index < 0)
  {
    rb_raise(rb_eArgError, "Salesforce ID contains invalid character");
    return;
  }

  for (size_t bit_index = 0u; bit_index < casing_size; ++bit_index)
    casing[bit_index] = (map_index & (1u << bit_index)) != 0u;
}

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
salesforce_id-1.4.6 ext/salesforce_id/repair_casing.c
salesforce_id-1.4.5 ext/salesforce_id/repair_casing.c
salesforce_id-1.4.4 ext/salesforce_id/repair_casing.c
salesforce_id-1.4.3 ext/salesforce_id/repair_casing.c
salesforce_id-1.4.2 ext/salesforce_id/repair_casing.c
salesforce_id-1.4.1 ext/salesforce_id/repair_casing.c
salesforce_id-1.4.0 ext/salesforce_id/repair_casing.c
salesforce_id-1.3.4 ext/salesforce_id/repair_casing.c
salesforce_id-1.3.3 ext/salesforce_id/repair_casing.c
salesforce_id-1.3.2 ext/salesforce_id/repair_casing.c
salesforce_id-1.3.1 ext/salesforce_id/repair_casing.c
salesforce_id-1.3.0 ext/salesforce_id/repair_casing.c
salesforce_id-1.2.0 ext/salesforce_id/repair_casing.c
salesforce_id-1.1.0 ext/salesforce_id/repair_casing.c
salesforce_id-1.0.0 ext/salesforce_id/repair_casing.c