ystate.c
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:2k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /* -*- Mode: C; c-file-style: "bsd" -*- */
  2. /*
  3.  * Yarrow - Cryptographic Pseudo-Random Number Generator
  4.  * Copyright (c) 2000 Zero-Knowledge Systems, Inc.
  5.  *
  6.  * See the accompanying LICENSE file for license information.
  7.  */
  8. #include <stdio.h>
  9. #include <errno.h>
  10. #if !defined(macintosh)
  11. # include <sys/types.h>
  12. # include <sys/stat.h>
  13. # include <fcntl.h>
  14. #endif
  15. #include "yarrow.h"
  16. #include "ystate.h"
  17. #include "yexcep.h"
  18. #ifdef YARROW_SAVE_STATE
  19. #if defined(macintosh) && YARROW_DRIVER
  20. /* Mac OS -- driver environment */
  21. #  include "YarrowDriverCore.h"
  22. int STATE_Save(const char *filename, const Yarrow_STATE* state)
  23. {
  24. # pragma unused(filename)
  25.   
  26.     return (PerformStateWrite(state) ? YARROW_OK : YARROW_STATE_ERROR);
  27. }
  28. int STATE_Load(const char *filename, Yarrow_STATE* state)
  29. {
  30. # pragma unused(filename)
  31.   
  32.     return (PerformStateRead(state) ? YARROW_OK : YARROW_STATE_ERROR);
  33. }
  34. #else
  35. /* Other platforms */
  36. int STATE_Save(const char *filename, const Yarrow_STATE* state)
  37. {
  38.     EXCEP_DECL;
  39.     FILE* fp = NULL;
  40. #ifndef WIN32
  41.     int fd = open( filename, O_CREAT | O_RDWR, 0600 );
  42.     if ( fd < 0 ) { THROW( YARROW_STATE_ERROR ); }
  43.     fp = fdopen(fd, "wb");
  44. #endif
  45.     if ( !fp )
  46.     {
  47. fp = fopen(filename,"wb");
  48.     }
  49.     if ( !fp ) { THROW( YARROW_STATE_ERROR ); }
  50. #ifndef WIN32
  51.     if ( chmod(filename, 0600) != 0 ) { THROW( YARROW_STATE_ERROR ); }
  52. #endif
  53.     if ( fwrite(state, sizeof(*state), 1, fp) != 1 ) 
  54.     { 
  55. THROW( YARROW_STATE_ERROR ); 
  56.     }
  57.  CATCH:
  58.     if ( fp ) 
  59.     {
  60. if ( fclose(fp) != 0 ) { THROW( YARROW_STATE_ERROR ); }
  61.     }    
  62.     EXCEP_RET;
  63. }
  64. int STATE_Load(const char *filename, Yarrow_STATE* state)
  65. {
  66.     EXCEP_DECL;
  67.     FILE* fp;
  68.     fp = fopen(filename, "rb");
  69.     if ( !fp ) 
  70.     { 
  71. if ( errno == ENOENT ) /* file doesn't exist */
  72. {
  73.     THROW( YARROW_NO_STATE );
  74. }
  75. else /* something else went wrong */
  76. {
  77.     THROW( YARROW_STATE_ERROR ); 
  78. }
  79.     }
  80.     if ( fread(state, sizeof(*state), 1, fp) != 1 ) 
  81.     { 
  82. THROW( YARROW_STATE_ERROR );
  83.     }
  84.  CATCH:
  85.     if ( fp )
  86.     {
  87. if ( fclose(fp) != 0 ) { THROW( YARROW_STATE_ERROR ); }
  88.     }    
  89.     EXCEP_RET;
  90. }
  91. #endif    /* platform */
  92. #endif    /* YARROW_SAVE_STATE */