Exemplo n.º 1
0
static int opp_chkput(struct obex_session *os, void *user_data)
{
	char *folder, *name, *path;
	int32_t time;
	const char *t;
	int err;

	if (obex_get_size(os) == OBJECT_SIZE_DELETE)
		return -ENOSYS;

	t = obex_get_name(os);
	if (t != NULL && !is_filename(t))
		return -EBADR;

	if (obex_option_auto_accept()) {
		folder = g_strdup(obex_option_root_folder());
		name = g_strdup(obex_get_name(os));
		goto skip_auth;
	}

	time = 0;
	err = manager_request_authorization(user_data, time, &folder, &name);
	if (err < 0)
		return -EPERM;

	if (folder == NULL)
		folder = g_strdup(obex_option_root_folder());

	if (name == NULL)
		name = g_strdup(obex_get_name(os));

skip_auth:
	if (name == NULL || strlen(name) == 0) {
		err = -EBADR;
		goto failed;
	}

	if (g_strcmp0(name, obex_get_name(os)) != 0)
		obex_set_name(os, name);

	path = g_build_filename(folder, name, NULL);

	err = obex_put_stream_start(os, path);

	g_free(path);

	if (err < 0)
		goto failed;

	manager_emit_transfer_started(user_data);

failed:
	g_free(folder);
	g_free(name);

	return err;
}
Exemplo n.º 2
0
/*
 * Recursive function that moves through the directory inodes to find the
 * inumber of the desired file.
 */
int path_to_inode_number(struct unixfilesystem *fs, const char *pathname, int dir)
{
  if(pathname[0] == 0) return 1;
  else if  (is_filename(pathname)) 
  {
return name_to_inode_number(fs, pathname, dir);
  }
  else
  {
	char directoryName[MAX_NAME];
	const char* newPath = get_directory_name(pathname, directoryName);
	dir = name_to_inode_number (fs, directoryName, dir);

	return path_to_inode_number(fs, newPath, dir);
  }
}