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; }
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; }
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; }
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 }