From: Erik Faye-Lund Date: Tue, 23 Nov 2010 18:00:28 GMT Subject: Re: [RFC PATCH 1/6] msvc: opendir: use xmalloc Message-ID: In-Reply-To: On Tue, Nov 23, 2010 at 6:45 PM, Erik Faye-Lund wrote: > On Tue, Nov 23, 2010 at 6:40 PM, Jonathan Nieder wrote: >> Erik Faye-Lund wrote: >> >>> --- a/compat/msvc.c >>> +++ b/compat/msvc.c >>> @@ -7,16 +7,13 @@ DIR *opendir(const char *name) >>>  { >>>       int len; >>>       DIR *p; >>> -     p = (DIR*)malloc(sizeof(DIR)); >>> +     p = xmalloc(sizeof(DIR)); >>>       memset(p, 0, sizeof(DIR)); >>>       strncpy(p->dd_name, name, PATH_MAX); >>>       len = strlen(p->dd_name); >>>       p->dd_name[len] = '/'; >>>       p->dd_name[len+1] = '*'; >>> >>> -     if (p == NULL) >>> -             return NULL; >> >> A behavior change but maybe a good one.  For example, the >> prune_packed_objects() loop currently skips object dirs it can't open, >> even if that is due to memory exhaustion, but this changes it to error >> out. >> >> What is the motivation? >> > > The motivation is just to avoid having to deal with the error, like we > do other places. It's not a big deal though. I could also set errno to > ENOMEM and return NULL if that's preferable. I just don't see how it > is. > > I also slightly dislike setting an error not listed in POSIX' > documentation of opendir, even though it's probably allowed. > Of course, I don't have to set errno; malloc would already have done that. All I need to do is move the check for NULL a bit earlier, so it won't segfault on ENOMEM. I'll change it for the next round.