Lines Matching defs:atomic
28 * Lock cache and configuration files for atomic update
85 FcAtomic *atomic = malloc (total_len);
86 if (!atomic)
89 atomic->file = (FcChar8 *) (atomic + 1);
90 strcpy ((char *) atomic->file, (char *) file);
92 atomic->new = atomic->file + file_len + 1;
93 strcpy ((char *) atomic->new, (char *) file);
94 strcat ((char *) atomic->new, NEW_NAME);
96 atomic->lck = atomic->new + new_len + 1;
97 strcpy ((char *) atomic->lck, (char *) file);
98 strcat ((char *) atomic->lck, LCK_NAME);
100 atomic->tmp = atomic->lck + lck_len + 1;
102 return atomic;
106 FcAtomicLock (FcAtomic *atomic)
116 strcpy ((char *) atomic->tmp, (char *) atomic->file);
117 strcat ((char *) atomic->tmp, TMP_NAME);
118 fd = FcMakeTempfile ((char *) atomic->tmp);
125 unlink ((char *) atomic->tmp);
132 unlink ((char *) atomic->tmp);
137 unlink ((char *) atomic->tmp);
140 ret = link ((char *) atomic->tmp, (char *) atomic->lck);
143 /* the filesystem where atomic->lck points to may not supports
146 ret = mkdir ((char *) atomic->lck, 0600);
149 (void) unlink ((char *) atomic->tmp);
151 ret = mkdir ((char *) atomic->lck, 0600);
161 if (FcStat (atomic->lck, &lck_stat) >= 0)
169 if (rmdir ((char *) atomic->lck) == 0)
170 return FcAtomicLock (atomic);
174 if (unlink ((char *) atomic->lck) == 0)
175 return FcAtomicLock (atomic);
178 if (rmdir ((char *) atomic->lck) == 0)
179 return FcAtomicLock (atomic);
185 (void) unlink ((char *) atomic->new);
190 FcAtomicNewFile (FcAtomic *atomic)
192 return atomic->new;
196 FcAtomicOrigFile (FcAtomic *atomic)
198 return atomic->file;
202 FcAtomicReplaceOrig (FcAtomic *atomic)
205 unlink ((const char *) atomic->file);
207 if (rename ((char *) atomic->new, (char *) atomic->file) < 0)
213 FcAtomicDeleteNew (FcAtomic *atomic)
215 unlink ((char *) atomic->new);
219 FcAtomicUnlock (FcAtomic *atomic)
222 if (unlink ((char *) atomic->lck) == -1)
223 rmdir ((char *) atomic->lck);
225 rmdir ((char *) atomic->lck);
230 FcAtomicDestroy (FcAtomic *atomic)
232 if (atomic)
233 free (atomic);