Exemplo n.º 1
0
int main(void)
{
    uint8_t *bin_buf = NULL;
    size_t bin_size;
    sg_vlstr *b64_str;
    struct sg_flex_buf *raw_bin;

    const char *s = "hello world!!!!";
    sg_file_to_buf("/home/metalwood/file1.mp3", &bin_buf, &bin_size);
    b64_str = sg_base64_easy_enc_buf((void *)bin_buf, bin_size);
    sg_log_inf("base64 len:%"PRIu64".", sg_vlstrlen(b64_str));
    sg_file_overwrite("/home/metalwood/file-base64.txt", (uint8_t *)sg_vlstrraw(b64_str), sg_vlstrlen(b64_str));
    /*if (bin_buf)
        free(bin_buf); *//* double free? */
    sg_log_inf("Raw size %lu, base64 string lenght %"PRIu64".", bin_size, sg_vlstrlen(b64_str));

    raw_bin = sg_base64_easy_dec_buf(sg_vlstrraw(b64_str));
    sg_file_overwrite("/home/metalwood/file2.mp3", (uint8_t *)raw_bin->mem, raw_bin->size);

    sg_log_inf("Raw size %lu, base64 string lenght %"PRIu64", decoded size %lu.", bin_size, sg_vlstrlen(b64_str), raw_bin->size);

    if (bin_buf)
        free(bin_buf);
    if (b64_str)
        sg_vlstrfree(&b64_str);
    if (raw_bin)
        sg_flex_buf_destroy(raw_bin);
    return 0;
}
Exemplo n.º 2
0
int sg_big_float_set_big_int(sg_big_float_t *dst, sg_big_int_t *src)
{
    if (!dst || !src)
        return -1;

    sg_vlstr_t* str = sg_vlstralloc();
    sg_big_int_get_str(src, SGNUMSYS_DEC, str);
    sg_big_float_set_str(dst, sg_vlstrraw(str), SGNUMSYS_DEC);
    sg_vlstrfree(&str);
    return 0;
}
Exemplo n.º 3
0
int sg_big_float_get_str(sg_big_float_t *src, enum sg_num_sys sys, sg_vlstr_t * str)
{
    int base = SG_COMPUTE_BASE(sys);
    if (!src || !str || base <= 0)
        return -1;

    mp_exp_t exp;
    char* s = mpf_get_str(NULL, &exp, base, 0, src->mpf);
    sg_vlstrcpy(str, s);
    if (exp != 0) {
        long mantissa_length = strlen(s);
        /* rid negative symbol */
        if (mpf_sgn(src->mpf) == -1)
            --mantissa_length;
        sg_vlstr_t* float_exp = sg_vlstrfmt("e%ld", exp - mantissa_length);
        sg_vlstrcat(str, sg_vlstrraw(float_exp));
        sg_vlstrfree(&float_exp);
    }
    free(s);
    return 0;
}
Exemplo n.º 4
0
int sg_daemon_start_with_os(void)
{
#if defined(OS_WIN)
    HKEY key;
    HKEY root = HKEY_LOCAL_MACHINE;
    char *sub_key = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    char module[SG_PATH_MAX]; /* executable filename */
    char module_name[SG_PATH_MAX]; /* executable short filename */
    DWORD disposition = REG_OPENED_EXISTING_KEY;
    LONG retval;

    if (sg_module_path(module, SG_PATH_MAX) != 0) {
        sg_log_err("Get process path error.");
        return -1;
    }

    if (sg_module_name(module_name, SG_PATH_MAX) != 0) {
        sg_log_err("Get process name error.");
        return -1;
    }

    retval = RegCreateKeyEx(root, sub_key, 0, NULL, REG_OPTION_NON_VOLATILE,
                KEY_ALL_ACCESS, NULL, &key, &disposition);
    if (retval != ERROR_SUCCESS) {
        sg_log_err("failed to find.");
        return -1;
    }

    retval = RegSetValueEx(key, module_name, 0, REG_SZ, (BYTE *)module, strlen(module));
    RegCloseKey(key);
    if (retval != ERROR_SUCCESS) {
        sg_log_err("failed to reg.");
        return -1;
    }
    return 0;
#else
    const char *filename = "/etc/rc.local";
    char module[SG_PATH_MAX]; /* executable filename */
    sg_vlstr *file_str;
    int retval;

    if (sg_module_path(module, SG_PATH_MAX) != 0) {
        sg_log_err("Get process path error.");
        return -1;
    }

    file_str = sg_file_to_str(filename);
    if (!file_str)
        return -1;

    /* already exist */
    if (strstr(sg_vlstrraw(file_str), module)) {
        sg_vlstrfree(&file_str);
        return 0;
    }

    sg_vlstrcat(file_str, "\n");
    sg_vlstrcat(file_str, module);

    retval = sg_file_overwrite(filename, (uint8_t *)sg_vlstrraw(file_str), sg_vlstrlen(file_str));
    sg_vlstrfree(&file_str);
    return retval;
#endif
}