MCPcopy Create free account
hub / github.com/apache/httpd / dav_fs_remove_lock

Function dav_fs_remove_lock

modules/dav/fs/lock.c:1246–1317  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1244}
1245
1246static dav_error * dav_fs_remove_lock(dav_lockdb *lockdb,
1247 const dav_resource *resource,
1248 const dav_locktoken *locktoken)
1249{
1250 dav_error *err;
1251 dav_buffer buf = { 0 };
1252 dav_lock_discovery *dh = NULL;
1253 dav_lock_indirect *ih = NULL;
1254 apr_datum_t key;
1255
1256 key = dav_fs_build_key(lockdb->info->pool, resource);
1257
1258 if (locktoken != NULL) {
1259 dav_lock_discovery *dp;
1260 dav_lock_discovery *dprev = NULL;
1261 dav_lock_indirect *ip;
1262 dav_lock_indirect *iprev = NULL;
1263
1264 if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
1265 &dh, &ih)) != NULL) {
1266 /* ### maybe add a higher-level description */
1267 return err;
1268 }
1269
1270 for (dp = dh; dp != NULL; dp = dp->next) {
1271 if (dav_compare_locktoken(locktoken, dp->locktoken) == 0) {
1272 if (dprev)
1273 dprev->next = dp->next;
1274 else
1275 dh = dh->next;
1276 }
1277 dprev = dp;
1278 }
1279
1280 for (ip = ih; ip != NULL; ip = ip->next) {
1281 if (dav_compare_locktoken(locktoken, ip->locktoken) == 0) {
1282 if (iprev)
1283 iprev->next = ip->next;
1284 else
1285 ih = ih->next;
1286 }
1287 iprev = ip;
1288 }
1289
1290 }
1291
1292 /* save the modified locks, or remove all locks (dh=ih=NULL). */
1293 if ((err = dav_fs_save_lock_record(lockdb, key, dh, ih)) != NULL) {
1294 /* ### maybe add a higher-level description */
1295 return err;
1296 }
1297
1298 /*
1299 ** If this resource is a locknull resource AND no more locks exist,
1300 ** then remove the locknull member.
1301 **
1302 ** Note: remove_locknull_state() attempts to convert a locknull member
1303 ** to a real member. In this case, all locks are gone, so the

Callers

nothing calls this directly

Calls 5

dav_fs_build_keyFunction · 0.85
dav_fs_load_lock_recordFunction · 0.85
dav_fs_save_lock_recordFunction · 0.85
dav_fs_pathnameFunction · 0.85

Tested by

no test coverage detected