Example #1
0
static uintptr_t
memarea_limit(const char *s)
{ number n;
  unsigned char *q;

  if ( str_number((unsigned char *)s, &q, &n, FALSE) == NUM_OK &&
       intNumber(&n) )
  { switch((int)*q)
    { case 'k':
      case 'K':
      case EOS:
	return (intptr_t)n.value.i K;
      case 'm':
      case 'M':
	return (intptr_t)n.value.i K K;
      case 'g':
      case 'G':
	return (intptr_t)n.value.i K K K;
      case 'b':
      case 'B':
	return (intptr_t)n.value.i;
    }
  }

  return MEMAREA_INVALID_SIZE;
}
Example #2
0
/* Functions to manage NSSM-specific settings in the registry. */
static int setting_set_number(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) {
  HKEY key = (HKEY) param;
  if (! key) return -1;

  unsigned long number;
  long error;

  /* Resetting to default? */
  if (! value || ! value->string) {
    error = RegDeleteValue(key, name);
    if (error == ERROR_SUCCESS || error == ERROR_FILE_NOT_FOUND) return 0;
    print_message(stderr, NSSM_MESSAGE_REGDELETEVALUE_FAILED, name, service_name, error_string(error));
    return -1;
  }
  if (str_number(value->string, &number)) return -1;

  if (default_value && number == (unsigned long) default_value) {
    error = RegDeleteValue(key, name);
    if (error == ERROR_SUCCESS || error == ERROR_FILE_NOT_FOUND) return 0;
    print_message(stderr, NSSM_MESSAGE_REGDELETEVALUE_FAILED, name, service_name, error_string(error));
    return -1;
  }

  if (set_number(key, (TCHAR *) name, number)) return -1;

  return 1;
}
Example #3
0
static int setting_set_exit_action(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) {
  unsigned long exitcode;
  TCHAR *code;
  TCHAR action_string[ACTION_LEN];

  if (additional) {
    /* Default action? */
    if (is_default(additional)) code = 0;
    else {
      if (str_number(additional, &exitcode)) return -1;
      code = (TCHAR *) additional;
    }
  }

  HKEY key = open_registry(service_name, name, KEY_WRITE);
  if (! key) return -1;

  long error;
  int ret = 1;

  /* Resetting to default? */
  if (value && value->string) _sntprintf_s(action_string, _countof(action_string), _TRUNCATE, _T("%s"), value->string);
  else {
    if (code) {
      /* Delete explicit action. */
      error = RegDeleteValue(key, code);
      RegCloseKey(key);
      if (error == ERROR_SUCCESS || error == ERROR_FILE_NOT_FOUND) return 0;
      print_message(stderr, NSSM_MESSAGE_REGDELETEVALUE_FAILED, code, service_name, error_string(error));
      return -1;
    }
    else {
      /* Explicitly keep the default action. */
      if (default_value) _sntprintf_s(action_string, _countof(action_string), _TRUNCATE, _T("%s"), (TCHAR *) default_value);
      ret = 0;
    }
  }

  /* Validate the string. */
  for (int i = 0; exit_action_strings[i]; i++) {
    if (! _tcsnicmp((const TCHAR *) action_string, exit_action_strings[i], ACTION_LEN)) {
      if (default_value && str_equiv(action_string, (TCHAR *) default_value)) ret = 0;
      if (RegSetValueEx(key, code, 0, REG_SZ, (const unsigned char *) exit_action_strings[i], (unsigned long) (_tcslen(action_string) + 1) * sizeof(TCHAR)) != ERROR_SUCCESS) {
        print_message(stderr, NSSM_MESSAGE_SETVALUE_FAILED, code, service_name, error_string(GetLastError()));
        RegCloseKey(key);
        return -1;
      }

      RegCloseKey(key);
      return ret;
    }
  }

  print_message(stderr, NSSM_MESSAGE_INVALID_EXIT_ACTION, action_string);
  for (int i = 0; exit_action_strings[i]; i++) _ftprintf(stderr, _T("%s\n"), exit_action_strings[i]);

  return -1;
}
Example #4
0
static int setting_get_exit_action(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) {
  unsigned long exitcode = 0;
  unsigned long *code = 0;

  if (additional) {
    if (! is_default(additional)) {
      if (str_number(additional, &exitcode)) return -1;
      code = &exitcode;
    }
  }

  TCHAR action_string[ACTION_LEN];
  bool default_action;
  if (get_exit_action(service_name, code, action_string, &default_action)) return -1;

  value_from_string(name, value, action_string);

  if (default_action && ! _tcsnicmp((const TCHAR *) action_string, (TCHAR *) default_value, ACTION_LEN)) return 0;
  return 1;
}
Example #5
0
File: nssm.cpp Project: myhhx/nssm
int str_number(const TCHAR *string, unsigned long *number) {
  TCHAR *bogus;
  return str_number(string, number, &bogus);
}
bool ParseAviris::Parse(QString fileName, HyperCube& cube)
{
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly))
    {
        return false;
    }
    QString *Text = new QString[10000]; int number_lines = 0;
        while (!file.atEnd()) {      //считывание текста в массив строк
            Text[number_lines] = file.readLine();
            number_lines++;
        }
    QString str_name[6];
        str_name[0] = "samples";
        str_name[1] = "lines";
        str_name[2] = "bands";
        str_name[3] = "header offset";
        str_name[4] = "data type";
        str_name[5] = "byte order";

        int samples = 0, lines = 0, bands = 0, header_offset = 0, data_type = 0, byte_order = 0;
        int array_name[6] = { samples, lines, bands, header_offset, data_type, byte_order };
        QString str_number;
        for (int n = 0, l = 0; n < 6; n++)
        {
        for (int k = 0; k < number_lines; k++) {
            QString  str_file(Text[k]); // создаем строку-копию из строки Text[k]
            bool search = str_file.contains(str_name[n],Qt::CaseInsensitive); //  поиск подстроки  в строке str с 0 позиции
            if (search){
                for (l = 0; l < str_file.length(); l++)
                {
                    if (str_file[l] >= '0' && str_file[l] <= '9') break; // если цифра найдена - то выходим из цикла

                }
                str_number = str_file.remove(0, l - 1); // str_number – подстрока str_file всех символов  с l позиции
                array_name[n] = str_number.toInt();
            }
        }
}       // запись значений параметров в куб
        cube.SetSamples(array_name[0]);
        cube.SetLines(array_name[1]);
        cube.SetBands(array_name[2]);
        cube.SetHeaderOffset(array_name[3]);
        cube.SetDataType(array_name[4]);
        cube.SetByteOrder(array_name[5]);
       // qDebug() << "";
        double wavelength[300];
        int	first_wavelength = 0; // номер строки "wavelength" в файле
        for(int n = 0; n < number_lines; n++)
        {
            QString  str_file(Text[n]); // создаем строку-копию из строки Text[k]
            bool search = str_file.contains("wavelength",Qt::CaseInsensitive); //  поиск подстроки  в строке str с 0 позиции
            if (search)
            { first_wavelength = n;
                break;
            }
        }
        for(int n = first_wavelength + 1, w = 0; n < first_wavelength + 225; n++)
        {
            QString  str_file(Text[n]); // создаем строку-копию из строки Text[k]
            int end_line = str_file.length(); // длина строки
            QString str_number;
            int first_digit = -1, comma = -1; // первая цифра, запятая
            for(int i = 0; i < end_line; i++)
            {
                if(i < end_line)
                {
                    if (str_file[i] >= '0' && str_file[i] <= '9')
                    {
                        first_digit = i; // поиск первой цифры
                        for(int c = first_digit; c < end_line; c++)
                        {
                            if(str_file[c] == ',' || str_file[c] == '}')
                            {
                                comma = c; break;
                            }
                            if(str_file[c] == ' ' )
                            {
                                comma = c; break;
                            }
                        }
                        QString str_number(str_file); // копия строки
                        str_number = str_file.remove(0, first_digit - 1);
                        str_number = str_file.remove(comma + 1, end_line + 1);
                       wavelength[w] = str_number.toDouble();
                      // qDebug() << wavelength[w];
                       w++;
                        str_file = str_file.remove(0, comma - 1);
                        end_line = str_file.length(); // длина строки
                    }
                }
            }
        }
        file.close(); // закрытие файла с параметрами
        char** dataCube = new char*[array_name[2]]; // bands
        int ChunkSize = array_name[0] * array_name[1] * array_name[4]; // samples*lines*datatype

        for (int i = 0; i < array_name[2]; i++)
        {
            dataCube[i] = new char[ChunkSize]; // samples*lines*datatype
        }

         int end_line_FileName = fileName.length(); // длина строки
         int point;
         for(int i = end_line_FileName; i > 0; i--)
         {
             if (i > 0)
             {
                 if (fileName[i] == '.')
                 {point = i; break;}
             }
         }
         fileName = fileName.remove(point, end_line_FileName);

        QFile dataFile(fileName); // открытие файла с данными
        if (!dataFile.open(QIODevice::ReadOnly))
        {
            return false;
        }
        for(int i = 0; i < array_name[2]; i++) // i < bands
        {
            //char* TempBuf = new char[ChunkSize];
            if(!dataFile.atEnd())
            {
                if(dataFile.read(dataCube[i], ChunkSize) != ChunkSize)
                {
                    return false;
                }
               // cube->DataCube(i, TempBuf, ChunkSize, 0);
            }
            //delete [] TempBuf;
        }
        dataFile.close();
        return true;
}