source: mainline/uspace/lib/label/src/label.c@ 78d50bd

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 78d50bd was 78d50bd, checked in by Jiri Svoboda <jiri@…>, 10 years ago

Implement partition block device interface in VBD based on data from liblabel.

  • Property mode set to 100644
File size: 3.3 KB
Line 
1/*
2 * Copyright (c) 2015 Jiri Svoboda
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup liblabel
30 * @{
31 */
32/**
33 * @file Disk label library.
34 */
35
36#include <adt/list.h>
37#include <errno.h>
38#include <label.h>
39#include <mem.h>
40#include <stdlib.h>
41
42int label_open(service_id_t sid, label_t **rlabel)
43{
44 label_t *label;
45
46 label = calloc(1, sizeof(label_t));
47 if (label == NULL)
48 return ENOMEM;
49
50 list_initialize(&label->parts);
51 *rlabel = label;
52 return EOK;
53}
54
55int label_create(service_id_t sid, label_type_t ltype, label_t **rlabel)
56{
57 label_t *label;
58
59 label = calloc(1, sizeof(label_t));
60 if (label == NULL)
61 return ENOMEM;
62
63 list_initialize(&label->parts);
64 *rlabel = label;
65 return EOK;
66}
67
68void label_close(label_t *label)
69{
70 if (label == NULL)
71 return;
72
73 free(label);
74}
75
76int label_destroy(label_t *label)
77{
78 free(label);
79 return EOK;
80}
81
82int label_get_info(label_t *label, label_info_t *linfo)
83{
84 memset(linfo, 0, sizeof(label_info_t));
85 linfo->dcnt = dc_empty;
86 return EOK;
87}
88
89label_part_t *label_part_first(label_t *label)
90{
91 link_t *link;
92
93 link = list_first(&label->parts);
94 if (link == NULL)
95 return NULL;
96
97 return list_get_instance(link, label_part_t, llabel);
98}
99
100label_part_t *label_part_next(label_part_t *part)
101{
102 link_t *link;
103
104 link = list_next(&part->llabel, &part->label->parts);
105 if (link == NULL)
106 return NULL;
107
108 return list_get_instance(link, label_part_t, llabel);
109}
110
111void label_part_get_info(label_part_t *part, label_part_info_t *pinfo)
112{
113 pinfo->block0 = 0;
114 pinfo->nblocks = 0;
115}
116
117int label_part_create(label_t *label, label_part_spec_t *pspec,
118 label_part_t **rpart)
119{
120 label_part_t *part;
121
122 part = calloc(1, sizeof(label_part_t));
123 if (part == NULL)
124 return ENOMEM;
125
126 part->label = label;
127 list_append(&part->llabel, &label->parts);
128 *rpart = part;
129 return EOK;
130}
131
132int label_part_destroy(label_part_t *part)
133{
134 list_remove(&part->llabel);
135 free(part);
136 return EOK;
137}
138
139void label_pspec_init(label_part_spec_t *pspec)
140{
141 memset(pspec, 0, sizeof(label_part_spec_t));
142}
143
144/** @}
145 */
Note: See TracBrowser for help on using the repository browser.