Incoherent handling of '\n' in Octave 2.9.9 wrt. Octave 2.1.73

David Bateman David.Bateman at motorola.com
Fri Apr 18 10:49:58 CDT 2008


Paolo Giarrusso wrote:
> (Semi-automatic) Bug report for Octave 2.9.9 configured for x86_64-pc-linux-gnu
>
> Description:
> -----------
> The attached code snippet gives different result when executed with
> Octave 2.1.73 and Octave 2.9.9, as provided by Ubuntu 7.04 (and I
> consider the results of 2.9.9 to be buggy). The results of each
> command in Octave2.9 are given in comments.
>
> In particular, what puzzles me is that disp('\n') (note single quotes)
> prints literally the blackslash and the `n', while disp("\n") and
> fprintf (of either '\n' or "\n") give the expected result.
> Typing the string at the prompt behaves like disp:
>
> octave2.9:3> '\n'
> ans = \n
> octave2.9:4> "\n"
> ans =
>
> octave2.9:5>
>
> But fprintf() gives the same results with both single and double
> quotes; however, it sure does not handle \n itself, because it would
> then handle:
>
> octave2.9:5> str=disp('\n')
> str = \n
>
> octave2.9:6> fprintf(str)
> \n
> octave2.9:7>
> But fprintf doesn't handle \n here, as you can see.
>
> Any hint?
> Thanks in advance
>   
Note that in the 2.9.x tree the handling of single and double quotes was
changed for compatibility with Matlab and to allow the Windows directory
separator '\', which is also the posix string escape character to be
treated correctly. That is consider a windows directory name like
"c:\new directory". In 2.1.x the "\n" is this string is treated as an
escaped newline character as so something like

dir = 'c:\new directory';
cd (dir)

will fail on 2.1.x. In 2.9.x the double quoted strings are escaped as
previously, whereas the single quoted ones aren't. Matlab only has
single quoted strings and in this manner the single quoted behavior of
both Octave and matlab is the same.. If you want to continue to get the
escaped characters as previously, use double quotes instead.

D.




> what follows is from the mail created by bug_report, in case it can be useful.
>
> Configuration (please do not edit this section):
> -----------------------------------------------
>
> uname output:     Linux americanbeauty.home.lan 2.6.23.14+swsusp2-evms
> #3 SMP PREEMPT Fri Jan 25 01:25:35 CET 2008 x86_64 GNU/Linux
> configure opts:   '--prefix=/usr' '--datadir=/usr/share'
> '--libdir=/usr/lib' '--libexecdir=/usr/lib'
> '--infodir=/usr/share/info' '--mandir=/usr/share/man'
> '--with-blas=-lblas-3' '--with-lapack=-llapack-3' '--with-hdf5'
> '--with-fftw' '--with-f77=/usr/bin/gfortran' '--enable-shared'
> '--enable-rpath' '--disable-static' '--build' 'x86_64-linux-gnu'
> 'build_alias=x86_64-linux-gnu' 'CC=/usr/bin/gcc' 'CXX=/usr/bin/g++'
> 'F77=/usr/bin/gfortran'
> Fortran compiler: /usr/bin/gfortran
> FFLAGS:           -O2
> F2C:
> F2CFLAGS:
> FLIBS:            -L/usr/lib/gcc/x86_64-linux-gnu/4.1.2
> -L/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../lib64
> -L/lib/../lib64 -L/usr/lib/../lib64 -lhdf5 -lz -lgfortranbegin
> -lgfortran -lm
> CPPFLAGS:
> INCFLAGS:         -I. -I. -I./liboctave -I./src -I./libcruft/misc
> C compiler:       /usr/bin/gcc, version 4.1.2 20061103 (prerelease)
> (Ubuntu 4.1.1-18ubuntu2)
> CFLAGS:           -O2
> CPICFLAG:         -fPIC
> C++ compiler:     /usr/bin/g++, version 4.1.2
> CXXFLAGS:         -O2
> CXXPICFLAG:       -fPIC
> LD_CXX:           /usr/bin/g++
> LDFLAGS:          -s
> LIBFLAGS:         -L.
> RLD_FLAG:         -Wl,-rpath -Wl,/usr/lib/octave-2.9.9
> BLAS_LIBS:        -llapack-3 -lblas-3
> FFTW_LIBS:        -lfftw3
> LIBS:             -lreadline  -lncurses -ldl -lhdf5 -lz -lm
> LEXLIB:
> LIBDLFCN:
> LIBGLOB:
> SED:              /bin/sed
> DEFS:
>
>   -DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION=""
>   -DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DOCTAVE_SOURCE=1
>   -D_GNU_SOURCE=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1
>   -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1
>   -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSEPCHAR=':'
>   -DSEPCHAR_STR=":" -D__NO_MATH_INLINES=1 -DCXX_NEW_FRIEND_TEMPLATE_DECL=1
>   -DCXX_ISO_COMPLIANT_LIBRARY=1 -DCXX_ABI=gnu_v3 -DHAVE_LIBM=1
>   -DHAVE_PCRE=1 -DHAVE_REGEXEC=1 -DHAVE_REGEX=1 -DHAVE_ZLIB_H=1
>   -DHAVE_ZLIB=1 -DHAVE_HDF5_H=1 -DHAVE_HDF5=1 -DHAVE_H5GGET_NUM_OBJS=1
>   -DHAVE_FFTW3=1 -DHAVE_GLPK_H=1 -DHAVE_GLPK=1 -DHAVE_IEEE754_DATA_FORMAT=1
>   -DF77_FUNC(name,NAME)=name ## _ -DF77_FUNC_(name,NAME)=name ##
>   _ -DHAVE_BLAS=1 -DHAVE_UFSPARSE_UMFPACK_H=1 -DHAVE_UMFPACK=1
>   -DUMFPACK_SEPARATE_SPLIT=1 -DHAVE_UFSPARSE_COLAMD_H=1
>   -DHAVE_COLAMD=1 -DHAVE_UFSPARSE_CCOLAMD_H=1 -DHAVE_CCOLAMD=1
>   -DHAVE_UFSPARSE_CHOLMOD_H=1 -DHAVE_CHOLMOD=1 -DHAVE_UFSPARSE_CS_H=1
>   -DHAVE_CXSPARSE=1 -DHAVE_GETHOSTNAME=1 -DHAVE_GETPWNAM=1 -DHAVE_DEV_T=1
>   -DHAVE_INO_T=1 -DHAVE_NLINK_T=1 -DHAVE_NLINK_T=1 -DHAVE_LONG_LONG_INT=1
>   -DHAVE_UNSIGNED_LONG_LONG_INT=1 -DHAVE_SIGSET_T=1 -DHAVE_SIG_ATOMIC_T=1
>   -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=8 -DSIZEOF_LONG_LONG=8
>   -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DNPOS=std::string::npos
>   -DHAVE_PLACEMENT_DELETE=1 -DHAVE_DYNAMIC_AUTO_ARRAYS=1
>   -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1 -DTIME_WITH_SYS_TIME=1
>   -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1 -DHAVE_CURSES_H=1 -DHAVE_DLFCN_H=1
>   -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 -DHAVE_GRP_H=1 -DHAVE_INTTYPES_H=1
>   -DHAVE_LIMITS_H=1 -DHAVE_LOCALE_H=1 -DHAVE_MEMORY_H=1 -DHAVE_NCURSES_H=1
>   -DHAVE_POLL_H=1 -DHAVE_PWD_H=1 -DHAVE_STDINT_H=1 -DHAVE_STDLIB_H=1
>   -DHAVE_STRING_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_PARAM_H=1
>   -DHAVE_SYS_POLL_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_SELECT_H=1
>   -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1
>   -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTSNAME_H=1 -DHAVE_TERMCAP_H=1
>   -DHAVE_UNISTD_H=1 -DHAVE_SSTREAM=1 -DHAVE_TERMIO_H=1 -DHAVE_SGTTY_H=1
>   -DHAVE_GLOB_H=1 -DHAVE_FNMATCH_H=1 -DHAVE_FNMATCH=1 -DHAVE_GLOB=1
>   -DHAVE_ATEXIT=1 -DHAVE_BASENAME=1 -DHAVE_BCOPY=1 -DHAVE_BZERO=1
>   -DHAVE_CANONICALIZE_FILE_NAME=1 -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1
>   -DHAVE_ENDPWENT=1 -DHAVE_EXECVP=1 -DHAVE_FCNTL=1 -DHAVE_FORK=1
>   -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1
>   -DHAVE_GETGRENT=1 -DHAVE_GETGRGID=1 -DHAVE_GETGRNAM=1 -DHAVE_GETPGRP=1
>   -DHAVE_GETPID=1 -DHAVE_GETPPID=1 -DHAVE_GETPWENT=1 -DHAVE_GETPWUID=1
>   -DHAVE_GETTIMEOFDAY=1 -DHAVE_GETUID=1 -DHAVE_GETWD=1 -DHAVE_KILL=1
>   -DHAVE_LINK=1 -DHAVE_LOCALTIME_R=1 -DHAVE_LSTAT=1 -DHAVE_MEMMOVE=1
>   -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_MKSTEMP=1 -DHAVE_ON_EXIT=1
>   -DHAVE_PIPE=1 -DHAVE_POLL=1 -DHAVE_PUTENV=1 -DHAVE_RAISE=1
>   -DHAVE_READLINK=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1 -DHAVE_RMDIR=1
>   -DHAVE_ROUND=1 -DHAVE_SELECT=1 -DHAVE_SETGRENT=1 -DHAVE_SETLOCALE=1
>   -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1 -DHAVE_SIGACTION=1 -DHAVE_SIGLONGJMP=1
>   -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1 -DHAVE_SIGSUSPEND=1 -DHAVE_STAT=1
>   -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRFTIME=1
>   -DHAVE_STRNCASECMP=1 -DHAVE_STRPTIME=1 -DHAVE_STRSIGNAL=1
>   -DHAVE_SYMLINK=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNAME=1
>   -DHAVE_UNLINK=1 -DHAVE_USLEEP=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1
>   -DHAVE_VSNPRINTF=1 -DHAVE_WAITPID=1 -DHAVE_LIBDL=1 -DHAVE_DLOPEN=1
>   -DHAVE_DLSYM=1 -DHAVE_DLERROR=1 -DHAVE_DLCLOSE=1 -DHAVE_DLOPEN_API=1
>   -DENABLE_DYNAMIC_LINKING=1 -DHAVE_TIMEVAL=1 -DHAVE_FINITE=1
>   -DHAVE_ISNAN=1 -DHAVE_ISINF=1 -DHAVE_COPYSIGN=1 -DHAVE_DECL_SIGNBIT=1
>   -DHAVE_ACOSH=1 -DHAVE_ASINH=1 -DHAVE_ATANH=1 -DHAVE_ERF=1 -DHAVE_ERFC=1
>   -DHAVE_EXP2=1 -DHAVE_LOG2=1 -DHAVE_STRUCT_STAT_ST_BLKSIZE=1
>   -DHAVE_STRUCT_STAT_ST_BLOCKS=1 -DHAVE_STRUCT_STAT_ST_RDEV=1
>   -DHAVE_STRUCT_TM_TM_ZONE=1 -DHAVE_TM_ZONE=1 -DUSE_READLINE=1
>   -DEXCEPTION_IN_MATH=1 -DRETSIGTYPE=void -DHAVE_DECL_SYS_SIGLIST=1
>   -DHAVE_POSIX_SIGNALS=1 -DHAVE_GETRUSAGE=1 -DHAVE_TIMES=1
>   -DYYTEXT_POINTER=1 -DGNUPLOT_BINARY="gnuplot" -DGNUPLOT_HAS_FRAMES=
>
> User-preferences (please do not edit this section):
> --------------------------------------------------
>
>   EDITOR = vi
>   EXEC_PATH = /usr/lib/octave/2.9.9/site/exec/x86_64-pc-linux-gnu:/usr/lib/octave/api-v22/site/exec/x86_64-pc-linux-gnu:/usr/lib/octave/site/exec/x86_64-pc-linux-gnu:/usr/lib/octave/2.9.9/exec/x86_64-pc-linux-gnu:/usr/bin:/home/paolo/Admin/src/ns-allinone-2.32/bin:/home/paolo/Admin/src/ns-allinone-2.32/tcl8.4.15/unix:/home/paolo/Admin/src/ns-allinone-2.32/tk8.4.15/unix:/home/paolo/opt/agntctrl/bin:/usr/lib/ccache:/usr/lib/icecc/bin:/home/paolo/opt/pappa:/home/paolo/opt/quilt/bin:/home/paolo/opt/git64/bin:/home/paolo/opt/git/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games:/usr/lib/jvm/java-6-sun/bin:/usr/local/vmware/bin:/usr/local/sbin:/sbin:/usr/sbin:/home/paolo/bin:/home/paolo/opt/patch-scripts:/home/paolo/opt/tex4ht.dir/bin/unix:.:/home/paolo/Progs/aspectj1.5/bin
>   IMAGE_PATH = .:/usr/share/octave/2.9.9/imagelib
>   PAGER = less
>   PS1 = \s:\#>
>   PS2 = >
>   PS4 = +
>   automatic_replot = 1
>   beep_on_error = 0
>   completion_append_char =
>   crash_dumps_octave_core = 1
>   echo_executing_commands = 0
>   fixed_point_format = 0
>   gnuplot_binary = gnuplot
>   gnuplot_command_end =
>
>   gnuplot_command_plot = pl
>   gnuplot_command_replot = rep
>   gnuplot_command_splot = sp
>   gnuplot_command_title = t
>   gnuplot_command_using = u
>   gnuplot_command_with = w
>   history_file = /home/paolo/.octave_hist
>   history_size = 1024
>   ignore_function_time_stamp = system
>   info_file = /usr/share/info/octave2.9.info
>   info_program = info
>   makeinfo_program = makeinfo
>   max_recursion_depth = 256
>   output_max_field_width = 5
>   output_precision = 5
>   page_output_immediately = 0
>   page_screen_output = 0
>   print_answer_id_name = 1
>   print_empty_dimensions = 1
>   save_precision = 16
>   saving_history = 1
>   sighup_dumps_octave_core = 1
>   sigterm_dumps_octave_core = 1
>   silent_functions = 0
>   split_long_rows = 1
>   string_fill_char =
>   struct_levels_to_print = 2
>   suppress_verbose_help_message = 0
>
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Bug-octave mailing list
> Bug-octave at octave.org
> https://www.cae.wisc.edu/mailman/listinfo/bug-octave


-- 
David Bateman                                David.Bateman at motorola.com
Motorola Labs - Paris                        +33 1 69 35 48 04 (Ph) 
Parc Les Algorithmes, Commune de St Aubin    +33 6 72 01 06 33 (Mob) 
91193 Gif-Sur-Yvette FRANCE                  +33 1 69 35 77 01 (Fax) 

The information contained in this communication has been classified as: 

[x] General Business Information 
[ ] Motorola Internal Use Only 
[ ] Motorola Confidential Proprietary



More information about the Bug-octave mailing list