~rdoering/ubuntu/karmic/erlang/fix-535090

« back to all changes in this revision

Viewing changes to lib/snmp/src/app/snmp.erl

  • Committer: Bazaar Package Importer
  • Author(s): Sergei Golovan
  • Date: 2009-02-15 16:42:52 UTC
  • mfrom: (3.1.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090215164252-q5x4rcf8a5pbesb1
Tags: 1:12.b.5-dfsg-2
Upload to unstable after lenny is released.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%%<copyright>
2
 
%% <year>1996-2007</year>
 
2
%% <year>1996-2008</year>
3
3
%% <holder>Ericsson AB, All Rights Reserved</holder>
4
4
%%</copyright>
5
5
%%<legalnotice>
38
38
         universal_time_to_date_and_time/1,
39
39
         local_time_to_date_and_time_dst/1, 
40
40
         date_and_time_to_universal_time_dst/1,
41
 
         validate_date_and_time/1, 
42
 
         date_and_time_to_string/1,
 
41
         validate_date_and_time/1, validate_date_and_time/2, 
 
42
         date_and_time_to_string/1, date_and_time_to_string/2, 
 
43
         date_and_time_to_string2/1, 
43
44
 
44
45
         str_apply/1,
45
46
 
624
625
short_time({{Y,M,D},{H,Mi,S}}) ->
625
626
    [y1(Y), y2(Y), M, D, H, Mi, S, 0].
626
627
 
 
628
%% This function will only be called if there has been some 
 
629
%% validation error, and as it is strict, it allways returns 
 
630
%% false. 
 
631
strict_validation(_What, _Data) ->
 
632
    false.
 
633
 
 
634
kiribati_validation(diff, Diff) ->
 
635
    check_kiribati_diff(Diff);
 
636
kiribati_validation(_What, _Data) ->
 
637
    false.
 
638
 
 
639
check_kiribati_diff([$+, H, M]) 
 
640
  when ((0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60)) orelse
 
641
       ((H =:= 14) andalso (M =:= 0)) -> 
 
642
    true;
 
643
check_kiribati_diff([$-, H, M]) 
 
644
  when ((0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60)) orelse
 
645
       ((H =:= 14) andalso (M =:= 0)) ->
 
646
    true;
 
647
check_kiribati_diff(_) ->
 
648
    false.
 
649
 
 
650
 
 
651
date_and_time_to_string2(DAT) ->
 
652
    Validate = fun(What, Data) -> kiribati_validation(What, Data) end,
 
653
    date_and_time_to_string(DAT, Validate).
 
654
 
627
655
date_and_time_to_string(DAT) ->
628
 
    case validate_date_and_time(DAT) of
 
656
    Validate = fun(What, Data) -> strict_validation(What, Data) end,
 
657
    date_and_time_to_string(DAT, Validate).
 
658
date_and_time_to_string(DAT, Validate) when is_function(Validate) ->
 
659
    case validate_date_and_time(DAT, Validate) of
629
660
        true ->
630
661
                dat2str(DAT);
631
662
        false ->
685
716
    [calendar:gregorian_seconds_to_datetime(UTCSecs)].
686
717
 
687
718
 
688
 
validate_date_and_time([Y1,Y2, Mo, D, H, M, S, Ds | Diff]) 
689
 
  when 0 =< Y1, 0 =< Y2, 
690
 
       0 < Mo, Mo < 13, 
691
 
       0 < D, D < 32, 0 =< H,
692
 
       H < 24, 
693
 
       0 =< M, M < 60, 
694
 
       0 =< S, S < 61, 
695
 
       0 =< Ds, Ds < 10 ->
696
 
    case check_diff(Diff) of
 
719
validate_date_and_time(DateAndTime) ->
 
720
    Validate = fun(What, Data) -> strict_validation(What, Data) end,
 
721
    validate_date_and_time(DateAndTime, Validate).
 
722
 
 
723
validate_date_and_time(DateAndTime, Validate) when is_function(Validate) ->
 
724
    do_validate_date_and_time(DateAndTime, Validate).
 
725
 
 
726
do_validate_date_and_time([Y1,Y2, Mo, D, H, M, S, Ds | Diff], Validate) 
 
727
  when ((0 =< Y1) andalso (0 =< Y2)) andalso 
 
728
       ((0 < Mo) andalso (Mo < 13)) andalso 
 
729
       ((0 < D) andalso (D < 32) andalso (0 =< H)) andalso 
 
730
       (H < 24) andalso 
 
731
       ((0 =< M) andalso (M < 60)) andalso  
 
732
       ((0 =< S) andalso (S < 61)) andalso  
 
733
       ((0 =< Ds) andalso (Ds < 10)) ->
 
734
    case check_diff(Diff, Validate) of
697
735
        true ->
698
 
                calendar:valid_date(y(Y1,Y2), Mo, D);
 
736
            Year = y(Y1,Y2), 
 
737
            case calendar:valid_date(Year, Mo, D) of
 
738
                true ->
 
739
                    true;
 
740
                _ ->
 
741
                    Validate(valid_date, {Year, Mo, D})
 
742
            end;
699
743
        false ->
700
 
                false
701
 
    end;
702
 
validate_date_and_time(_) -> false.
 
744
            false
 
745
    end;
 
746
do_validate_date_and_time([Y1,Y2, Mo, D, H, M, S, Ds | Diff], Validate) ->
 
747
    Valid = 
 
748
        Validate(year,         {Y1, Y2}) andalso 
 
749
        Validate(month,        Mo)       andalso 
 
750
        Validate(day,          D)        andalso 
 
751
        Validate(hour,         H)        andalso 
 
752
        Validate(minute,       M)        andalso 
 
753
        Validate(seconds,      S)        andalso 
 
754
        Validate(deci_seconds, Ds),
 
755
    if 
 
756
        Valid =:= true ->
 
757
            case check_diff(Diff, Validate) of
 
758
                true ->
 
759
                    Year = y(Y1,Y2), 
 
760
                    case calendar:valid_date(Year, Mo, D) of
 
761
                        true ->
 
762
                            true;
 
763
                        _ ->
 
764
                            Validate(valid_date, {Year, Mo, D})
 
765
                    end;
 
766
                false ->
 
767
                    false
 
768
            end;
 
769
        true ->
 
770
            false
 
771
    end;
 
772
do_validate_date_and_time(_, _) -> 
 
773
    false.
703
774
 
704
775
%% OTP-4206 (now according to RFC-2579)
705
 
check_diff([]) -> true;
706
 
check_diff([$+, H, M]) when 0 =< H, H < 14, 0 =< M, M < 60 -> true;
707
 
check_diff([$-, H, M]) when 0 =< H, H < 14, 0 =< M, M < 60 -> true;
708
 
check_diff(_) -> false.
 
776
check_diff([], _) -> 
 
777
    true;
 
778
check_diff([$+, H, M], _) 
 
779
  when (0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60) -> 
 
780
    true;
 
781
check_diff([$-, H, M], _) 
 
782
  when (0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60) -> 
 
783
    true;
 
784
check_diff(Diff, Validate) -> 
 
785
    Validate(diff, Diff).
709
786
 
710
787
 
711
788
%%-----------------------------------------------------------------