<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><span style="font-family:arial,sans-serif">On Sat, Apr 9, 2016 at 6:12 AM, Eric Sandeen </span><span dir="ltr" style="font-family:arial,sans-serif"><<a href="mailto:sandeen@sandeen.net" target="_blank">sandeen@sandeen.net</a>></span><span style="font-family:arial,sans-serif"> wrote:</span><br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><br>
<br>
On 4/8/16 9:58 AM, Jan Tulak wrote:<br>
</span><span class="">>     This one causes at least one interesting issue:<br>
><br>
>     #mkfs/mkfs.xfs<br>
>     Error accessing specified device (null): Bad address<br>
>     Usage: mkfs.xfs<br>
>     ...<br>
><br>
>     because:<br>
><br>
>             check_device_type(dfile, &xi.disfile, !dsize, !dfile,<br>
>                               Nflag ? NULL : &xi.dcreat, force_overwrite, "d");<br>
><br>
>     so "dfile" can be NULL, but that function immediately tries to stat it.<br>
><br>
><br>
> ​A simple if NULL, then usage() should take care of this...<br>
<br>
</span>Well, think hard about that.  If dfile == NULL and bails with usage(), then<br>
what is the point of having !dfile as a function argument?<br>
<br>
Validation of having a target specified as either -dfile= or as the last argument<br>
should probably happen before the call to check_device_type.<br>
<span class=""><font color="#888888"><br></font></span></blockquote><div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">But what about this?</div></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><br></div></div><div><div class="gmail_default" style="display:inline"><font face="arial, helvetica, sans-serif"><div style="">case D_NAME:</div><div style="">      xi.dname = getstr(value, &dopts, D_     NAME);</div><div style=""><br></div></font></div></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">[...]</div></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><br></div></div><div><div class="gmail_default" style="display:inline"><font face="arial, helvetica, sans-serif">if (argc - optind > 1) {</font><br></div></div><div><div class="gmail_default" style="display:inline"><font face="arial, helvetica, sans-serif">      [print error]</font></div></div><div><font face="arial, helvetica, sans-serif">} else if (argc - optind == 1) {</font></div><div><font face="arial, helvetica, sans-serif">       dfile = xi.volname = getstr(argv[optind], &dopts, D_NAME);</font></div><div><font face="arial, helvetica, sans-serif">} else</font></div><div><div class="gmail_default" style="display:inline"><font face="arial, helvetica, sans-serif">       dfile = xi.dname;​</font></div> </div><div>}</div><div><br></div></div><div class="gmail_extra">[<div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">​... until the first occurence of dfile]</div></div><div class="gmail_extra"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><br></div></div><div class="gmail_extra"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><span style="font-family:arial,sans-serif">check_device_type(dfile, &xi.disfile, !dsize, !dfile,</span><br style="font-family:arial,sans-serif"><span style="font-family:arial,sans-serif">         Nflag ? NULL : &xi.dcreat, force_overwrite, "d");</span><br></div></div><div class="gmail_extra"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">​</div></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​so if there is -d name= and nothing at the end, then dfile contains D_NAME value. If there is a path at the end, then, then no matter about -d name, we have dfile filled with something. So I can't find a way how to have dfile == NULL without omitting both a path as the last argument, and -dname...</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">The no_name (!dfile) argument is in check_device_type() for a single reason - raising error on</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">if (*isfile && (no_size || no_name))</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">But !string is true only when string==NULL. For an empty string: !"" is 0. So I don't see the reason for no_name argument at all - it seems to confuse, and in current use can be replaced with test to NULL, or !name.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">DTTO for xi.logname/xi.rtname.</div><br clear="all"><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​Cheers,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Jan​</div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Jan Tulak<br></div><a href="mailto:jtulak@redhat.com" target="_blank">jtulak@redhat.com</a> / <a href="mailto:jan@tulak.me" target="_blank">jan@tulak.me</a></div></div></div></div>
</div></div>