** dav_fs_remove_locknull_member: Removes filename from the locknull list ** for directory path. */
| 863 | ** for directory path. |
| 864 | */ |
| 865 | static dav_error * dav_fs_remove_locknull_member(apr_pool_t *p, |
| 866 | const char *filename, |
| 867 | dav_buffer *pbuf) |
| 868 | { |
| 869 | dav_error *err; |
| 870 | apr_size_t len; |
| 871 | apr_size_t scanlen; |
| 872 | char *scan; |
| 873 | const char *scanend; |
| 874 | char *dirpath = apr_pstrdup(p, filename); |
| 875 | char *fname = strrchr(dirpath, '/'); |
| 876 | int dirty = 0; |
| 877 | |
| 878 | if (fname != NULL) |
| 879 | *fname++ = '\0'; |
| 880 | else |
| 881 | fname = dirpath; |
| 882 | len = strlen(fname) + 1; |
| 883 | |
| 884 | if ((err = dav_fs_load_locknull_list(p, dirpath, pbuf)) != NULL) { |
| 885 | /* ### add a higher level description? */ |
| 886 | return err; |
| 887 | } |
| 888 | |
| 889 | for (scan = pbuf->buf, scanend = scan + pbuf->cur_len; |
| 890 | scan < scanend; |
| 891 | scan += scanlen) { |
| 892 | scanlen = strlen(scan) + 1; |
| 893 | if (len == scanlen && memcmp(fname, scan, scanlen) == 0) { |
| 894 | pbuf->cur_len -= scanlen; |
| 895 | memmove(scan, scan + scanlen, scanend - (scan + scanlen)); |
| 896 | dirty = 1; |
| 897 | break; |
| 898 | } |
| 899 | } |
| 900 | |
| 901 | if (dirty) { |
| 902 | if ((err = dav_fs_save_locknull_list(p, dirpath, pbuf)) != NULL) { |
| 903 | /* ### add a higher level description? */ |
| 904 | return err; |
| 905 | } |
| 906 | } |
| 907 | |
| 908 | return NULL; |
| 909 | } |
| 910 | |
| 911 | /* Note: used by dav_fs_repos.c */ |
| 912 | dav_error * dav_fs_get_locknull_members( |
no test coverage detected