On Mon, Jun 19, 2006 at 11:54:12AM +0200, oopla wrote:
> > faxinfo-format-4.patch
> 
> > old format                      new format
> > -------------------             -----------------
> > -s '%.0s'                       -s ''
> > -e '%1$s'                       -e '%s'
> > 
> > Can anyone think of any flexibility *lost* by splitting them up?  The
> > simplicity gained seems worth it.
> 
> Let me re-check & re-think a bit on that.

1. docs need to point out that opts order is important:

 $ ./faxinfo  -n -C , /home/oopla/fax07138.tif
 "/home/oopla/fax07138.tif","+49 1234 5678","1","Normal","North American 
Letter","2002:07:09 15:29:39","1:06","9600 bit/s","1-D MH","No"

 $ ./faxinfo -C , -n /home/oopla/fax07138.tif
 /home/oopla/fax07138.tif:
 ,"+49 1234 5678","1","Normal","North American Letter","2002:07:09 
15:29:39","1:06","9600 bit/s","1-D MH","No"

 the latter looks weird, kinda broken CSV. Also -r -n is different than -n -r.
 While that's not foolproof, I like the added flexibility, though at present
 one would need to really look into the code or go screaming away ;)

 Finally - but that's rather a wishlist for hfaxd, perhaps worth it's own 
 bug# - I'd rather have hylafax embed into the .tif the following infos 
 along with 'Sender',... and perhaps faxinfo() may optionally print them 
 with an opt -l(ocal infos):
 
 - [EMAIL PROTECTED] fax was received on
 - either FAXNumber or LocalIdentifier
 - either basename(filename) or just the serial#

 eg.:
 $ ./faxinfo -l /home/oopla/fax07138.tif
 
    Sender: +49 1234 5678
     Pages: 1
   Quality: Normal
      Page: North American Letter
  Received: 2002:07:09 15:29:39
TimeToRecv: 1:06
SignalRate: 9600 bit/s
DataFormat: 1-D MH
ErrCorrect: No
   Faxname: fax07138.tif
 FAXNumber: +39.0000.111111
[EMAIL PROTECTED]: [EMAIL PROTECTED]

 reason is that those infos are (part of) the local side story of the fax 
 that would be lost if file is renamed and archived without 
 embedding/storing such infos into eg. archive pathname or somesuch.


2. surely -SseE empowers the user, so user take responsibility to not shoot
 on his own foot, still it sounds bad to me to allow for something like:

 $ ./faxinfo -S '%s%s'  -E '\n' /home/oopla/fax07138.tif 
 Segmentation fault

 fully sanitizing a printf() fmt string might not be trivial, though, so
 I'd still buy the flexibility/power and let the foolproofness in the 
 todos :) - pls see at end my current tentative/sub-optimal 
 escapedString() which should catch just the simple %n case.


3. the new format sounds ok to me - at least I still can do what I meant, and 
 more, e.g. here's (core part of) a quick .cgi :

 $ ./faxinfo -S'<tr><h><a href="%s">%1$s</a></th>' -s'<td>' -e'</td>' 
-E'</tr>\n' /home/oopla/fax07138.tif

 <tr><th><a 
href="/home/oopla/fax07138.tif">/home/oopla/fax07138.tif</a></th><td>+49 1234 
5678</td><td>1</td><td>Normal</td><td>North American Letter</td><td>2002:07:09 
15:29:39</td><td>1:06</td><td>9600 bit/s</td><td>1-D MH</td><td>No</td></tr>

 That's with current implementation. 
 Now, if we had e.g. -b meaning 'use basename(filename)', sample use above 
 would allow to have 

 $ ./faxinfo -b ... : 
 <tr><th><a href="/some/other/path/fax07138.tif">fax07138.tif</a>...

 without 1st do a cd into each faxdir.



-- paolo

...
escapedString (const char*src)
{
    char* res;
    int len;
    len = strlen(src);
    res = (char*)calloc(len+1, sizeof(char));
    if (res)
    {
        char* dst = res;
        for (int i = 0; i < len; i++)
        {
          if (i < len-1) 
          {
            switch (src[i])
            {
              case '\':
                switch (src[++i])
                {
                    case 'n':   *dst++ = '\n';  break;
                    case 'r':   *dst++ = '\r';  break;
                    case 't':   *dst++ = '\t';  break;
                    default:
                        *dst++ = src[i];
                }
                break;
              case '%':
                *dst++ = src[i];
                switch (src[++i])
                {
                    // don't ever want %n, let's squash it to %%
                    case 'n':   *dst++ = '%';   break;
                    default:
                        *dst++ = src[i];
                }
                break;
              default:
                *dst++ = src[i];
            }
          } else
          {
            *dst++ = src[i];
          }
        }
    } else
      exit (ENOMEM);
    return res;
}
...



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to