On 05/12/2013 02:08 PM, Ivana Varekova wrote:
> Seems ok for me, Jan could you look at it pleas?
> Ivana
> 
> ----- Original Message -----
>> From: "Peter Schiffer" <pschi...@redhat.com>
>> To: libcg-devel@lists.sourceforge.net
>> Sent: Monday, February 11, 2013 6:09:02 PM
>> Subject: [Libcg-devel] [PATCH] Make cg_mkdir_p() function compatible with    
>> read-only fs
>>
>> mkdir(2) function returns EROFS error even when the path already exists on
>> the
>> read only file system, so it is impossible to determine whether the path
>> already
>> exists on this kind of fs only be return code from the mkdir(2). To make
>> cg_mkdir_p() compatible with the ro fs, the function checks whether the path
>> exists with stat(2) before trying to create it.
>>
>> Signed-off-by: Peter Schiffer <pschi...@redhat.com>
>> ---
>>  0 files changed
>>
>> diff --git a/src/api.c b/src/api.c
>> index 11cd1b4..4acdc30 100644
>> --- a/src/api.c
>> +++ b/src/api.c
>> @@ -1271,6 +1271,7 @@ int cg_mkdir_p(const char *path)
>>      int i = 0;
>>      char pos;
>>      int ret = 0;
>> +    struct stat st;
>>  
>>      real_path = strdup(path);
>>      if (!real_path) {
>> @@ -1287,6 +1288,10 @@ int cg_mkdir_p(const char *path)
>>                      i++;
>>              pos = real_path[i];
>>              real_path[i] = '\0';            /* Temporarily overwrite "/" */
>> +            if (stat(real_path, &st) == 0) {                /* Continue if 
>> dir exists */
>> +                    real_path[i] = pos;
>> +                    continue;
>> +            }

I think this code is racy. There can be a change between stat() and
mkdir(). Shouldn't mkdir() return EEXIST is the directory already
exists? Please check/test it. If it still returns EROFS in this case,
then I ack this patch, there is no other way how to do it.

>>              ret = mkdir(real_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
>>              real_path[i] = pos;
>>              if (ret) {


------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to