コード例 #1
0
ファイル: str.c プロジェクト: Nakor78/proftpd
int pr_str2gid(const char *val, gid_t *gid) {
#ifdef HAVE_STRTOULL
  unsigned long long ull = 0ULL;
#endif /* HAVE_STRTOULL */
  unsigned long ul = 0UL;

  if (val == NULL ||
      gid == NULL) {
    errno = EINVAL;
    return -1;
  }

#if SIZEOF_GID_T == SIZEOF_LONG_LONG
# ifdef HAVE_STRTOULL
  if (parse_ull(val, &ull) < 0) {
    return -1;
  }
  *gid = ull; 

# else
  if (parse_ul(val, &ul) < 0) {
    return -1;
  }
  *gid = ul;
# endif /* HAVE_STRTOULL */
#else
  (void) ull;
  if (parse_ul(val, &ul) < 0) {
    return -1;
  }
  *gid = ul;
#endif /* sizeof(gid_t) != sizeof(long long) */

  return 0;
}
コード例 #2
0
ファイル: content.c プロジェクト: AlexSteel/wine
static ContentItem *parse_hhc(HHInfo *info, IStream *str, ContentItem *hhc_root,
        insert_type_t *insert_type)
{
    stream_t stream;
    strbuf_t node, node_name;
    ContentItem *ret = NULL, *prev = NULL;

    *insert_type = INSERT_NEXT;

    strbuf_init(&node);
    strbuf_init(&node_name);

    stream_init(&stream, str);

    while(next_node(&stream, &node)) {
        get_node_name(&node, &node_name);

        TRACE("%s\n", node.buf);

        if(!strcasecmp(node_name.buf, "ul")) {
            ContentItem *item = parse_ul(info, &stream, hhc_root);
            prev = insert_item(prev, item, INSERT_CHILD);
            if(!ret)
                ret = prev;
            *insert_type = INSERT_CHILD;
        }

        strbuf_zero(&node);
    }

    strbuf_free(&node);
    strbuf_free(&node_name);

    return ret;
}
コード例 #3
0
ファイル: dbdctl.c プロジェクト: datto/dattobd
static int handle_reconfigure(int argc, char **argv){
	int ret, c;
	unsigned int minor;
	unsigned long cache_size = 0;

	//get cache size and fallocated space params, if given
	while((c = getopt(argc, argv, "c:")) != -1){
		switch(c){
		case 'c':
			ret = parse_ul(optarg, &cache_size);
			if(ret) goto handle_reconfigure_error;
			break;
		default:
			errno = EINVAL;
			goto handle_reconfigure_error;
		}
	}

	if(argc - optind != 1){
		errno = EINVAL;
		goto handle_reconfigure_error;
	}

	ret = parse_ui(argv[optind], &minor);
	if(ret) goto handle_reconfigure_error;

	return reconfigure(minor, cache_size);

handle_reconfigure_error:
	perror("error interpreting reconfigure parameters");
	print_help(-1);
	return 0;
}
コード例 #4
0
ファイル: dbdctl.c プロジェクト: datto/dattobd
static int handle_setup_snap(int argc, char **argv){
	int ret, c;
	unsigned int minor;
	unsigned long cache_size = 0, fallocated_space = 0;
	char *bdev, *cow;

	//get cache size and fallocated space params, if given
	while((c = getopt(argc, argv, "c:f:")) != -1){
		switch(c){
		case 'c':
			ret = parse_ul(optarg, &cache_size);
			if(ret) goto handle_setup_snap_error;
			break;
		case 'f':
			ret = parse_ul(optarg, &fallocated_space);
			if(ret) goto handle_setup_snap_error;
			break;
		default:
			errno = EINVAL;
			goto handle_setup_snap_error;
		}
	}

	if(argc - optind != 3){
		errno = EINVAL;
		goto handle_setup_snap_error;
	}

	bdev = argv[optind];
	cow = argv[optind + 1];

	ret = parse_ui(argv[optind + 2], &minor);
	if(ret) goto handle_setup_snap_error;

	return setup_snapshot(minor, bdev, cow, fallocated_space, cache_size);

handle_setup_snap_error:
	perror("error interpreting setup snapshot parameters");
	print_help(-1);
	return 0;
}
コード例 #5
0
ファイル: content.c プロジェクト: AlexSteel/wine
static ContentItem *parse_ul(HHInfo *info, stream_t *stream, ContentItem *hhc_root)
{
    strbuf_t node, node_name;
    ContentItem *ret = NULL, *prev = NULL, *new_item = NULL;
    insert_type_t it;

    strbuf_init(&node);
    strbuf_init(&node_name);

    while(next_node(stream, &node)) {
        get_node_name(&node, &node_name);

        TRACE("%s\n", node.buf);

        if(!strcasecmp(node_name.buf, "object")) {
            const char *ptr;
            int len;

            static const char sz_text_sitemap[] = "text/sitemap";

            ptr = get_attr(node.buf, "type", &len);

            if(ptr && len == sizeof(sz_text_sitemap)-1
               && !memcmp(ptr, sz_text_sitemap, len)) {
                new_item = parse_sitemap_object(info, stream, hhc_root, &it);
                prev = insert_item(prev, new_item, it);
                if(!ret)
                    ret = prev;
            }
        }else if(!strcasecmp(node_name.buf, "ul")) {
            new_item = parse_ul(info, stream, hhc_root);
            insert_item(prev, new_item, INSERT_CHILD);
        }else if(!strcasecmp(node_name.buf, "/ul")) {
            break;
        }

        strbuf_zero(&node);
    }

    strbuf_free(&node);
    strbuf_free(&node_name);

    return ret;
}
コード例 #6
0
ファイル: dbdctl.c プロジェクト: datto/dattobd
static int handle_transition_snap(int argc, char **argv){
	int ret, c;
	unsigned int minor;
	unsigned long fallocated_space = 0;
	char *cow;

	//get cache size and fallocated space params, if given
	while((c = getopt(argc, argv, "f:")) != -1){
		switch(c){
		case 'f':
			ret = parse_ul(optarg, &fallocated_space);
			if(ret) goto handle_transition_snap_error;
			break;
		default:
			errno = EINVAL;
			goto handle_transition_snap_error;
		}
	}

	if(argc - optind != 2){
		errno = EINVAL;
		goto handle_transition_snap_error;
	}

	cow = argv[optind];

	ret = parse_ui(argv[optind + 1], &minor);
	if(ret) goto handle_transition_snap_error;

	return transition_snapshot(minor, cow, fallocated_space);

handle_transition_snap_error:
	perror("error interpreting transition to snapshot parameters");
	print_help(-1);
	return 0;
}
コード例 #7
0
ファイル: khtmlreader.cpp プロジェクト: KDE/koffice
bool KHTMLReader::parse_ol(DOM::Element e)
{
    return parse_ul(e);
}
コード例 #8
0
ファイル: xml.c プロジェクト: kolyshkin/ploop
static int parse_xml(const char *basedir, xmlNode *root_node, struct ploop_disk_images_data *di)
{
	xmlNode *cur_node, *node;
	char image[PATH_MAX];
	const char *data = NULL;
	const char *file = NULL;
	const char *guid = NULL;
	const char *parent_guid = NULL;
	__u64 val;
	int is_preallocated = 0;
	int mode = PLOOP_EXPANDED_MODE;
	int n;

	cur_node = seek(root_node, "/Disk_Parameters");
	ERR(cur_node, "/Disk_Parameters");

	node = seek(cur_node, "Disk_size");
	if (node != NULL) {
		data = get_element_txt(node);
		if (parse_ul(data, &val) == 0)
			di->size = val;
	}

	node = seek(cur_node, "Max_delta_size");
	if (node != NULL) {
		data = get_element_txt(node);
		if (parse_ul(data, &val) == 0)
			di->max_delta_size = val;
	}

	node = seek(cur_node, "Cylinders");
	if (node != NULL) {
		data = get_element_txt(node);
		if (parse_ul(data, &val) == 0)
			di->cylinders = (unsigned)val;
	}

	node = seek(cur_node, "Heads");
	if (node != NULL) {
		data = get_element_txt(node);
		if (parse_ul(data, &val) == 0)
			di->heads = (unsigned)val;
	}
	node = seek(cur_node, "Sectors");
	if (node != NULL) {
		data = get_element_txt(node);
		if (parse_ul(data, &val) == 0)
			di->sectors= (unsigned)val;
	}
	cur_node = seek(root_node, "/StorageData/Storage");
	ERR(cur_node, "/StorageData/Storage");
	for (n = 0; cur_node; cur_node = cur_node->next, n++) {
		if (cur_node->type != XML_ELEMENT_NODE)
			continue;

		if (n > 0) {
			ploop_err(0, "Invalid disk descriptor file format:"
				" splitted disk is not supported");
			return -1;
		}

		node = seek(cur_node, "Blocksize");
		if (node != NULL) {
			data = get_element_txt(node);
			if (parse_ul(data, &val)) {
				ploop_err(0, "Invalid disk descriptor file format:"
						" Invalid Blocksize %s", data);
				return -1;
			}
			di->blocksize = (unsigned)val;
		}
		node = seek(cur_node, "Preallocated");
		if (node != NULL) {
			data = get_element_txt(node);
			if (parse_ul(data, &val) != 0 || val > 1) {
				ploop_err(0, "Invalid disk descriptor file format:"
						" Invalid Preallocated tag");
				return -1;
			}
			is_preallocated = val;
		}
	}

	cur_node = seek(root_node, "/StorageData/Storage/Image");
	ERR(cur_node, "/StorageData/Storage/Image");
	for (; cur_node; cur_node = cur_node->next) {
		if (cur_node->type != XML_ELEMENT_NODE)
			continue;
		guid = NULL;
		node = seek(cur_node, "GUID");
		if (node != NULL) {
			guid = get_element_txt(node);
			if (guid == NULL)
				guid = "";
		}
		ERR(guid, "GUID");
		node = seek(cur_node, "Type");
		if (node != NULL) {
			data = get_element_txt(node);
			if (data != NULL && !strcmp(data, "Plain"))
				mode = PLOOP_RAW_MODE;
		}
		file = NULL;
		node = seek(cur_node, "File");
		if (node != NULL) {
			file = get_element_txt(node);
			if (file != NULL) {
				if (basedir[0] != 0 && file[0] != '/')
					snprintf(image, sizeof(image), "%s%s", basedir, file);
				else
					snprintf(image, sizeof(image), "%s", file);
			}
		}
		ERR(file, "File");

		if (ploop_add_image_entry(di, image, guid))
			return -1;
	}

	if (is_preallocated) {
		if (mode == PLOOP_RAW_MODE) {
			ploop_err(0, "Invalid disk descriptor file format:"
				" Preallocated is not compatible with Plain image");
			return -1;
		}
		di->mode = PLOOP_EXPANDED_PREALLOCATED_MODE;
	} else {
		di->mode = mode;
	}

	cur_node = seek(root_node, "/Snapshots");
	ERR(cur_node, "/Snapshots");

	node = seek(cur_node, "TopGUID");
	if (node != NULL) {
		data = get_element_txt(node);
		ERR(data, "TopGUID");
		di->top_guid = strdup(data);
	}

	cur_node = seek(root_node, "/Snapshots/Shot");
	if (cur_node != NULL) {
		for (; cur_node; cur_node = cur_node->next) {
			int temporary = 0;

			if (cur_node->type != XML_ELEMENT_NODE)
				continue;

			guid = NULL;
			node = seek(cur_node, "GUID");
			if (node != NULL)
				guid = get_element_txt(node);
			ERR(guid, "Snapshots GUID");

			parent_guid = NULL;
			node = seek(cur_node, "ParentGUID");
			if (node != NULL)
				parent_guid = get_element_txt(node);

			ERR(parent_guid, "ParentGUID");

			node = seek(cur_node, "Temporary");
			if (node != NULL)
				temporary = 1;

			if (ploop_add_snapshot_entry(di, guid, parent_guid, temporary))
				return -1;
		}
	}
	return 0;
}