FANDOM


このページを編集する際は,編集に関する方針に従ってください. 編集

概要 編集

引数 編集

  • const char */*name*/
  • (int /*direction*/)

実装 編集

== *gcc-4.1.0/gcc/gcov-io.h  ==
 228 /* In gcov we want function linkage to be static.  In the compiler we want
 229    it extern, so that they can be accessed from elsewhere.  In libgcov we
 230    need these functions to be extern, so prefix them with __gcov.  In
 231    libgcov they must also be hidden so that the instance in the executable
 232    is not also used in a DSO.  */
233 #if IN_LIBGCOV

~

238 #define gcov_open __gcov_open

== *gcc-4.1.0/gcc/gcov-io.c  ==
  48 /* Open a gcov file. NAME is the name of the file to open and MODE
  49    indicates whether a new file should be created, or an existing file
  50    opened for modification. If MODE is >= 0 an existing file will be
  51    opened, if possible, and if MODE is <= 0, a new file will be
  52    created. Use MODE=0 to attempt to reopen an existing file and then
  53    fall back on creating a new one.  Return zero on failure, >0 on
  54    opening an existing file and <0 on creating a new one.  */
55 
56 GCOV_LINKAGE int
57 #if IN_LIBGCOV
58 gcov_open (const char *name)
59 #else
60 gcov_open (const char *name, int mode)
61 #endif
62 {
63 #if IN_LIBGCOV
64   const int mode = 0;
65 #endif

~

66 #if GCOV_LOCKED
67   struct flock s_flock;
68   int fd;
69 
70   s_flock.l_type = F_WRLCK;
71   s_flock.l_whence = SEEK_SET;
72   s_flock.l_start = 0;
73   s_flock.l_len = 0; /* Until EOF.  */
74   s_flock.l_pid = getpid ();
75 #endif
76   

~
*gcov_varの初期化

77   gcc_assert (!gcov_var.file);
78   gcov_var.start = 0;
79   gcov_var.offset = gcov_var.length = 0;
80   gcov_var.overread = -1u;
81   gcov_var.error = 0;
82 #if !IN_LIBGCOV
83   gcov_var.endian = 0;
84 #endif

~
*ファイルを開く

85 #if GCOV_LOCKED
86   if (mode > 0)
87     fd = open (name, O_RDWR);
88   else
89     fd = open (name, O_RDWR | O_CREAT, 0666);
90   if (fd < 0)
91     return 0;
92 
93   while (fcntl (fd, F_SETLKW, &s_flock) && errno == EINTR)
94     continue;
95 
96   gcov_var.file = fdopen (fd, "r+b");
97   if (!gcov_var.file)
98     {
99       close (fd);
100       return 0;
101     }
102 
103   if (mode > 0)
104     gcov_var.mode = 1;
105   else if (mode == 0)
106     {
107       struct stat st;
108 
109       if (fstat (fd, &st) < 0)
110         {
111           fclose (gcov_var.file);
112           gcov_var.file = 0;
113           return 0;
114         }
115       if (st.st_size != 0)
116         gcov_var.mode = 1;
117       else
118         gcov_var.mode = mode * 2 + 1;
119     }
120   else
121     gcov_var.mode = mode * 2 + 1;
122 #else
123   if (mode >= 0)
124     gcov_var.file = fopen (name, "r+b");
125   if (gcov_var.file)
126     gcov_var.mode = 1;
127   else if (mode <= 0)
128     {
129       gcov_var.file = fopen (name, "w+b");
130       if (gcov_var.file)
131         gcov_var.mode = mode * 2 + 1;
132     }
133   if (!gcov_var.file)
134     return 0;
135 #endif
136 

~
*バッファリングしない

137   setbuf (gcov_var.file, (char *)0);
138   
139   return 1;
140 }


リンク元

広告ブロッカーが検出されました。


広告収入で運営されている無料サイトWikiaでは、このたび広告ブロッカーをご利用の方向けの変更が加わりました。

広告ブロッカーが改変されている場合、Wikiaにアクセスしていただくことができなくなっています。カスタム広告ブロッカーを解除してご利用ください。

FANDOMでも見てみる

おまかせWiki