code: func (h Secretservice) List() (map[string]string, error) {
  	credsLabelC := C.CString(credentials.CredsLabel)
  	defer C.free(unsafe.Pointer(credsLabelC))
  
  	var pathsC **C.char
  	defer C.free(unsafe.Pointer(pathsC))
  	var acctsC **C.char
  	defer C.free(unsafe.Pointer(acctsC))
  	var listLenC C.uint
  	err := C.list(credsLabelC, &pathsC, &acctsC, &listLenC)
  	if err != nil {
  		defer C.g_error_free(err)
  		return nil, errors.New("Error from list function in secretservice_linux.c likely due to error in secretservice library")
  	}
  	defer C.freeListData(&pathsC, listLenC)
  	defer C.freeListData(&acctsC, listLenC)
  
  	resp := make(map[string]string)
  
  	listLen := int(listLenC)
  	if listLen == 0 {
  		return resp, nil
  	}
  	// The maximum capacity of the following two slices is limited to (2^29)-1 to remain compatible
  	// with 32-bit platforms. The size of a `*C.char` (a pointer) is 4 Byte on a 32-bit system
  	// and (2^29)*4 == math.MaxInt32 + 1. -- See issue golang/go#13656
  	pathTmp := (*[(1 << 29) - 1]*C.char)(unsafe.Pointer(pathsC))[:listLen:listLen]
  	acctTmp := (*[(1 << 29) - 1]*C.char)(unsafe.Pointer(acctsC))[:listLen:listLen]
  	for i := 0; i < listLen; i++ {
  		resp[C.GoString(pathTmp[i])] = C.GoString(acctTmp[i])
  	}
  
  	return resp, nil
  }
docs: // List returns the stored URLs and corresponding usernames for a given credentials label