Browse Source

save wallet updates to .tmp, then rename orig to .old

release/v0.1
jl777 9 years ago
parent
commit
123e08b02f
  1. 30
      iguana/SuperNET_keys.c

30
iguana/SuperNET_keys.c

@ -126,9 +126,12 @@ bits256 SuperNET_linehash(char *_line)
return(hash); return(hash);
} }
int32_t SuperNET_savejsonfile(char *fname,bits256 privkey,bits256 destpubkey,cJSON *json) int32_t SuperNET_savejsonfile(char *finalfname,bits256 privkey,bits256 destpubkey,cJSON *json)
{ {
char *confstr,*ciphered; FILE *fp; char *confstr,*ciphered; char destfname[1024]; FILE *fp; int32_t retval = -1;
strcpy(destfname,finalfname);
if ( (fp= fopen(finalfname,"rb")) != 0 )
strcat(destfname,".tmp");
confstr = jprint(json,0); confstr = jprint(json,0);
if ( bits256_nonz(privkey) != 0 && bits256_cmp(privkey,GENESIS_PUBKEY) != 0 ) if ( bits256_nonz(privkey) != 0 && bits256_cmp(privkey,GENESIS_PUBKEY) != 0 )
{ {
@ -136,26 +139,35 @@ int32_t SuperNET_savejsonfile(char *fname,bits256 privkey,bits256 destpubkey,cJS
if ( (ciphered= SuperNET_cipher(0,0,json,0,privkey,destpubkey,confstr)) != 0 ) if ( (ciphered= SuperNET_cipher(0,0,json,0,privkey,destpubkey,confstr)) != 0 )
{ {
//printf("ciphered.save (%s) <- (%s)\n",fname,confstr); //printf("ciphered.save (%s) <- (%s)\n",fname,confstr);
if ( (fp= fopen(fname,"wb")) != 0 ) if ( (fp= fopen(destfname,"wb")) != 0 )
{ {
fwrite(ciphered,1,strlen(ciphered)+1,fp); if ( fwrite(ciphered,1,strlen(ciphered)+1,fp) == strlen(ciphered)+1 )
retval = 0;
fclose(fp); fclose(fp);
} }
free(ciphered); free(ciphered);
} else printf("error ciphering.(%s) (%s)\n",fname,confstr); } else printf("error ciphering.(%s) (%s)\n",destfname,confstr);
} }
else else
{ {
//sprintf(fname,"confs/iguana.conf"); //sprintf(fname,"confs/iguana.conf");
printf("save (%s) <- (%s)\n",fname,confstr); printf("save (%s) <- (%s)\n",destfname,confstr);
if ( (fp= fopen(fname,"wb")) != 0 ) if ( (fp= fopen(destfname,"wb")) != 0 )
{ {
fwrite(confstr,1,strlen(confstr)+1,fp); if ( fwrite(confstr,1,strlen(confstr)+1,fp) == strlen(confstr)+1 )
retval = 0;
fclose(fp); fclose(fp);
} }
} }
free(confstr); free(confstr);
return(0); if ( retval == 0 && strcmp(destfname,finalfname) != 0 )
{
char oldfname[1024];
strcpy(oldfname,finalfname), strcat(oldfname,".old");
OS_renamefile(finalfname,oldfname);
OS_renamefile(destfname,finalfname);
}
return(retval);
} }
int32_t SuperNET_userkeys(char *passphrase,int32_t passsize,char *fname2fa,int32_t fnamesize) int32_t SuperNET_userkeys(char *passphrase,int32_t passsize,char *fname2fa,int32_t fnamesize)

Loading…
Cancel
Save