~ubuntu-branches/ubuntu/vivid/parted/vivid

« back to all changes in this revision

Viewing changes to libparted/labels/loop.c

  • Committer: Package Import Robot
  • Author(s): Colin Watson
  • Date: 2014-07-30 13:16:15 UTC
  • mfrom: (7.2.34 sid)
  • Revision ID: package-import@ubuntu.com-20140730131615-6uy87mosal6722s6
Tags: 3.2-1
* New upstream release.
* Drop currently-unused build-dependency on po4a (thanks, Johannes
  Schauer).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
    libparted - a library for manipulating disk partitions
3
 
    Copyright (C) 1999-2000, 2007-2012 Free Software Foundation, Inc.
 
3
    Copyright (C) 1999-2000, 2007-2014 Free Software Foundation, Inc.
4
4
 
5
5
    This program is free software; you can redistribute it and/or modify
6
6
    it under the terms of the GNU General Public License as published by
81
81
        if (dev->length < 256)
82
82
                return NULL;
83
83
        PedDisk *disk = _ped_disk_alloc ((PedDevice*)dev, &loop_disk_type);
84
 
        if (disk)
85
 
                disk->disk_specific = (void *)0;
 
84
        PED_ASSERT (disk != NULL);
 
85
        PedGeometry *geom = ped_geometry_new (dev, 0, dev->length);
 
86
        PED_ASSERT (geom != NULL);
 
87
        PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL,
 
88
                                                NULL, geom->start, geom->end);
 
89
        PED_ASSERT (part != NULL);
 
90
        ped_geometry_destroy (geom);
 
91
        PedConstraint *constraint_any = ped_constraint_any (dev);
 
92
        if (!ped_disk_add_partition (disk, part, constraint_any))
 
93
                goto error;
 
94
        ped_constraint_destroy (constraint_any);
86
95
        return disk;
 
96
 error:
 
97
        ped_constraint_destroy (constraint_any);
 
98
        ped_disk_destroy (disk);
 
99
        return NULL;
87
100
}
88
101
 
89
102
static PedDisk*
134
147
        ped_geometry_destroy (geom);
135
148
        if (!part)
136
149
                goto error;
137
 
        part->fs_type = fs_type;
138
150
 
139
151
        if (!ped_disk_add_partition (disk, part, constraint_any))
140
152
                goto error;
141
153
        ped_constraint_destroy (constraint_any);
142
 
        dev->loop = 1;
143
 
        disk->disk_specific = (void *)1; /* don't rewrite label */
144
154
        return 1;
145
155
 
146
156
error_free_geom:
156
166
{
157
167
        size_t buflen = disk->dev->sector_size;
158
168
        char *buf = alloca (buflen);
159
 
        disk->dev->loop = 1;
160
 
        /* only write label after creating it new */
161
 
        if (disk->disk_specific)
 
169
        PedPartition *part = ped_disk_get_partition (disk, 1);
 
170
        /* if there is already a filesystem on the disk, we don't need to write the signature */
 
171
        if (part && part->fs_type)
162
172
                return 1;
163
 
 
164
 
        memset (buf, 0, buflen);
 
173
        if (!ped_device_read (disk->dev, buf, 0, 1))
 
174
                return 0;
165
175
        strcpy (buf, LOOP_SIGNATURE);
166
 
        if (!ped_device_write (disk->dev, buf, 0, 1))
167
 
                return 0;
168
 
        return 1;
 
176
 
 
177
        return ped_device_write (disk->dev, buf, 0, 1);
169
178
}
170
179
#endif /* !DISCOVER_ONLY */
171
180