diff options
| author | 2022-11-23 19:14:55 +0100 | |
|---|---|---|
| committer | 2022-11-23 19:14:55 +0100 | |
| commit | 0ff3b32e712a7750feef9e19dca3507641eb01ea (patch) | |
| tree | 1c9e9910f137f0a20229a44ac7066d66c29df186 /data.c | |
| parent | New function object_get_by_md5(). (diff) | |
| download | snac2-0ff3b32e712a7750feef9e19dca3507641eb01ea.tar.gz snac2-0ff3b32e712a7750feef9e19dca3507641eb01ea.tar.xz snac2-0ff3b32e712a7750feef9e19dca3507641eb01ea.zip | |
New function list_del_md5().
Diffstat (limited to 'data.c')
| -rw-r--r-- | data.c | 38 |
1 files changed, 38 insertions, 0 deletions
| @@ -314,6 +314,44 @@ int list_add_md5(const char *fn, const char *md5) | |||
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | 316 | ||
| 317 | int list_del_md5(const char *fn, const char *md5) | ||
| 318 | /* deletes an md5 from a list */ | ||
| 319 | { | ||
| 320 | int status = 404; | ||
| 321 | FILE *i, *o; | ||
| 322 | |||
| 323 | if ((i = fopen(fn, "r")) != NULL) { | ||
| 324 | flock(fileno(i), LOCK_EX); | ||
| 325 | |||
| 326 | xs *nfn = xs_fmt("%s.new", fn); | ||
| 327 | |||
| 328 | if ((o = fopen(nfn, "w")) != NULL) { | ||
| 329 | char line[32 + 1]; | ||
| 330 | |||
| 331 | while (fgets(line, sizeof(line), i) != NULL) { | ||
| 332 | if (memcmp(line, md5, 32) != 0) | ||
| 333 | fwrite(line, sizeof(line), 1, o); | ||
| 334 | } | ||
| 335 | |||
| 336 | fclose(o); | ||
| 337 | |||
| 338 | xs *ofn = xs_fmt("%s.old", fn); | ||
| 339 | |||
| 340 | link(fn, ofn); | ||
| 341 | rename(nfn, fn); | ||
| 342 | } | ||
| 343 | else | ||
| 344 | status = 500; | ||
| 345 | |||
| 346 | fclose(i); | ||
| 347 | } | ||
| 348 | else | ||
| 349 | status = 500; | ||
| 350 | |||
| 351 | return status; | ||
| 352 | } | ||
| 353 | |||
| 354 | |||
| 317 | d_char *_follower_fn(snac *snac, char *actor) | 355 | d_char *_follower_fn(snac *snac, char *actor) |
| 318 | { | 356 | { |
| 319 | xs *md5 = xs_md5_hex(actor, strlen(actor)); | 357 | xs *md5 = xs_md5_hex(actor, strlen(actor)); |